Как я могу изменить кодировку базы данных для базы данных PostgreSQL, используя sql или phpPgAdmin?
Как изменить кодировку базы данных для базы данных PostgreSQL с помощью sql или phpPgAdmin?
Ответы (3)
Короче говоря, вы не можете сделать это только с помощью phpPgAdmin или SQL, не рискуя существующим повреждением данных. Вы должны экспортировать все данные, создать базу данных с правильной кодировкой и восстановить экспортированные данные.
Вот как вы должны действовать:
создать дамп базы данных:
pg_dump your_database > your_database.sql
это сохранит вашу базу данных в формате sql, в кодировке, которая у вас есть.
удалить базу данных (или переименовать):
DROP DATABASE your_database
если у вас достаточно места для этого, я рекомендую оставить старую базу данных, пока вы не убедитесь, что все в порядке с новой, переименуйте ее:
ALTER DATABASE your_database RENAME TO your_database_backup;
создать базу данных с новой кодировкой:
CREATE DATABASE your_database WITH ENCODING 'UNICODE' TEMPLATE=template0;
импортировать данные из дампа, созданного ранее:
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'
-bash: syntax error near unexpected token
('`
- person Abhipso Ghosh; 24.06.2017
Чтобы расширить полученные ответы, вы можете использовать эти команды для выполнения своей задачи.
// 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