[英]PostgreSQL FOREIGN KEY with second database
我在PostgreSQL 9.3上运行以下查询:
CREATE TABLE "app_item"
(
"id" SERIAL NOT NULL PRIMARY KEY,
"location_id" UUID NOT NULL
);
CREATE INDEX app_item_e274a5da
ON "app_item" ("location_id");
ALTER TABLE "app_item"
ADD CONSTRAINT app_item_location_id_5cecc1c0b46e12e2_fk_fias_addrobj_aoguid
FOREIGN KEY ("location_id") REFERENCES "fias_addrobj" ("aoguid") deferrable
initially deferred;
第三个查询返回:
错误:关系“fias_addrobj”不存在
app_item
- 第一个数据库中的表 fias_addrobj
- 第二个数据库中的表 如何使用此数据库进行正确查询?
我自己没有机会使用它,但你可能想要查看外部数据包装器 ,它本质上是dblink
的后继者。 特别是postgres-fdw 。
一旦外籍家政工人的常规安装到位(步骤在上面的链接1-3),你可以通过创建一个外部表 CREATE FOREIGN TABLE
,就像在远程数据库的表中定义,然后使用该表作为的一部分外键 CONSTRAINT
,看它是否有效。
如果这不起作用,另一种选择是将ETL的数据(例如,通过Python脚本)从远程服务器传输到本地服务器(例如,每小时或每天,取决于大小) ),然后你将有一个真正的本地表用于外键 CONSTRAINT
。 这不是实时的,但根据您的需要,可能就足够了。
必须引用本地表
但是,如下面的链接所述,您可以使用一个使用跨服务器连接的触发器(由dblink
促成)来模拟内置的约束方法?
例如,您可以在INSERT
上设置触发器,检查是否存在给定的FK以帮助强制执行参照完整性,或者在DELETE
进行级联
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=101322
PS会不惜一切代价避免这种情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.