base de données Comment puis-je modifier le codage pour une base de données PostgreSQL en utilisant SQL ou phpPgAdmin?

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

  •  22-08-2019
  •  | 
  •  

Question

Comment puis-je modifier le codage de base de données pour une base de données PostgreSQL en utilisant SQL ou phpPgAdmin?

Était-ce utile?

La solution

En bref, vous ne pouvez pas le faire avec seulement phpPgAdmin ou SQL sans risquer corruption de données existantes . Vous devez exporter toutes les données, créer la base de données avec l'encodage correct et restaurer les données exportées.

Voici comment vous devez procéder:

  1. créer le vidage de la base de données :

    pg_dump your_database > your_database.sql

    enregistrera votre base de données au format SQL, en vous encodant avez actuellement.

  2. base de données supprimer (ou renommer):

    DROP DATABASE your_database

    si vous avez assez de stockage pour le faire, je recommande de laisser la base de données ancienne jusqu'à ce que vous assurer que tout est OK avec nouveau, renommage il:

    ALTER DATABASE your_database RENAME TO your_database_backup;

  3. créer la base de données avec de nouveaux encodage :

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

  4. données à l'importation de décharge créées avant :

    PGCLIENTENCODING=YOUR_OLD_ENCODING psql -f your_database.sql your_database

    vous devez définir l'encodage client psql à celui que vous aviez dans la base de données ancienne.

Modification de l'encodage sur la volée n'est pas possible car il faudrait réécrire la plupart des données de base de données interne qui est presque égale à recréer façon db je l'ai décrit.

Il est possible de modifier simplement des informations postgres internes sur la base de données et de nouvelles données après cette modification sera enregistrée correctement, mais vos données existantes pourraient être corrompues .

Autres conseils

Vous pouvez modifier le codage à la volée sans vidage / restauration:

update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'database_name'

Pour développer les réponses, vous pouvez utiliser ces commandes pour accomplir votre tâche.

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

Base de données Dumping: http://www.postgresql.org/docs /9.4/static/backup-dump.html

Base de données Création: http://www.postgresql.org/docs /9.4/static/sql-createdatabase.html

Voici une liste de tous les encodages disponibles pour la version 9.4: http://www.postgresql.org/docs/9.4 /static/multibyte.html#MULTIBYTE-CHARSET-SUPPORTED

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top