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

Postgres:与内隐冲突目标的冲突

房育
2023-03-14

Postgres 10和11的插入说明:

关于冲突[冲突目标]冲突行动

我有一张桌子:

create table c (
    e text not null,
    m text not null,
    v numeric not null,
    PRIMARY KEY (e, m)
)

而我想做的

insert into candle values (...) 
    on conflict do update set
            v = 5

但是我得到一个错误:

ON CONFLICT DO UPDATE需要推理规范或约束名称提示:例如,ON CONFLICT(column_name)

为什么我必须提供一个确定的目标?如何提供主键或其他列集?

共有2个答案

越信鸥
2023-03-14

可以有多个约束,因此可以有多个可选操作。

您可以简单地指定列名:

insert into candle values (...) 
on conflict (e,m) do update set
  v = 5
凌清夷
2023-03-14

是的,conflict_target是可选的,但只适用于不做任何事

每个留档:

对于冲突上的不执行任何操作,可以选择指定冲突_目标;省略时,将处理与所有可用约束(和唯一索引)的冲突。对于冲突DO UPDATE上的,必须提供冲突_目标

 类似资料:
  • 我试图将Postgres用作文档存储,但在Postgres解析器似乎不喜欢JSONB操作符的情况下,当我试图有效地向上插入文档时,遇到了一个问题。 我有一张桌子: 我尝试用以下方式插入数据: 我收到这条错误消息: 我试过数据- 我想将标识符列(示例中的a)留在JSON中,而不是使其成为表上的列。 我正在尝试做的事情目前是否得到支持?

  • 问题内容: 在Postgres 9.5中进行UPSERT时,是否可以在INSERT成功时返回null并在CONFLICT上返回某些内容? 我想要这样的事情: 选择user_id的唯一目的是在冲突时返回某些内容(除了null以外的任何内容),而无需写入磁盘。我知道可以使用ON CONFLICT DO UPDATE来完成,但这将涉及写入磁盘。 问题答案: 您可以使用CTE: DBFiddle演示

  • 我有一张像下面这样的桌子。我试图根据CTE中的值合并到此表中。但当我试图在出现冲突时更新表时,它无法获得CTE中的值 现在使用cte,我想在这个表中插入/更新记录。下面是我用来做同样的事情的代码。当记录已经存在于表中时,我想根据cte(cte_input_data.data_type_id)中的data_type_id值更新表,但它失败并出错。 它应该实现的是 > 如果cte_输入_数据。数据类型

  • 我使用pybind11让python调用现有的C模块(库)。但是,在C库中,调用::GetModuleFileName(Visual Studio)来确定加载的模块在C中运行时的物理路径。但是当我通过pybind11从python(Jupyter Notebook)调用库时,python.exe的物理路径会返回。如何配置或更改以确保获得C库的物理路径? C代码是这样的:Lib. h 我ib.cpp

  • 我使用的是Horizontal ViewPager2,它里面有4个片段。每个片段都有一个回收器视图上的SwipeReFresLayout。我面临的问题是,当回收器视图位于顶部时,然后onClick on任何项目列表都不起作用。如果我向下滚动一点回收器视图,那么onClick就可以正常工作。当回收器视图位于顶部时,如果SwipeReFresLayout处于刷新状态,那么onClick就可以正常工作。

  • 有了这个Jaxb Xml定义,我尝试通过添加来移除映射元素包装器,但在解压缩过程中会导致异常 EventAdapter是 我的输出是 我尝试通过添加来删除标记 产量不错 但撤退失败了 调试Jaxb使我熟悉了这一行