关于冲突的更新/没有任何功能将在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规范相匹配的唯一或排除约束
任何人都可以解释为什么会这样吗?
答案 0 :(得分:1)
外表上没有约束,因为PostgreSQL无法在外部服务器上强制执行数据完整性 - 这是通过在外部服务器上定义的约束来完成的。
要实现您想要做的事情,您必须坚持采用“传统”方式(例如this code sample)。