Изменить сортировку базы данных, тип Ctype в Postgresql

как мне изменить Collation, cType - en_IN от en_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

моя текущая постгрессивная версия - 8.4 ive установил его с помощью

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

im делать это на моем сервере ubuntu amazon ec2

Ответ 1

Моя рекомендация:

  • возьмите pg_dumpall

  • повторно инициализируйте кластер db, убедившись, что локальная информация верна.

  • восстановить дамп.

Я обнаружил, что иногда бывает возможно создать db с шаблоном шаблона0 (-T template0 из bash или WITH TEMPLATE template0 из psql), чтобы использовать локаль не-init-db.

Ответ 2

Нет необходимости воссоздавать весь кластер базы данных. Однако вам нужно восстановить свою базу данных.

Запустите createb с этими параметрами (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.

Ответ 3

его очень очень простые решения.

Шаг 1. su - postgres Step2. psql Setp3. обновить базу данных pg_database encoding = pg_char_to_encoding ('UTF8') где datname = 'icinga'; (не забудьте добавить;) Шаг 4. чтобы проверить

Ответ 4

Это сработало для меня для моей базы данных DEV. Не пытайтесь сделать это для своей производственной базы данных. Вы можете потерять существующие индексы.

Повторите приведенный ниже запрос для template1 и template0

update pg_database set datcollate='en_IN', datctype='UTF-8' where datname='postgres'