Postgresql插入如果不存在[英] Postgresql insert if not exists

本文是小编为大家收集整理的关于Postgresql插入如果不存在的处理方法,想解了Postgresql插入如果不存在的问题怎么解决?Postgresql插入如果不存在问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我对 SQL 很陌生,我得到的只是一个又一个的错误,所以任何帮助都将不胜感激.

我有一个标签表:id、name、slug

我在 Google 上搜索过,在 Stackoverflow 上搜索过,但对我没有任何帮助.如果标签不存在,我会尝试创建它,但无论它是创建还是存在,总是返回 ID.

INSERT INTO tags (name, slug)
SELECT ('Wow', 'wow')
WHERE NOT EXISTS (SELECT id FROM tags WHERE slug = 'wow')
RETURNING id;

这就是我所拥有的:http://sqlfiddle.com/#!15/4050a/18

推荐答案

不要将列放在括号中.

如果您查看收到的完整错误消息,那么 Postgres 实际上会告诉您出了什么问题.

<块引用>

错误:INSERT 的目标列多于表达式
提示:插入源是一个行表达式,包含与 INSERT 预期的相同数量的列.您是否不小心使用了多余的括号?

表达式 ('Wow', 'wow') 只是一个 单个 列,一个带有两个变量的匿名"记录"(参见 手册了解详情)

INSERT INTO tags (name, slug)
SELECT 'Wow', 'wow'
WHERE NOT EXISTS (SELECT id FROM tags WHERE slug = 'wow')
RETURNING id;

一般来说,仅当括号确实必需

时才添加括号是个好主意

本文地址:https://www.itbaoku.cn/post/1763786.html