我正在尝试使用Foreign Data Wrappers从另外两个Postgres数据库中插入数据到一个Postgres数据库的表中。目标是拥有一个自动生成的主键,与来源无关,因为将会有超过两个来源。
我首先定义了这些表:
目标数据库:
create table dummy (
dummy_pk bigserial primary key
-- other fields
);
数据源数据库:
最初的回答。create foreign table dummy (
dummy_pk bigserial
-- other fields
) server ... ;
这个解决方案在我只从一个来源插入数据时运行良好,但当我尝试从另一个来源插入数据时,没有指定dummy_pk,就会出现以下错误信息:
由于Postgres尝试插入id为1的数据,我认为每个来源外键表使用的序列可能是不同的。我稍微改变了源表,试图让目标表的序列来处理id。重复键(dummy_pk)=(1)
create foreign table dummy (
dummy_pk bigint
-- other fields
) server ... ;
这次我遇到了一个不同的错误:
因此,我认为源服务器向目标发送了一个查询,在该查询中dummy_pk为空,而目标没有将其替换为默认值。空值违反了“dummy_pk”列上的非空约束条件
那么,有没有一种方法可以强制在源上执行的查询使用目标的序列?也许我必须共享该序列,我可以创建一个外部序列吗?由于我需要读取这些外部表,所以无法删除外部表上的列。
谢谢!
OPTIONS (schema_name 'some_schema', table_name 'some_name')
- undefined