sql - Postgresql INSERT ON CONFLICT 语法
问题描述
欢迎使用以下测试表:
CREATE TEMP SEQUENCE pid start 10000;
SELECT nextval ('pid');
CREATE TEMP TABLE project_test (
id int DEFAULT nextval('pid') primary key,
project_id int UNIQUE NOT NULL
);
我正在尝试创建一个语句,要么为 project_id 插入一个新值,返回 id,要么在 project_id 存在的情况下返回 id。
我尝试了以下方法:
INSERT INTO project_test(project_id) VALUES(50) RETURNING id
ON CONFLICT (project_id) DO UPDATE project_test SET project_id = 50 WHERE project_id = 50 RETURNING id;
我在这里阅读了文档: https ://www.postgresql.org/docs/13/sql-insert.html 我在 Postgres 13
我收到语法错误
错误:“ON”处或附近的语法错误
提前感谢您的任何提示
解决方案
INSERT INTO project_test(project_id) VALUES(50)
ON CONFLICT (project_id) DO UPDATE SET project_id = 50 WHERE project_test.project_id = 50 RETURNING id;
问题是 RETURNING id 需要放在最后,然后它认为列引用“project_id”不明确,这很奇怪。谢谢大家
推荐阅读
- ios - 与 UINavigationController 斗争
- python - 从 Python 中的父对象复制构造函数
- android - 在线性布局中转换和放置文本的更好方法是什么
- dask - Dask 多个客户
- mongodb - 连接到 docker mongo db 镜像
- javascript - javaScript中if语句中的变量
- python - tf.keras.losses.SparseCategoricalCrossentropy() 与“sparse_categorical_crossentropy”作为损失的区别
- ansible - Ansible 库存:aws_ec2 模块——寻找工作“组:”函数的示例
- laravel - 获取仅包含作者姓名的所有帖子
- linux - Amazon EC2 免费层服务器是否适合我的小型 Web 应用程序?