关于冲突做更新/不做任何不在FOREIGN TABLE工作

时间:2016-11-22 12:09:05

标签: database postgresql postgresql-9.5

关于冲突的更新/没有任何功能将在PostgreSQL 9.5 中出现。 在PostgreSQL 9.2 版本中创建服务器 FOREIGN TABLE

当我对 FOREIGN表使用 ON CONFLICT DO UPDATE 时,它无效, 但是当我在普通表上运行相同的查询时,它正在工作。查询如下。

// 对于普通表格

INSERT INTO app
 (app_id,app_name,app_date)
 SELECT
p.app_id,
p.app_name,
p.app_date  FROM app p
WHERE p.app_id=2422
ON CONFLICT (app_id) DO 
UPDATE SET app_date = excluded.app_date ;

O / P:查询成功返回:一行受影响,执行时间为5毫秒。

//对于外国桌面概念

// foreign_app 是外表, app 是普通表

INSERT INTO foreign_app
 (app_id,app_name,app_date)
 SELECT
p.app_id,
p.app_name,
p.app_date  FROM app p
WHERE p.app_id=2422
ON CONFLICT (app_id) DO 
UPDATE SET app_date = excluded.app_date ;

O / P:错误:没有与ON CONFLICT规范相匹配的唯一或排除约束

任何人都可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

外表上没有约束,因为PostgreSQL无法在外部服务器上强制执行数据完整性 - 这是通过在外部服务器上定义的约束来完成的。

要实现您想要做的事情,您必须坚持采用“传统”方式(例如this code sample)。