我正在尝试使用外部数据包装器从其他两个 Postgres 数据库插入 Postgres 数据库中的表。目标是拥有一个独立于源的自动生成主键,因为其中会有两个以上。
我首先像这样定义表:
目标数据库:
create table dummy (
dummy_pk bigserial primary key
-- other fields
);
来源数据库:
create foreign table dummy (
dummy_pk bigserial
-- other fields
) server ... ;
只要我仅从一个源插入,此解决方案就可以正常工作,当我尝试从另一个源插入时,没有指定 dummy_pk,我收到以下消息:
重复键 (dummy_pk)=(1)
因为 postgres 尝试插入 id 为 1,所以我相信每个源外部表使用的序列是不同的。我稍微更改了源表,试图让目标表的序列完成 id 的工作:
create foreign table dummy (
dummy_pk bigint
-- other fields
) server ... ;
这次我得到了一个不同的错误:
NULL 值违反了 «dummy_pk » 列上的 NOT NULL 约束
因此,我相信源服务器向 dummy_pk 为空的目标发送查询,并且目标不会将其替换为默认值。
那么,有没有一种方法可以强制在源上执行的查询中使用目标的序列?也许我必须分享那个序列,我可以创建一个外来序列吗?我无法删除外部表上的列,因为我需要对它们进行读取访问。
谢谢!