【发布时间】:2019-06-06 08:38:55
【问题描述】:
我正在尝试使用外部数据包装器从其他两个 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 为空的目标发送查询,而目标不会将其替换为默认值。
那么,有没有一种方法可以强制在源上执行的查询中使用目标的序列?也许我必须分享那个序列,我可以创建一个外来序列吗?我无法删除外部表上的列,因为我需要读取权限。
谢谢!
【问题讨论】:
标签: sql postgresql primary-key postgres-fdw