我正在使用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不关心某个其他数据库是否已引用其表并只编辑/删除其条目。
答案 0 :(得分:2)
正确,您不能在外表中使用外键约束。
原因是PostgreSQL无法强制执行约束的正确性,因此它将毫无用处。