2

我正在使用 oracle_fdw 从 postgres 9.5.3 连接到 Oracle 数据库。

服务器和用户映射已在 postgres db 上创建:

   CREATE FOREIGN SERVER foo FOREIGN DATA WRAPPER oracle_fdw OPTIONS (connection info..);
   GRANT USAGE ON FOREIGN SERVER foo TO my_user;
   CREATE USER MAPPING FOR my_user SERVER foo OPTIONS (user, password..);

然后创建了外部表:

   CREATE FOREIGN TABLE FT_ORACLE(
   my_id integer,
   description character varying(40)) SERVER foo OPTIONS (schema, table);

我试图引用的表格:

   CREATE TABLE T_LOCALE(
   id bigint NOT NULL,
   oracle_id integer,
   description character varying(40),
   CONSTRAINT t_locale_pkey PRIMARY KEY(id));

尝试添加约束:

  ALTER TABLE T_LOCALE
  ADD CONSTRAINT fk_t_locale_oracle_id FOREIGN KEY (oracle_id)
  REFERENCES ft_oracle (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION;

结果是:

   ERROR:  referenced relation "ft_oracle" is not a table.

问题:您不能在外表上引用,对吗?因为 Oracle 不会关心其他数据库是否已引用到它的表中,而只是编辑/删除它的条目。

4

1 回答 1

3

正确,您不能对外部表进行外键约束。

原因是 PostgreSQL 没有办法强制约束的正确性,所以它是没有用的。

于 2017-07-24T15:34:09.847 回答