Come posso cambiare la codifica del database per un database PostgreSQL utilizzando SQL o phpPgAdmin?

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

  •  22-08-2019
  •  | 
  •  

Domanda

Come posso cambiare la codifica del database per un database PostgreSQL utilizzando SQL o phpPgAdmin?

È stato utile?

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:

  1. creare dump del database :

    pg_dump your_database > your_database.sql

    Consente di salvare il database in formato SQL, nella codifica attualmente si dispone.

  2. 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;

  3. database di creare con la nuova codifica :

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

  4. 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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top