`
LJ你是唯一LT
  • 浏览: 243441 次
社区版块
存档分类
最新评论

postgresql新建库2个常见报错

阅读更多
今天使用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}
分享到:
评论

相关推荐

    navicat 连接PostgreSQL报错

    ### Navicat 连接 PostgreSQL 报错:ERROR: SSL connection is required by the database system 在使用 Navicat 连接 PostgreSQL 数据库时遇到“ERROR: SSL connection is required by the database system”错误...

    postgresql ubantu离线安装版报错的补丁

    postgresql ubantu离线安装版报错的补丁

    arm架构下的postgresql库文件

    这个版本以.tar.bz2格式压缩,是一种常见的在Linux系统中分发软件的方式。用户需要先解压,然后编译安装。解压后,通常会包含源代码、文档、配置脚本和必要的构建工具。 "poco"是一个跨平台的C++库,用于开发网络、...

    postgresql离线安装包及依赖库

    2. 依赖库:PostgreSQL运行需要一些特定的库文件支持,比如libssl(用于加密通信)、libpq(PostgreSQL的C语言接口库)等。离线安装包通常会打包这些必要的依赖库,确保在无网络环境中也能正常运行。 3. 安装指南:...

    postgresql9.6库jdbc包

    1. **类型4驱动**:PostgreSQL JDBC驱动是一个类型4纯Java驱动,无需本地库,可以直接通过网络与数据库服务器通信。 2. **连接URL**:使用类似`jdbc:postgresql://hostname:port/databaseName`的格式建立连接,其中...

    postgresql-13.3-2-windows-x64 windows安装器

    postgresql-13.3-2-windows-x64 windows安装器 postgresql-13.3-2-windows-x64 windows安装器 postgresql-13.3-2-windows-x64 windows安装器 postgresql-13.3-2-windows-x64 windows安装器 postgresql-13.3-2-...

    同时连线到 MySQL、SQLite、Oracle 及 PostgreSQL 资料库,让管理不同类型的资料库更加的方便。

    Navicat premium是一款数据库管理工具,是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连线到 MySQL、SQLite、Oracle 及 PostgreSQL 资料库,让管理不同类型的资料库更加的方便。

    PostgreSQL DBA认证 PGCE-E-092-中级SQL题目

    PostgreSQL DBA认证PGCE-E-092-中级SQL题目是一个测试SQL掌握程度的题目,涵盖了PostgreSQL数据库管理系统的各种知识点。 LIKE操作符 在PostgreSQL中,LIKE操作符用于字符串模式匹配。LIKE操作符有两种通配符:%和...

    CodeSmith8.0.1连接PostgreSQL报错问题解决

    本文将详述CodeSmith 8.0.1版本在尝试连接到PostgreSQL数据库时遇到的问题,以及如何通过添加必要的DLL文件和理解连接字符串来解决这个问题。 首先,CodeSmith是一款强大的代码生成器,它允许开发者通过模板语言...

    postgreSQL库

    这个目录下的文件主要是静态和动态链接库(.lib和.dll),它们是实际运行时与PostgreSQL交互所需的库。在Windows环境下,`.lib`文件用于静态链接,将库功能直接集成到可执行文件中;而`.dll`文件则用于动态链接,...

    DB2到GreenPlum/PostgreSQL的转换指南

    - **主键**:DB2中的主键定义与GreenPlum/PostgreSQL相似,但需要注意的是,在GreenPlum/PostgreSQL中,主键约束通常会自动创建一个唯一索引。 - **外键**:DB2支持外键约束,但在GreenPlum/PostgreSQL中,外键约束...

    PostgreSql+PostGis创建空间数据库

    PostgreSql 是一个功能强大且开源的关系数据库管理系统,它提供了一个强大的平台来存储和管理数据。PostGis 是一个基于PostgreSql 的空间数据库扩展,它提供了对空间数据的支持,允许用户存储、查询和分析空间数据。...

    开源gis shape文件入PostgreSQL库

    二、PostgreSQL 简介 PostgreSQL 是一个开源的关系数据库管理系统,能够存储和管理大量数据。它提供了强大的数据处理能力,包括事务处理、锁机制、索引机制等功能。PostgreSQL 广泛应用于各种行业,包括金融、商业...

    Postgresql 10.20.2 Windows 64位安装包

    Postgresql 10.20.2 Windows 64位安装包Postgresql 10.20.2 Windows 64位安装包Postgresql 10.20.2 Windows 64位安装包Postgresql 10.20.2 Windows 64位安装包Postgresql 10.20.2 Windows 64位安装包Postgresql ...

    postgresql, PostgreSQL cookbook 开发库.zip

    postgresql, PostgreSQL cookbook 开发库 cookbook 安装并配置PostgreSQL作为客户机或者服务器。要求平台Amazon LinuxDebian 7 Ubuntu 14.04 红色 Hat/CentOS/Scientific 6 Fed

    jeecgboot(postgreSQL).pdf

    PostgreSQL 是一个功能强大且免费的开源关系数据库管理系统。本文将指导您如何将 Jeecgboot 与 PostgreSQL 集成,以便更好地使用 PostgreSQL 的强大功能。 1. 更改数据源 要将 Jeecgboot 集成到 PostgreSQL,需要...

    Postgresql-10安装包

    3. **临时表空间**:PostgreSQL 10 支持为每个会话创建临时表空间,增强了对临时对象的管理,提高了并发性能。 4. **自动 Vacuum 优化**:自动 Vacuum 过程进行了改进,能更好地处理大量删除和更新操作,减少存储...

    postgresql驱动

    Postgresql

    转:LINUX POSTGRESQL测试库配置

    在Linux环境中配置PostgreSQL测试库是一项重要的任务,它涉及到数据库的安装、配置、以及测试环境的搭建。PostgreSQL是一款开源的关系型数据库管理系统,以其高度稳定性和丰富的功能深受开发者喜爱。以下将详细介绍...

    一套C#与PostgreSQL数据库完美结合的实例

    本程序的重点是如何利用C#对PostgreSQL数据库进行操作,PDatabase.cs是一个完整的操作类,role是角色表的操作类,程序采用三层架构模型。 在对PostgreSQL数据库进行操作时,用到了如何调用存储过程来完成各项操作。...

Global site tag (gtag.js) - Google Analytics