我如何可以改变的数据库编码为PostgreSQL数据库使用sql或phpPgAdmin?

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

  •  22-08-2019
  •  | 
  •  

我如何可以改变的数据库编码为PostgreSQL数据库使用sql或phpPgAdmin?

有帮助吗?

解决方案

总之,你不能这样做只有phpPgAdmin或SQL,而不用担心 现有数据的腐败.你必须出口的所有数据,以创建数据库正确的编码和恢复出口数据。

这是你应该如何继续:

  1. 创建数据库dump:

    pg_dump your_database > your_database.sql

    这将保存你在sql数据库的格式,在编码你现在拥有的。

  2. 删除的数据库 (或者重新命名):

    DROP DATABASE your_database

    如果你有足够的存储做到这一点我建议离开旧的数据库直到你确定一切都确定了新的一个, 重命名 它:

    ALTER DATABASE your_database RENAME TO your_database_backup;

  3. 创建数据库,用新的编码:

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

  4. 进口数据转储创造之前:

    PGCLIENTENCODING=YOUR_OLD_ENCODING psql -f your_database.sql your_database

    你需要帮助的客户编码之一你不得不在旧的数据库。

改变编码on-the-fly是不可能的,因为这将需要改写大多数内部数据库的数据,这几乎等同于重新创建db办法,我所描述的。

这可能只是改变内部postgres信息数据库和任何新的数据后,这种改变将被保存正确,但是现有的数据 可能会损坏.

其他提示

您可以在飞行中改变编码没有转储/恢复:

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

要扩大在给出答案,你可以使用这些命令来完成你的任务。

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

转储数据库: http://www.postgresql.org/docs /9.4/static/backup-dump.html

创建数据库: http://www.postgresql.org/docs /9.4/static/sql-createdatabase.html

这是适用于9.4版本的所有编码的列表: http://www.postgresql.org/docs/9.4 /static/multibyte.html#MULTIBYTE-CHARSET-SUPPORTED

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top