首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgres Insert if not exists,Update if exists on non unique列?

Postgres Insert if not exists,Update if exists on non unique列?
EN

Stack Overflow用户
提问于 2020-09-04 11:41:10
回答 2查看 326关注 0票数 1

如果唯一列上有重复的值,我目前正在使用ON CONFLICT SET进行更新。

代码语言:javascript
复制
INSERT INTO `table`(col1, col2) VALUES ('v1', 'v2') 
ON CONFLICT (col1)
DO UPDATE SET
col2 = 'v3'

在本例中,col1是一个唯一的字段。但是如果col1不是唯一的,我该怎么做呢?

我试着在没有唯一约束的情况下得到了:

代码语言:javascript
复制
Invalid column reference: 7 ERROR:  there is no unique or exclusion constraint matching the ON CONFLICT specification
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-07 15:31:59

最终使用了两个连续的查询。(1)首先尝试更新,如果没有更新行,(2)尝试插入。

在php中:

代码语言:javascript
复制
// Try update
$return = execute("UPDATE table SET ... WHERE ...col1='unique_value'...");

// If update returns no value, insert
if (!$return) {
    execute("
        INSERT INTO table (...)
            SELECT ...values...
            WHERE NOT EXISTS (SELECT 1 FROM table WHERE ...col1='unique_value'...)
    ");
}
票数 0
EN

Stack Overflow用户

发布于 2020-09-04 16:08:09

根据定义,您不能在非唯一列上存在冲突。但是,既然你没有重复,那就让它变得唯一。

代码语言:javascript
复制
Alter table "table" add constraint col1_uk unique(col1);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63734531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档