postgres:在维护序列的同时转储数据库之间的部分表
postgres: dump partial tables between databases while maintaining sequences
我想将几个 table 的 select 位从一个数据库复制到另一个数据库,同时保持序列和模式。我首先使用 pg_dump -s
转储模式,但在复制数据时我有点不知所措。到目前为止,这是我尝试过的:
pg_dump -t <table1>
给我序列但包括整个 table
copy (SELECT bits from table1)
给了我部分 tables 但没有使序列保持最新。
如何在只转储部分 table 的同时使我的序列保持最新?
内置的内容不会为您转储 table 的 部分 ,因此请执行 -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
结尾的 table 名称,您可能需要以编程方式生成序列列表。在 bash
中,可能会这样:
pg_dump --data-only -t $(psql -tAc "SELECT string_agg(oid::regclass::text, ',') FROM pg_class WHERE relkind = 'S'")
我想将几个 table 的 select 位从一个数据库复制到另一个数据库,同时保持序列和模式。我首先使用 pg_dump -s
转储模式,但在复制数据时我有点不知所措。到目前为止,这是我尝试过的:
pg_dump -t <table1>
给我序列但包括整个 table
copy (SELECT bits from table1)
给了我部分 tables 但没有使序列保持最新。
如何在只转储部分 table 的同时使我的序列保持最新?
内置的内容不会为您转储 table 的 部分 ,因此请执行 -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
结尾的 table 名称,您可能需要以编程方式生成序列列表。在 bash
中,可能会这样:
pg_dump --data-only -t $(psql -tAc "SELECT string_agg(oid::regclass::text, ',') FROM pg_class WHERE relkind = 'S'")