postgresql - Postgres : dump partial tables between databases while maintaining sequences

标签 postgresql pg-dump

我想将几个表的选定位从一个数据库复制到另一个数据库,同时保持序列和模式。我首先使用 pg_dump -s 转储架构但是在复制数据时我有点不知所措。到目前为止,这是我尝试过的:

pg_dump -t <table1>给我序列,但包括整个表

copy (SELECT bits from table1)给我部分表格,但没有使序列保持最新。

如何在只转储部分表的同时保持我的序列最新?

最佳答案

内置的任何东西都不会为您转储表的部分,所以做一个-s/--schema-only转储并编写自己的 COPY语句是要走的路。

pg_dump docs 中所述, -t/--table选项还将采用序列名称。您可以将其与 -a 结合使用/--data-only仅输出序列的 setval(...) 的标志命令:

pg_dump --data-only -t <sequence_name>

当然,如果您的序列与 SERIAL 相关联专栏,您通常不知道(或不关心)它们到底叫什么。在这种情况下,您可以(可能)依赖默认的 <table>_<column>_seq一次转储它们的命名约定:

pg_dump --data-only -t *_seq

如果您有非标准的序列名称,或者您很不幸有一个以 _seq 结尾的表名,您可能需要以编程方式生成序列列表。在 bash ,这样的事情可能会做到这一点:

pg_dump --data-only -t $(psql -tAc "SELECT string_agg(oid::regclass::text, ',') FROM pg_class WHERE relkind = 'S'")

关于postgresql - Postgres : dump partial tables between databases while maintaining sequences,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48794946/

相关文章:

postgresql - 使用 liquibase 在 postgres 中删除索引时出现问题

heroku pg :push could not write to output file: Invalid argument

django - 如何仅使用 Heroku 上的 postgres 转储来恢复数据库数据

sql - 有一种方法可以使用 WHERE date = MAX(date) 发出请求

postgresql - `instead of update` 触发器 : How to distinguish when user provides new value for the column and when does not?

mysql - 每个数据库提供程序类型允许的最大参数数是多少?

postgresql - 玩框架postgresql : Database 'default' needs evolution

postgresql - 使用 pg_dump 设置 sslmode=allow

postgresql - 转储数据库时跳过违反唯一约束

postgresql - pg_dump 忽略表序列?