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

StackOverflow https://stackoverflow.com/questions/380924

  •  22-08-2019
  •  | 
  •  

Pergunta

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

Foi útil?

Solução

Em suma, você não pode fazer isso com apenas phpPgAdmin ou SQL sem arriscar corrupção de dados existentes . 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 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 você tem atualmente.

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

    DROP DATABASE your_database

    Se você tem de armazenamento suficiente para fazê-lo eu recomendo deixando antigo banco de dados até que você se certificar que tudo está OK com nova, renomeação -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 criados 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.

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

É possível apenas alter postgres internos informações sobre banco de dados e quaisquer novos dados após esta alteração serão salvos corretamente, no entanto os seus dados existentes pode ter corrompido .

Outras dicas

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'

Para expandir nas 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 Criação: 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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top