如何使用PostgreSQL INSERT ON CONFLICT语句

7kqas0il  于 2022-11-23  发布在  PostgreSQL
关注(0)|答案(1)|浏览(261)

我尝试添加或更新postgresql,在参考了一些文章后,我得到了以下语句
我看了这个。
我有三张table。
使用者

id auto increase PK
Name

物品

id auto increase PK
author_id FK Reference users

注解

id auto increase PK
author_id FK Reference users
article_id FK Reference articles

第一个

INSERT INTO notes (author_id, article_id)
VALUES(1,1) 
ON CONFLICT ON CONSTRAINT author_id 
DO NOTHING;

获取错误:表“notes”的约束条件“author_id”不存在
第二个

INSERT INTO notes (author_id, article_id)
VALUES(1,1) 
ON CONFLICT ON CONSTRAINT author_id REFERENCES 'users'
DO NOTHING;

获取错误:“REFERENCES”或其附近存在语法错误
第三次

INSERT INTO notes (author_id, article_id)
VALUES(1,1) 
ON CONFLICT (author_id)
DO NOTHING;

获取错误:没有与ON CONFLICT规范匹配的唯一约束或排除约束
猜测问题是因为外键。
sql语句可以添加“返回id”吗?我需要得到注解id。

eblbsuwk

eblbsuwk1#

感谢阿德里安Klaver的建议,重建后的研究表。

CREATE TABLE notes (
    id bigserial PRIMARY KEY,
    reader_id integer references users(id),
    article_id integer references articles(id),
    UNIQUE(reader_id, article_id)
)

完成原始要求,添加退货最后插入Id

INSERT INTO notes (article_id, reader_id)
    VALUES (1, 1)
    ON CONFLICT (article_id, reader_id) 
    DO Nothing
    RETURNING notes.id;

相关问题