PostgreSQL 9.5的upsert的正确语法,下面的查询显示column reference "gallery_id" is ambiguous
错误,为什么?
var dbQuery = `INSERT INTO category_gallery (
category_id, gallery_id, create_date, create_by_user_id
) VALUES ($1, $2, $3, $4)
ON CONFLICT (category_id)
DO UPDATE SET
category_id = $1,
last_modified_date = $3,
last_modified_by_user_id = $4
WHERE gallery_id = $2`;
我尝试更改WHERE gallery_id = $2;
为 WHERE category_gallery.gallery_id = $2;
然后显示错误there is no unique or exclusion constraint matching the ON CONFLICT specification
,但是 我不想将gallery_id或category_id设置为唯一, 因为我想确保两列都相同然后进行更新....
如何正确地在postgres 9.5中进行upsert?
如果ON CONFLICT
需要唯一列,我应该使用其他方法,怎么办?
我想确保多列都冲突然后进行更新,正确的用法是什么
var dbQuery = `INSERT INTO category_gallery (
category_id, gallery_id, create_date, create_by_user_id
) VALUES ($1, $2, $3, $4)
ON CONFLICT (category_id, gallery_id)
DO UPDATE SET
category_id = $1,
last_modified_date = $3,
last_modified_by_user_id = $4
WHERE gallery_id = $2`;
var dbQuery = `INSERT INTO category_gallery (
category_id, gallery_id, create_date, create_by_user_id
) VALUES ($1, $2, $3, $4)
ON CONFLICT (category_id AND gallery_id)
DO UPDATE SET
category_id = $1,
last_modified_date = $3,
last_modified_by_user_id = $4
WHERE gallery_id = $2`;
表(category_id,gallery_id不是唯一列)
category_id | gallery_id | create_date | create_by_user_id | last_modified_date | last_modified_by_user_id
1 | 1 | ...
1 | 2 | ...
2 | 2 | ...
1 | 3 | ...
该ON CONFLICT
构造需要UNIQUE
约束才能起作用。从INSERT .. ON CONFLICT
子句的文档中:
可选
ON CONFLICT
子句指定了引发 唯一违反 或 排除约束
违反错误的替代操作。对于建议插入的每个单独行,要么继续插入,要么如果违反了由conflict_target指定的仲裁者约束或索引,则采用替代性的action_action。ON CONFLICT DO NOTHING
只是避免插入一行作为其替代操作。ON CONFLICT DO UPDATE
更新与建议插入的行冲突的现有行作为其替代操作。
现在,问题还不是很清楚,但是您可能需要UNIQUE
对合并的2列进行约束(category_id, gallery_id)
。
ALTER TABLE category_gallery
ADD CONSTRAINT category_gallery_uq
UNIQUE (category_id, gallery_id) ;
如果该行被插入的比赛 都 已经在桌子上有一个行的值,然后代替INSERT
,这样做的UPDATE
:
INSERT INTO category_gallery (
category_id, gallery_id, create_date, create_by_user_id
) VALUES ($1, $2, $3, $4)
ON CONFLICT (category_id, gallery_id)
DO UPDATE SET
last_modified_date = EXCLUDED.create_date,
last_modified_by_user_id = EXCLUDED.create_by_user_id ;
您可以使用UNIQUE约束的任一列:
ON CONFLICT (category_id, gallery_id)
或约束名称:
ON CONFLICT ON CONSTRAINT category_gallery_uq
使用postgresql 9.5,查询显示错误,为什么? 我试着改变
问题内容: 我对使用Spring将对象注入到类中有疑问。我在项目中使用了以下代码: 然后通常在以下方法上使用它: 否则,我在Spring示例中发现了注入构造函数的情况: 所以两者都正确吗?还是每个都有其属性和用法? 问题答案: tl; dr-构造函数注入是执行DI的最佳方法 后者是正确的,并不是因为Spring或任何依赖注入容器,而是面向对象的类设计原则。 细节 应该设计一种类型,以便您只能根据其
问题内容: 我试图: 根据搜索条件查找文档, 如果找到,请更新一些属性 如果没有插入带有某些属性的文档。 我正在使用,因为我也在执行单个插入操作。我想在一次操作中完成所有操作。 但是,它什么都不会导致为更新/向上插入操作插入任何内容。 这是插入文档: 这是最新资料: 这就是我试图更新/更新的方式: 为什么不更新/更新呢? 注意 那是使用水线ORM的JS代码,它也使用mongodb本机驱动程序。 问
我在docker容器中开发了一个烧瓶应用程序。我的代码的一个最小示例具有以下结构: 我把这个例子做得更简单(见第二次编辑) flask-app/dockerfile flask-app/src/__init__.py flask-app/dockerfile flask-app/dockerfile docker-compose.yml
我正在尝试使用测试驱动设计方法编写一个应用程序--我对单元测试很陌生,所以我只是想知道测试正确输入和异常的正确方法是什么。 我有一个用于加载配置文件的类: null 另外,这3个测试是否都有try{}catch(){}语句?在第一个测试中,正确性是隐含的,在第二个和第三个测试中,我无论如何都在检查异常,所以异常对测试没有影响。
问题内容: 我使用Java中的以下代码使用HMAC-SHA1哈希一些值: 属于 在PHP中,有一个类似的函数可用来比较Java实现返回的值。 因此,首先尝试是: 返回: 我的Java函数也会返回。 好的,看来可行。然后,我尝试使用一个更复杂的键: 返回: 这次,我的Java展示返回了: 我的PHP代码返回的哈希值不等于我的Java函数返回的值,而且我找不到原因。 有小费吗? 问题答案: 在您的PH