具有第二个数据库的PostgreSQL FOREIGN KEY

bja*_*xaf 5 sql postgresql

我在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;
Run Code Online (Sandbox Code Playgroud)

第三个查询返回:

错误:关系“ fias_addrobj”不存在

  • app_item -第一个数据库中的表
  • fias_addrobj -第二个数据库中的表

如何使用此数据库进行正确查询?

Dre*_*rew 5

必须引用本地表

但是,正如下面的链接中所述,您可以使用一个触发器,该触发器使用跨服务器连接(由 促进dblink)来模拟用于约束的内置方法?

例如,您可以设置一个触发器 on INSERT,检查给定的 FK 是否存在以帮助实施引用完整性,或者 onDELETE来级联

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=101322

PS 会不惜一切代价避免这种情况。


kha*_*son 2

我自己没有机会使用它,但您可能想研究一下foreign data Wrappers,它本质上是dblink. 特别是postgres-fdw

一旦fdw的常规设置就位(上面链接中的步骤 1-3),您可以通过创建一个外部表CREATE FOREIGN TABLE,其定义类似于远程数据库中的表,然后使用该表作为外键 CONSTRAINT的一部分,看看它是否有效。

如果这不起作用,另一种选择是建立一个流程,将数据(例如,通过Python脚本)从远程服务器传输到本地服务器(例如,每小时或每天,具体取决于数据大小) ),然后您将有一个真正的本地表可在外键 CONSTRAINT中使用。它不是实时的,但根据您的需要,可能就足够了。

  • 外部表不支持外键:/sf/ask/2616651691/ (2认同)