我在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;

第三个查询返回:


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

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

    最佳答案

    我自己没有机会使用它,但是您可能想研究Foreign Data Wrappers,它实际上是dblink的后继者。特别是postgres-fdw

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

    如果这不起作用,则另一个选择是拥有一个过程,该过程将ETL的数据(例如,通过Python脚本)从远程服务器传递到本地服务器(例如,每小时或每天一次,具体取决于大小) ),那么您将有一个真正的本地表可用于外键CONSTRAINT中。它不是实时的,但可以满足您的需求。

    关于sql - 具有第二个数据库的PostgreSQL FOREIGN KEY,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26346222/

    10-11 02:00
    查看更多