我想使用
pg_dump -j 8 -Fd -f /tmp/newout.dir fsdcm_external
不转储 LC_COLLATE ('English_United States.1252'),因为它与我的 Linux 机器不兼容。
我最初通过以下过程成功迁移了 LC_COLLATE = 'English_United States.1252' 的数据库:
@Windows 机器:
pg_dump postgres > "/drive/folder/options.bak"
@Linux机器:
psql postgres < "/drive/folder/backup.bak"
但是,我更喜欢使用“jobs”进行并行转储和恢复(如 A faster way to copy a postgresql database (or the best way) ),因此我尝试:
@Windows 机器:
pg_dump -j 8 -Fd -f /tmp/newout.dir fsdcm_external
@Linux机器:
pg_restore -j 8 --format=d -C -d postgres /tmp/newout.dir/
我期望有相同的 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...
如何在 pg_dump 或 pg_restore 中指定避免复制 LC_COLLATE 设置?例如,我可以只转储表、数据和索引吗?
最佳答案
您的问题是 pg_restore
的 -C
选项。
相反,首先创建数据库,然后运行不带 -C
的 pg_restore
:
createdb fsdcm_external
pg_restore -j 8 --format=d -d fsdcm_external /tmp/newout.dir/
关于postgresql - pg_dump/pg_restore lc_collate English_United States.1252 Windows Linux 迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57492405/