use*_*909 27 postgresql postgresql-9.2
我想通过以下方式构建新的postgreSQL数据库:
CREATE DATABASE newdb
WITH OWNER = postgres
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'zh_CN.UTF-8'
CONNECTION LIMIT = -1;
Run Code Online (Sandbox Code Playgroud)
而错误是:
错误:新排序规则(zh_CN.UTF-8)与模板数据库的排序规则不兼容(en_US.UTF8)
提示:使用与模板数据库中相同的排序规则,或使用template0作为模板.
如何更改模板数据库集合?
Tom*_*eif 41
从PostgreSQL文档:
复制template0而不是template1的另一个常见原因是,在复制template0时可以指定新的编码和区域设置,而template1的副本必须使用与其相同的设置.这是因为template1可能包含特定于编码或特定于语言环境的数据,而template0则不知道.
您只能template0用于创建具有不同编码和区域设置的新数据库:
CREATE DATABASE newdb
WITH OWNER = postgres
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'zh_CN.UTF-8'
CONNECTION LIMIT = -1
TEMPLATE template0;
Run Code Online (Sandbox Code Playgroud)
这将起作用,但这意味着您所做的任何更改template1都不会应用于新创建的数据库.
要更改编码和整理template1,你必须先删除template1然后再创建新的模板template1从template0.这里描述了如何删除模板数据库.然后,您可以template1使用选定的编码/排序规则创建新数据库,并通过设置datistemplate=true(示例)将其标记为模板:
update pg_database set datistemplate=true where datname='template1';
Run Code Online (Sandbox Code Playgroud)
dav*_*rez 13
Tomas 的回答是正确的,但它遗漏了一个重要的细节 ( LC_CTYPE)。以下是template1使用正确语言环境重新创建的完整序列:
ALTER database template1 is_template=false;
DROP database template1;
CREATE DATABASE template1
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;
ALTER database template1 is_template=true;
Run Code Online (Sandbox Code Playgroud)
然后你可以创建新的数据库。
| 归档时间: |
|
| 查看次数: |
24995 次 |
| 最近记录: |