我想用
pg_dump -j 8 -Fd -f /tmp/newout.dir fsdcm_external
Run Code Online (Sandbox Code Playgroud)
不转储 LC_COLLATE ('English_United States.1252'),因为它与我的 Linux 机器不兼容。
我最初通过以下过程成功迁移了 LC_COLLATE = 'English_United States.1252' 的数据库:
@Windows机器:
pg_dump postgres > "/drive/folder/options.bak"
Run Code Online (Sandbox Code Playgroud)
@Linux机器:
psql postgres < "/drive/folder/backup.bak"
Run Code Online (Sandbox Code Playgroud)
但是,我更喜欢使用“作业”进行并行转储和恢复(如复制 postgresql 数据库的更快方法(或最佳方法)),因此我尝试:
@Windows机器:
pg_dump -j 8 -Fd -f /tmp/newout.dir fsdcm_external
Run Code Online (Sandbox Code Playgroud)
@Linux机器:
pg_restore -j 8 --format=d -C -d postgres /tmp/newout.dir/
Run Code Online (Sandbox Code Playgroud)
我期望有相同的 LC_COLLATE 中性转储,但我收到了此错误:
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 3498; 1262
12401 DATABASE postgres postgres
pg_restore: [archiver (db)] could not execute query: ERROR:
invalid locale name: "English_United States.1252"
Command was: CREATE DATABASE postgres WITH TEMPLATE = template0
ENCODING = 'UTF8' LC_COLLATE = 'English_United States.1252'
LC_CTYPE = 'E...
Run Code Online (Sandbox Code Playgroud)
如何在 pg_dump 或 pg_restore 中指定避免复制 LC_COLLATE 设置?例如,我可以只转储表、数据和索引吗?
你的问题是-C的选项pg_restore。
相反,首先创建数据库,然后在pg_restore没有以下命令的情况下运行-C:
createdb fsdcm_external
pg_restore -j 8 --format=d -d fsdcm_external /tmp/newout.dir/
Run Code Online (Sandbox Code Playgroud)