18

如何将 Collat​​ion, cType 更改为 -en_INen_US.UTF-8

                              List of databases
   Name    |  Owner   | Encoding |  Collation  |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 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

我当前的 postgresversion 是 8.4,我使用它安装了它

sudo apt-get install postgresql-8.4 postgresql-contrib-8.4

我在我的 ubuntu 亚马逊服务器 ec2 中这样做

4

4 回答 4

13

我的建议:

  1. 拿一个 pg_dumpall

  2. 重新初始化数据库集群,确保语言环境信息正确

  3. 恢复你的转储。

我发现有时可能必须使用模板 template0(来自 bash 或WITH TEMPLATE template0来自 psql 的 -T template0)创建一个数据库才能使用非 init-db 语言环境。

于 2013-11-29T06:39:26.910 回答
13

没有必要重新创建整个数据库集群。但是,您需要重新创建数据库。

使用这些选项 ( ) 运行 createdb man createdb

   -E encoding, --encoding=encoding
       Specifies the character encoding scheme to be used in this
       database. The character sets supported by the PostgreSQL server
       are described in Section 22.3.1, “Supported Character Sets”, in
       the documentation.

   -l locale, --locale=locale
       Specifies the locale to be used in this database. This is
       equivalent to specifying both --lc-collate and --lc-ctype.

   --lc-collate=locale
       Specifies the LC_COLLATE setting to be used in this database.

   --lc-ctype=locale
       Specifies the LC_CTYPE setting to be used in this database.

看来您真的无法更改现有数据库的排序规则:

=> ALTER DATABASE dbname SET "Collate" To Russian;
ERROR:  unrecognized configuration parameter "Collate"

请注意,您可以为表或列设置排序规则,请参阅 PostgreSQL 中排序规则的好教程

于 2016-05-14T10:07:23.087 回答
9

我不得不更改为 POSIX.UTF-8。我使用以下命令进行了管理:

su postgres
psql
\l
update pg_database set datcollate='POSIX.UTF-8', datctype='POSIX.UTF-8' where datname='databasename';
\l
于 2020-05-04T15:02:06.290 回答
-7

它非常简单的解决方案。

步骤1。su - postgres
第2步。psql
Setp3。update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'icinga';(不要忘记添加;)
Step4。\l to check

于 2019-04-30T22:01:12.257 回答