当前位置: 首页 > 知识库问答 >
问题:

在冲突中执行更新/不执行任何操作不在外部表上工作

容柏
2023-03-14

在PostgreSQL 9.5中出现了冲突更新/无操作功能。创建服务器和外部表将在PostgreSQL 9.2版本中出现。

当我对外部表使用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为foreign table,app为normal table

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:错误:不存在与冲突规范匹配的唯一或排除约束

有人能解释为什么会这样吗?

共有1个答案

任昊阳
2023-03-14

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

要实现您想要做的事情,您必须坚持“传统”的方式(例如,此代码示例)。

 类似资料:
  • 我正在尝试通过NIFI从oracle数据库中提取数据。在画布中,我将文件大小为0 KB的“GenerateFlowFile”处理器安排为每5分钟运行一次。这只是为了在成功时触发“executesql”处理器。对于“executeSQL”,我将DB连接池服务设置为DBCPConnectionPool。我输入SQL查询“select*FROM sometable”。我的DBCPConnectionPo

  • 假设我有下表: 我需要一个查询,将插入不存在的标签,并返回所有请求的标签ID。考虑以下事项: 此查询的输出是: 我需要的是在输出中有。

  • 我在网上看到了很多答案,说要打击 必须使用命令,但是对该命令进行了十几次不同的尝试,结果都是类似的错误消息。 我使用Ubuntu 15.04的安装了PostgreSQL,但是PostgreSQL绝对不允许做任何事情。 我需要安装一些依赖关系或其他什么吗?

  • 问题内容: 我正在运行一个Electron项目,一切都很好。但是现在,当我运行package.json中的任何脚本(包括npm start)时,它只是转义了一行而没有执行任何操作。 我的package.json: 我尝试更新NPM,但没有用。当我在其他项目中尝试过时,也不起作用。 提前致谢 问题答案: npm具有配置密钥。它的期望值是布尔值,默认设置为。 可能是由于疏忽而将其设置为。 要/ 的配置

  • 问题内容: 我有一个带有两列唯一键的表: 我想在该表中插入一行,但是如果键存在,则什么也不做!我不希望因为键存在而产生错误。 我知道有以下语法: 但是是否有类似的东西: ? 问题答案: 是的,使用(即使已分配给自身,它也不会触发行更新)。 如果您不关心错误(转换错误,外键错误)和自动递增字段用尽(即使由于重复键而未插入行,它也会增加),请使用。

  • 问题内容: 我希望HTML表单在提交后不执行任何操作。 这是不好的,因为它会导致页面重新加载。 基本上,我希望每当按下按钮或有人在键入数据后单击“输入”时都调用ajax函数。是的,我可以删除表单标签并添加,只需从按钮的onclick事件中调用该函数即可,但是我也希望“命中进入”功能而不会引起任何麻烦。 问题答案: 通过在通过“提交”按钮调用的javascript中使用,可以停止提交表单。 基本上,