在 PostgreSQL 中跨数据库插入

INSERT across Databases in PostgreSQL

我正在尝试执行从一个数据库到另一个数据库的 INSERT,例如:

//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 是 table 自动递增人员的主键。

PG在跨库插入时不自增id是什么原因?有 'recommended' 解决方法吗?

谢谢。

--编辑-- 澄清一下: 我有 2 个数据库、模型和登录,每个数据库都有一个 dbo 模式。登录有一个名为登录的模式,用于外部数据包装器。 目标来自我的数据库:模型,使用我们导入的 tables 的模式登录调用登录数据库 table(例如 INSERT INTO login.hospitals... 等)

出于所有意图和目的,这家医院 table 是这样创建的:

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

这些本质上涉及创建一个外部 table 并维护两个 table,这是我想避免的。

因此,我的解决方案是为从调用数据库(例如模型)调用的每个 table 在源数据库(例如登录)上创建一个触发器。此触发器将在 INSERT 之前触发并调用触发器函数。触发函数如下所示:

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;

谢谢!