Postgresql 如何使用正确的编码进行db_转储

Postgresql 如何使用正确的编码进行db_转储,postgresql,Postgresql,我正在做一个脚本,可以下载远程postgres数据库的db_转储 问题是,我正试图让远程数据库正确的编码,但我无法做到这一点 远程数据库有一个拉丁1编码,当我执行我转储的脚本时,它是UTF-8 注意,我希望它保留远程数据库的编码,因此如果远程数据库是UTF-8,我希望本地数据库也是UTF-8 有人知道如何做到这一点吗???从pg_restore的文档中: -C, --create Zieldatenbank erzeugen 这将从转储自动创建目标数据库。但是,我不知道

我正在做一个脚本,可以下载远程postgres数据库的db_转储

问题是,我正试图让远程数据库正确的编码,但我无法做到这一点

远程数据库有一个拉丁1编码,当我执行我转储的脚本时,它是UTF-8

注意,我希望它保留远程数据库的编码,因此如果远程数据库是UTF-8,我希望本地数据库也是UTF-8


有人知道如何做到这一点吗???

从pg_restore的文档中:

-C, --create             Zieldatenbank erzeugen

这将从转储自动创建目标数据库。但是,我不知道编码是否总是正确的,或者只是为您还原到的服务器定义的默认数据库编码。

在PostgreSQL数据库中,数据库有一个编码,但与数据库/会话的连接也有一个编码。 服务器将动态执行必要的数据转换

命令pg_dump已经使用了正确的编码——默认情况下,它是原始数据库,但您可以选择不同的by-E选项。如果您使用-C,那么它将添加具有适当编码(纯文本格式)的CREATE语句

看看这几行pg_dump(-E LATIN1-C)SQL文件:

SET client_encoding = 'LATIN1';
...
CREATE DATABASE postgres WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'pl_PL.UTF-8' LC_CTYPE = 'pl_PL.UTF-8';

您所要做的就是使用所需的编码创建数据库,或者使用-cpg_dump选项在转储文件中包含create命令。PostgreSQL psql(或pg_restore)将完成其余工作。

我刚刚遇到这个问题,无法找到一个干净的解决方案。谷歌把我带到了这里。最后,我手动编辑pg_dump生成的文件,将编码添加到其CREATE语句中

像这样:

sed -i "s/CREATE DATABASE dbname WITH TEMPLATE = template0 OWNER = dbuser/CREATE DATABASE dbname WITH TEMPLATE = template0 OWNER = dbuser ENCODING = desired encoding/" data.sql

-C对我来说不是一个有效的选项。。。它生成的模板,我没有这样的东西。。。此外,上述解决方案不起作用我不知道为什么将设置为正确的编码,但这不起作用:(所以您有两个数据库和一个脚本可以将数据从一个数据库复制到另一个数据库?远程数据库使用拉丁1编码。本地数据库是什么?您可以选择“仅创建数据库”上的编码。如果您在会话中不创建数据库,则它是预先排序的。SET client_编码仅在传输期间影响数据。