Как изменить кодировку базы данных для базы данных PostgreSQL с помощью sql или phpPgAdmin?

Как изменить кодировку базы данных для базы данных PostgreSQL с помощью sql или phpPgAdmin?

3 ответов


короче говоря, вы не можете сделать это только с phpPgAdmin или SQL без риска существующее повреждение данных. Вы должны экспортировать все данные, создать базу данных с правильной кодировкой и восстановить экспортированные данные.

вот как вы должны действовать:

  1. создать дамп базы данных:

    pg_dump your_database > your_database.sql

    это сохранит вашу базу данных в формате sql, в кодировке вы в настоящее время иметь.

  2. удалить базу данных (или переименовать его):

    DROP DATABASE your_database

    если у вас достаточно места для хранения, я рекомендую оставить старую базу данных, пока вы не убедитесь, что все в порядке с новой,переименовать это:

    ALTER DATABASE your_database RENAME TO your_database_backup;

  3. создать базу данных с новой кодировкой:

    CREATE DATABASE your_database WITH ENCODING 'UNICODE' TEMPLATE=template0;

  4. импорт данных из дампа, созданный до:

    PGCLIENTENCODING=YOUR_OLD_ENCODING psql -f your_database.sql your_database

    вам нужно установить кодировку клиента psql на тот, который у вас был в старой базе данных.

изменение кодировки "на лету" невозможно, поскольку для этого потребуется переписать большую часть внутренних данных базы данных, что почти равно воссозданию БД, как я описал.

можно просто изменить внутреннюю информацию postgres о базе данных и любые новые данные после этого изменения будут сохранены правильно, однако ваш существующие данные может быть поврежден.


вы можете изменить кодировку на лету без дампа / восстановления:

update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'database_name'

чтобы развернуть ответы, вы можете использовать эти команды для выполнения своей задачи.

// Backup the database to outfile
pg_dump dbname > outfile

// Terminate all connections to the database
psql -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='dbname';"

// Delete the database
psql -c "DROP DATABASE dbname;"

//Re-create the database using the encoding keyword
psql -c "CREATE DATABASE dbname ENCODING='UTF8';"

//Import the saved data
psql -f outfile

база данных сброса:http://www.postgresql.org/docs/9.4/static/backup-dump.html

создание базы данных:http://www.postgresql.org/docs/9.4/static/sql-createdatabase.html

Это список всех кодировок, доступных для версии 9.4: http://www.postgresql.org/docs/9.4/static/multibyte.html#MULTIBYTE-CHARSET-SUPPORTED