Como eu posso mudar a codificação do banco de dados para um banco de dados PostgreSQL usando SQL ou phpPgAdmin?

votos
27

Como eu posso mudar a codificação do banco de dados para um banco de dados PostgreSQL usando SQL ou phpPgAdmin?

Publicado 19/12/2008 em 14:11
fonte usuário
Em outras línguas...                            


3 respostas

votos
43

Em suma, você não pode fazer isso com apenas phpPgAdmin ou SQL sem o risco de corrupção de dados existente . Você tem que exportar todos os dados, criar banco de dados com codificação correta e restaurar dados exportados.

Isto é como você deve proceder:

  1. criar despejo de banco de dados :

    pg_dump your_database > your_database.sql

    isso vai salvar o seu banco de dados em formato sql, na codificação que têm actualmente.

  2. excluir da base de dados (ou renomeá-lo):

    DROP DATABASE your_database

    se você tiver armazenamento suficiente para fazê-lo eu recomendo deixando antigo banco de dados até que você se certificar que tudo está OK com um novo, renomeie -lo:

    ALTER DATABASE your_database RENAME TO your_database_backup;

  3. criar banco de dados com a nova codificação :

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

  4. importar dados de despejo criado antes :

    PGCLIENTENCODING=YOUR_OLD_ENCODING psql -f your_database.sql your_database

    você precisa definir codificação do cliente psql para que você tinha no banco de dados antigo.

Mudando a codificação on-the-fly não é possível, uma vez que exigiria reescrever a maioria dos dados do banco de dados interno, que é quase igual ao recriar db maneira que eu descrevi.

É possível apenas alterar postgres informações internas sobre banco de dados e quaisquer novos dados após essa alteração será salvo corretamente, no entanto os seus dados existentes pode ter corrompido .

Respondeu 19/12/2008 em 14:21
fonte usuário

votos
14

Você pode alterar a codificação em tempo real, sem dump / restore:

update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'database_name'
Respondeu 15/08/2015 em 06:32
fonte usuário

votos
4

Para ampliar as respostas dadas, você pode usar esses comandos para realizar sua tarefa.

// 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

Banco de dados de dumping: http://www.postgresql.org/docs/9.4/static/backup-dump.html

Banco de dados Criando: http://www.postgresql.org/docs/9.4/static/sql-createdatabase.html

Esta é uma lista de todas as codificações disponíveis para a versão 9.4: http://www.postgresql.org/docs/9.4/static/multibyte.html#MULTIBYTE-CHARSET-SUPPORTED

Respondeu 20/08/2015 em 18:25
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more