postgres:在维护序列的同时转储数据库之间的部分表

时间:2018-02-14 19:37:55

标签: postgresql pg-dump

我希望将几个表的选择位从一个数据库复制到另一个数据库,同时保持序列和模式。我首先使用Update database转储模式,但是当涉及复制数据时,我有点不知所措。这是我到目前为止所尝试的内容:

pg_dump -s给了我序列,但包括整个表格

pg_dump -t <table1>为我提供了部分表,但没有让序列保持最新。

如何只丢弃部分表格,让我的序列保持最新?

1 个答案:

答案 0 :(得分:2)

没有任何内置函数会为您转储表的部分,因此执行-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'")
相关问题