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

Postgres UPSERT语法混淆

谢鸿飞
2023-03-14

我有一个包含两列的表:channels TEXT rowid INTEGER主键

我在通道上包含了一个索引创建唯一的索引通道\u在mytable上的索引(较低的通道))

因此VisitToronto将与VisitToronto发生冲突

错误:重复键值违反了唯一约束channels_index详细信息:键(较低(单词))=(你好世界)已经存在。

我想不出阻止这种冲突的语法。冲突通道上的冲突不起作用约束通道上的冲突\u索引不起作用

我得到的最接近的结果是:错误:没有唯一或排除约束匹配ON CONFLICT规范

任何指示都将不胜感激。

蒂亚

共有1个答案

万俟宜修
2023-03-14

使用索引表达式,即下(通道)

insert into my_table (channels) values
('VisitToronto');

insert into my_table (channels) 
values ('visittoronto')
on conflict (lower(channels)) do 
update set channels = excluded.channels;

select *
from my_table;

 id |   channels   
----+--------------
  1 | visittoronto
(1 row)

由于索引位于表达式上,因此无法使用约束。在Postgres无法创建约束的情况下:

alter table my_table add constraint channels_unique unique using index channels_index;

ERROR:  index "channels_index" contains expressions
LINE 1: alter table my_table add constraint channels_unique unique u...
                                 ^
DETAIL:  Cannot create a primary key or unique constraint using such an index.
 类似资料:
  • 在我的应用程序(这是一个Android游戏)中,我有一个方法可以检查玩家是否还活着,如果没有,运行一个动画,游戏就结束了。 根据玩家的输球方式,目前有3种不同的动画可用。 例如,它们可能从屏幕上掉下来,撞到一只鸟,或者被从天上掉下来的东西压扁。每一个都有不同的动画。 基本上,我正在做的是: 当玩家输球时,我设置了它发生的方法,例如,如果他们被鸟击中: 然后我通过在我的check Gameover(

  • 我正在开发的应用程序应该支持3种语言:俄语,英语,乌兹别克语。为此,我在“res”文件夹中创建了3个文件夹,每个文件夹都有字符串。xml文件 值 值-en 值-uz 我希望俄语作为默认语言,英语和乌兹别克语作为可选语言。 但Android Studio正在显示俄罗斯联邦国旗上的字符串值。非常奇怪的xml。 当我运行应用程序时,大部分时间它都正常工作。但是当系统语言是英语时,它开始表现得很奇怪——从

  • 问题内容: 我知道我们不能像其他几种语言中那样在Java的if语句中使用赋值运算符。 那是 将给出编译错误。 但是以下代码可以正常工作,如何? 编辑:这是不能在if语句中使用赋值的例外规则。 问题答案: 因为赋值的“结果”是赋值的值,所以在第二种情况下它仍然是表达式。表达式要求条件是表达式,第二个但不是第一个满足。实际上,您的两个片段是: 和 通过该扩展是否可以编译第二个版本而不是第一个版本? 这

  • 我尝试在android studio中使用Proguard,但Proguard似乎没有混淆类名,例如,我的应用程序结构和配置: 和配置 但当我尝试在应用程序中触发异常时: ADB控制台中列出了异常: 只有方法被混淆了,MainActivity.class没有

  • 由于我是一个新的弹性搜索,我有困惑在弹性搜索方面。 启动elasticsearch时,它显示为5个分片。但是插入数据后,分片不断增加。我不知道分片的默认设置是什么。 提前道谢!

  • execute方法不仅能执行查询语句,还可以执行不返回结果集的SQL语句,甚至可以同时执行这些SQL语句的混合形式,如下面的代码所示: String insertData = "INSERT INTO jdbcdemo.t_books(name,isbn,author,price) values("+ " '人月神话', '6787102165345', '布鲁克斯', 52)"; sele