正在将postgresql本地数据库复制到远程数据库(均使用密码)-错误:option";地点“;不认识

正在将postgresql本地数据库复制到远程数据库(均使用密码)-错误:option";地点“;不认识,postgresql,psql,pg-dump,postgresql-12,postgresql-13,Postgresql,Psql,Pg Dump,Postgresql 12,Postgresql 13,使用Postgres 12/Windows 10 尝试使用以下命令将远程数据库复制到本地主机: pg_dump-C-h remotehost-p5432-U postgres remotedb | psql-h localhost-p5432-U postgres localdb CMD请求密码2x 用户postgres的密码:密码: 我首先输入localhost,按ENTER键,然后输入remotehost,然后再次按ENTER键 这就是我得到的回报: SET SET SET SET SET

使用Postgres 12/Windows 10

尝试使用以下命令将远程数据库复制到本地主机:

pg_dump-C-h remotehost-p5432-U postgres remotedb | psql-h localhost-p5432-U postgres localdb

CMD请求密码2x

用户postgres的密码:密码:

我首先输入localhost,按ENTER键,然后输入remotehost,然后再次按ENTER键

这就是我得到的回报:

SET
SET
SET
SET
SET
 set_config
------------

(1 row)

SET
SET
SET
SET
ERROR:  option "locale" not recognized
LINE 1: ...ting" WITH TEMPLATE = template0 ENCODING = 'UTF8' LOCALE = '...
                                                             ^
ERROR:  database "remotedb" does not exist
\connect: FATAL:  database "remotedb" does not exist
pg_dump: error: could not write to output file: Broken pipe
  • 如何解决“第一个错误”选项“无法识别区域设置”
  • 第二个错误与我如何输入密码有关吗?当两个数据库都请求密码时,我应该如何工作

在测试了Abelisto的建议后,我找到了这两个问题的答案:

对问题1的回答

正如Abelisto所告知的,postgres 12没有用于
创建数据库
区域设置
选项,而postgres 13有

第12期研究生:

第13期研究生:

然后,在目标数据库上手动创建数据库并从命令中删除
-C
,解决了此问题。下面是最后一个命令:

pg_dump-h remotehost-p5432-U postgres remotedb | psql-h localhost-p5432-U postgres localdb

观察到,我安装了postgres 12和13,但为postgres 13设置了
psql
路径。因此,无论我试图在postgres 12数据库之间
pg dump
,我都会得到
locale
错误,因为
psql
使用postgres 13运行命令

对问题2的回答

输入两个密码的过程是正确的:

  • 目标数据库密码
  • 按回车键
  • 源数据库密码
  • 按回车键

  • 您不需要手动创建数据库。
    通过使用
    sed
    LOCALE
    替换为
    LC\u-COLLATE
    ,您可以在一行程序中执行以下操作:

    您的命令应该如下所示:
    注意!仅当您使用脚本(纯文本)文件格式进行备份时,此操作才有效

    pg_dump-C-h remotehost-p5432-U postgres remotedb | sed's/LOCALE/LC_COLLATE/| psql-h localhost-p5432-U postgres localdb
    
    说明:

    脚本转储是纯文本文件,包含重建数据库所需的SQL命令。将
    -C
    标志添加到
    pg_dump
    时,转储文件将包含以下语句:

    • 12岁及以上的研究生
    使用TEMPLATE=template0 ENCODING='UTF8'LC_COLLATE='en_US.UTF-8'LC_CTYPE='en_US.UTF-8'创建数据库yourdb;
    
    • 博士后13
    使用TEMPLATE=template0 ENCODING='UTF8'LOCALE='en_US.UTF-8'创建数据库yourdb;
    
    通过使用
    sed
    我们用pg_转储流中的
    LC_COLLATE
    替换
    LOCALE
    单词,以便psql能够在本地恢复db。

    即使缺少
    LC\u CTYPE='en\u US.UTF-8'
    ,这仍然有效。

    这是由于我使用
    pg\u restore
    的13.x连接到11.x(目标)和10.x(源)的dbs造成的

    所以我刚刚安装了
    pgu restore
    10.x

    brew install postgresql@10
    /usr/local/opt/postgresql@10/bin/pg_restore --all-the-args-here
    

    下次我将更加小心地使用
    --create
    --clean
    参数来
    pg\u restore

    似乎您正试图从PostgreSQL 13复制DB。PostgreSQL 12在
    create database
    语句中没有
    locale
    选项:但13有:从
    pg\dum中删除
    -C
    选项p
    并手动创建数据库。谢谢@Abelisto!节省了时间!!!删除
    -C
    并手动创建数据库工作得非常好,与我输入密码的方式没有任何关系。太棒了,@Codrut!