我正在try 编写一个bash脚本,该脚本从远程数据库转储数据并将其恢复到本地停靠容器中. 问题是,大约有90个表有很多外键,但数据转储似乎并不关心插入的顺序.我能做些什么才能让它真正插入所有行?

我现在就是这么把东西扔出go 的

#Dumps roles
pg_dumpall --roles-only -U $user -h $db_url -p $port --clean --file=roles.dump
#Dumps schema
pg_dump --clean -s --host $db_url --port $port --user $user $db_to_dump > backup-schema.dump
#Dumps data
pg_dump --column-inserts --host $db_url --port $port --user $user $db_to_dump -n $schema_to_dump > data.dump

推荐答案

你不是这样做的.如果坚持拆分数据和对象定义,请这样做:

pg_dump --section=pre-data --clean -f pre.sql mydb
pg_dump --section=data --clean -f data.sql mydb
pg_dump --section=post-data --clean -f post.sql mydb

然后按该顺序恢复它们.pre.sql将包含对象定义,data.sql将包含数据,post.sql将包含所有索引和约束定义.这样,您可以在恢复约束之前恢复数据,并且表的顺序不会有任何问题.此外,如果尚未定义索引和约束,则恢复数据的速度要快得多.

Postgresql相关问答推荐

更新带有视图的表并在关系员工的规则中检测到无限的回归"

使用函数返回值作为另一个函数的参数

处理Ruust-DIESEL中的Jsonb PostgreSQL列

有没有办法共享数据或监控复杂 PostgresQL 事务的进度?

有没有办法使用postgresql将具有不同ID的同一行多次添加到表中?

PostgreSQL错误致命:角色 username不存在

PostgreSQL - 我应该如何使用 first_value()?

PostgreSQL:在timestamp::DATE 上创建索引

消除 PostgreSQL SELECT 语句中的重复行

更新列或列或列时触发触发

无法向 postgresql 数据库授予用户权限(对于 rails 应用程序)

获取带有时区偏移的日期

带有双引号的 postgresql COPY 和 CSV 数据

datagrip 无法应用更改 此表是只读的

错误:CASE types character varying and numeric cannot be matched

Redis 可以写出到像 PostgreSQL 这样的数据库吗?

PostgreSQL:将结果数据从 SQL 查询导出到 Excel/CSV

将 Windows 上的 .sql 文件导入到 postgresql

在 pg_restore 期间排除表

错误:索引表达式中的函数必须在 Postgres 中标记为 IMMUTABLE