postgresql新建库2个常见报错

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介:
今天使用pg建库发现两个报错: 

ERROR:  new collation (zh_CN.UTF-8) is incompatible with the collation of the template database (en_US.UTF-8) 
ERROR:  source database "template1" is being accessed by other users 


建库语句: 
CREATE DATABASE tinadb 
  WITH OWNER = postgres 
       ENCODING = 'UTF8' 
       TABLESPACE = pg_default 
       LC_COLLATE = 'zh_CN.UTF-8' 
       LC_CTYPE = 'zh_CN.UTF-8' 
       CONNECTION LIMIT = -1 
       template template1; 
报错信息: 
ERROR:  new collation (zh_CN.UTF-8) is incompatible with the collation of the template database (en_US.UTF-8) 
HINT:  Use the same collation as in the template database, or use template0 as template. 

按照提示,我们应该使用跟模板数据库相同的collation,或者使用模板template0 
postgres=# \l 
                                   List of databases 
     Name     |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
--------------+----------+----------+-------------+-------------+----------------------- 
postgres     | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
rename_check | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =Tc/postgres         + 
              |          |          |             |             | postgres=CTc/postgres 
template0    | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          + 
              |          |          |             |             | postgres=CTc/postgres 
template1    | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          + 
              |          |          |             |             | postgres=CTc/postgres 
(4 rows) 
其实我们可以看到template0和template1的collate是一样的,但template0允许建立不同的collation的库 

解决办法: 
CREATE DATABASE rename_check 
WITH OWNER = postgres 
   ENCODING = 'UTF8' 
   TABLESPACE = pg_default 
   LC_COLLATE = 'zh_CN.UTF-8' 
   LC_CTYPE = 'zh_CN.UTF-8' 
   CONNECTION LIMIT = -1 
   TEMPLATE template0;    --使用template0 



另外一个常见的报错信息: 
ERROR:  source database "template1" is being accessed by other users 
DETAIL:  There are 1 other session(s) using the database. 

解决办法: 
1.使用pg的另外一个模板库template0 
[postgres@kenyon  ~]$ createdb -T template0 tinadb -p 5432 
Password: 

2.杀掉连接到template1的进程,再执行一次建库语句 
postgres=# select procpid from pg_stat_activity where DATNAME = 'template1'; 
procpid 
--------- 
   8879 
postgres=# \q 
[postgres@kenyon  ~]$ kill 8879 


附带模板库template0 与 template 1以及数据库视图pg_database的说明 
1.安装好数据库初始化时,template0与template1都是一样的,是一个干净的库,内容也一样 
2.初始化完以后,用户可定制template1,比如新增自定义函数,在创建新库时都会附带该自定义函数而无需在新库里创建 
3.一般不允许再对template0进行各种操作,以保证其是个干净的库,对数据库的恢复比较有帮助。 
数据库恢复建立新库时可以指定template0为模板,可以创建一个干净的新库 
4.创建新库时是不能连接新的session的,而有新的session连在模板库上会导致创建失败 
5.视图pg_database的主要字段说明 
postgres=# \d pg_database; 
    Table "pg_catalog.pg_database" 
    Column     |   Type    | Modifiers 
---------------+-----------+----------- 
datname       | name      | not null 
datdba        | oid       | not null 
encoding      | integer   | not null 
datcollate    | name      | not null 
datctype      | name      | not null 
datistemplate | boolean   | not null 
datallowconn  | boolean   | not null 
datconnlimit  | integer   | not null 
datlastsysoid | oid       | not null 
datfrozenxid  | xid       | not null 
dattablespace | oid       | not null 
datacl        | aclitem[] | 
Indexes: 
    "pg_database_datname_index" UNIQUE, btree (datname), tablespace "pg_global" 
    "pg_database_oid_index" UNIQUE, btree (oid), tablespace "pg_global" 
Tablespace: "pg_global" 
datistemplate:可否允许作为模板,如果true,则任何有createdb的用户都可创建,一般用户数据库该值是false 
datallowconn 表示可否允许连接,template0一般不允许连接,其他数据库可连接 
datconnlimit   表示连接限制,-1表示无限制 

postgres=# select * from pg_database; 
   datname    | datdba | encoding | datcollate  |  datctype   | datistemplate | datallowconn | datconnlimit | datlastsysoid | datfrozenxid | dattablespace 
|                datacl                
--------------+--------+----------+-------------+-------------+---------------+--------------+--------------+---------------+--------------+--------------- 
+-------------------------------------- 
template1    |     10 |        6 | en_US.UTF-8 | en_US.UTF-8 | t             | t            |           -1 |         12772 |         1795 |          1663 
| {=c/postgres,postgres=CTc/postgres} 
template0    |     10 |        6 | en_US.UTF-8 | en_US.UTF-8 | t             | f            |           -1 |         12772 |         1795 |          1663 
| {=c/postgres,postgres=CTc/postgres}
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
5月前
|
SQL Oracle 关系型数据库
实时计算 Flink版操作报错之往GREENPLUM 6 写数据,用postgresql-42.2.9.jar 报 ON CONFLICT (uuid) DO UPDATE SET 语法有问题。怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
11月前
|
关系型数据库 PostgreSQL
解决Navicat连接postgresql时出现‘datlastsysoid does not exist‘报错
解决Navicat连接postgresql时出现‘datlastsysoid does not exist‘报错
1186 0
|
关系型数据库 PostgreSQL Docker
harbor-db重启报错:initdb: error: directory "/var/lib/postgresql/da..
harbor-db重启报错:initdb: error: directory "/var/lib/postgresql/da..
430 1
|
1月前
|
SQL 关系型数据库 数据库
PostgreSQL数据库报错 ERROR: multiple default values specified for column "" of table "" 如何解决?
PostgreSQL数据库报错 ERROR: multiple default values specified for column "" of table "" 如何解决?
224 59
|
5月前
|
SQL 关系型数据库 数据库
实时计算 Flink版操作报错之使用SQL 将 PostgreSQL 的 date 类型字段转换为 TIMESTAMP 类型时遇到报错,该如何处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
4月前
|
消息中间件 Java 关系型数据库
实时计算 Flink版操作报错合集之从 PostgreSQL 读取数据并写入 Kafka 时,遇到 "initial slot snapshot too large" 的错误,该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
999 0
|
3月前
|
分布式计算 DataWorks 关系型数据库
DataWorks操作报错合集之使用连接串模式新增PostgreSQL数据源时遇到了报错"not support data sync channel, error code: 0001",该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
3月前
|
SQL 监控 关系型数据库
实时计算 Flink版操作报错合集之在设置监控PostgreSQL数据库时,将wal_level设置为logical,出现一些表更新和删除操作报错,怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
3月前
|
关系型数据库 MySQL 数据库
实时计算 Flink版操作报错合集之在处理PostgreSQL数据库遇到报错。该如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
4月前
|
SQL 关系型数据库 数据库
nacos 2.2.3版本 查看配置文件的历史版本的接口 是针对MySQL数据库的sql 改成postgresql后 sql语句报错 该怎么解决
在Nacos 2.2.3中切换到PostgreSQL后,执行配置文件历史版本分页查询出错,因`LIMIT 0, 10`语法不被PostgreSQL支持,需改为`LIMIT 10 OFFSET 0`。仅当存在历史版本时报错。解决方案是调整查询SQL以兼容PostgreSQL语法。