我正在尝试从一个数据库插入到另一个数据库,例如:

//called in database 'model'
INSERT INTO login.Hospital (name, phonenumber) --EDIT, now Hospital
VALUES ('Foo Bar', '555-555-5555');

我得到这个错误:
"null value in column "id" violates not-null constraint"

其中列id是自动递增的表人员的主键。
在执行insert cross database时,PG不会自动增加id有什么原因吗?有什么“推荐”的方法吗?
谢谢您。
--编辑--
澄清:
我有两个数据库,分别用dbo模式建模和登录。Login有一个名为Login的架构,用于外部数据包装器。
目标来自我的数据库:model,使用我们导入的表的模式Login调用Login数据库表(例如INSERT INTO Login.hospitals。。。等)
出于所有目的,此医院表的创建方式如下:
CREATE TABLE People(ID SERIAL NOT NULL, name TEXT, phonenumber TEXT);

我希望这能澄清任何问题。

最佳答案

在搜索时,我发现了以下解决方案:
https://www.postgresql.org/message-id/26654.1380145647%40sss.pgh.pa.us
http://www.slideshare.net/jkatz05/developing-and-deploying-apps-with-the-postgres-fdw
这些基本上包括创建一个外部表和维护两个表,这是我想要避免的。
所以,我的解决方案是为从调用数据库(eg Model)调用的每个表在源数据库(eg Login)上创建一个触发器。此触发器将在插入和调用触发器函数之前触发。触发器函数如下所示:

CREATE OR REPLACE FUNCTION dbo.tf_insert_cross_schema()
RETURNS TRIGGER AS
$$
DECLARE
    sequenceName TEXT = 'dbo.' || TG_TABLE_NAME || '_id_seq';

BEGIN
    IF (NEW.id IS NULL) THEN
        NEW.id = (SELECT nextval(sequenceName));
    END IF;

    RETURN NEW;
END;
$$
LANGUAGE PLPGSQL VOLATILE;

谢谢!

10-05 20:31
查看更多