您的位置:首页 > 数据库

postgresql 字符集server_encoding变更

2015-11-30 14:56 447 查看
--今天在使用postgres_fdw做远端数据库转储时,发现本地所使用的字符集与远端是不同的,造成插入数据错误

postgres=# insert into t select * from for_t;    

ERROR:  character with byte sequence 0xe7 0xa6 0xb4 in encoding "UTF8" has no equivalent in encoding "EUC_CN"

CONTEXT:  Remote SQL command: SELECT  pnr FROM rudy.t

--本地的编码

postgres=# select name,setting,context from pg_settings  where name like '%encoding%';     

      name       | setting | context  

-----------------+---------+----------

 client_encoding | UTF8    | user

 server_encoding | EUC_CN  | internal

 

 --远端的数据库编码

 dev=# select name,setting,context from pg_settings  where name like '%encoding%';     

      name       | setting | context  

-----------------+---------+----------

 client_encoding | UTF8    | user

 server_encoding | UTF8    | internal

 

 

 --可以选择导出数据,使用inserts方式,再执行导入

 pg_dump -d dev -t rudy.t --data-only --inserts -f /tmp/t.sql

 psql -l -f /tmp/t.sql

 

 --注意使用这种方式导入时比较慢

 --如果其中某一行命令出错,那么将仅有该行数据丢失,而不是整个表的数据丢失,即不能做到事务安全

 --由于编码的原因会造成一部分数据不能导入成功

 ERROR:  character with byte sequence 0xe7 0xa6 0xb4 in encoding "UTF8" has no equivalent in encoding "EUC_CN"

 

 

 

 --也可以重新初始化一个新的数据库集群

--备份整个数据库集群

 pg_dumpall -f /tmp/pg_dump.sql

  mv data/ data_bak

  initdb -E UTF8 --local=C

  --覆盖新生成的配置文件

  cp ../data_bak/postgresql.conf .

  cp ../data_bak/pg_hba.conf . 

 --导入之前导出的文件则可

  psql -f /tmp/pg_dump.sql
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: