我在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
- 第二个数据库中的表如何使用此数据库进行正确的查询?
答案 0 :(得分:1)
必须引用本地表
但是,如下面的链接所述,您可以使用一个使用跨服务器连接的触发器(由dblink
促进)来模拟内置的约束方法?
例如,您可以在INSERT
上设置触发器,检查给定的FK是否存在以帮助强制执行参照完整性,或者DELETE
是否级联
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=101322
P.S。会不惜一切代价避免这种情况。
答案 1 :(得分:1)
我自己没有机会使用它,但您可能希望查看 Foreign Data Wrappers ,它们基本上是dblink
的继承者。特别是postgres-fdw。
一旦 fdw 的常规设置到位(上面的链接中的步骤1-3),您就可以通过CREATE FOREIGN TABLE
创建外国表 ,定义类似于远程数据库中的表,然后将该表用作外键 CONSTRAINT
的一部分,并查看它是否有效。
如果这不起作用,另一种选择是让ETL将数据(例如,通过 Python 脚本)从远程服务器转移到本地服务器(例如,每小时或每天,取决于大小),然后您将在外键 CONSTRAINT
中使用真正的本地表。它不是实时的,但根据您的需要,可能就足够了。