跨数据库插入PostgreSQL中



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

//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是自动提示的表人的主要键。

执行插入交叉数据库时,PG会不会自动插入ID?是否有"推荐"解决这个问题?

谢谢。

- 编辑 - 澄清:我有2个数据库,模型和登录,每个数据库都有DBO的模式。登录具有称为登录名的模式,该模式适用于外国数据包装器。目的是从我的数据库中:模型,使用我们导入的表(例如插入登录。Hospitals...等)的表登录表登录数据库表

出于所有目的和目的,此医院表都这样创建了:

CREATE TABLE People(ID SERIAL NOT NULL, name TEXT, phonenumber TEXT);

我希望这能阐明任何问题。

搜索时我发现了这些解决方案:

https://www.postgresql.org/message-id/26654.1380145647@sss.pgh.pgh.pa.ushttp://www.slideshare.net/jkatz05/developing-and-deploying-apps-with-the-postgres-fdw

这些本质上涉及创建外国桌子并维护两个表,这是我想避免的。

因此,我的解决方案是在每个表中从调用DB(例如模型)调用的每个表的源db(例如登录)上创建一个触发器。该触发器将在插入之前发射并调用触发功能。触发功能看起来像这样:

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;

谢谢!

相关内容

  • 没有找到相关文章