postgresql - pg_dump/pg_restore lc_collat​​e English_United States.1252 Windows Linux 迁移

标签 postgresql

我想使用

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 选项。

相反,首先创建数据库,然后运行不带 -Cpg_restore:

createdb fsdcm_external
pg_restore -j 8 --format=d -d fsdcm_external /tmp/newout.dir/

关于postgresql - pg_dump/pg_restore lc_collat​​e English_United States.1252 Windows Linux 迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57492405/

相关文章:

python - with block 是否在退出时正确关闭 psycopg2 连接和光标处理?

postgresql - Ubuntu 18.04 Postgresql Client not installed 错误解决方法

php postgres 从理论上讲从查询到获取行

database - 如何在 Windows 中将用户添加到 PostgreSQL?

sql - Postgres upsert 使用来自 select 的结果

通过 Brew 安装的 Postgresql 不会自动启动

postgresql - Sequelize 迁移 : relation <table> does not exist

sql - 使用具有相同参数的 select 或 update 时受影响的行数不同 - PostgreSQL

postgresql - 如何正确使用查询构建器来进行子选择?

python - 如何诊断 Flask 性能不佳?