Come posso cambiare la codifica del database per un database PostgreSQL utilizzando SQL o phpPgAdmin?
-
22-08-2019 - |
Domanda
Come posso cambiare la codifica del database per un database PostgreSQL utilizzando SQL o phpPgAdmin?
Soluzione
In breve, non si può fare questo con solo phpPgAdmin o SQL senza rischiare esistente corruzione dei dati . Dovete esportare tutti i dati, creare database con codifica corretta e ripristinare i dati esportati.
Questo è come si dovrebbe procedere:
-
creare dump del database :
pg_dump your_database > your_database.sql
Consente di salvare il database in formato SQL, nella codifica attualmente si dispone.
-
database di eliminare (o rinominarlo):
DROP DATABASE your_database
se avete abbastanza memoria per farlo vi consiglio di lasciare vecchio database fino a quando si assicurarsi che tutto è OK con uno nuovo, Rinomina è:
ALTER DATABASE your_database RENAME TO your_database_backup;
-
database di creare con la nuova codifica :
CREATE DATABASE your_database WITH ENCODING 'UNICODE' TEMPLATE=template0;
-
importare dati da discarica creati prima :
PGCLIENTENCODING=YOUR_OLD_ENCODING psql -f your_database.sql your_database
è necessario impostare la codifica client psql a quello che si aveva in vecchio database.
Modifica codifica on-the-fly non è possibile in quanto richiederebbe riscrivere la maggior parte dei dati del database interno che è quasi uguale a ricreare modo db ho descritto.
E 'possibile modificare solo Postgres informazioni interne su banca dati e tutti i nuovi dati dopo questa alterazione verrà salvato in modo corretto, tuttavia i dati esistenti potrebbero avere danneggiato .
Altri suggerimenti
È possibile modificare la codifica al volo senza dump / restore:
update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'database_name'
Per espandere sulle risposte date, è possibile utilizzare questi comandi per compiere il proprio compito.
// 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
database di dumping: http://www.postgresql.org/docs /9.4/static/backup-dump.html
del database Creazione: http://www.postgresql.org/docs /9.4/static/sql-createdatabase.html
Questa è una lista di tutte le codifiche disponibili per la versione 9.4: http://www.postgresql.org/docs/9.4 /static/multibyte.html#MULTIBYTE-CHARSET-SUPPORTED