我想先在表上应用删除查询,然后在同一表上应用插入查询。
variable_page_category表具有2列(page_category_id,variable_id)。这是一个复合主键。
我的桌子可以像这样:
page_category_id | 1 2 3 4 5
variable_id | 1 1 1 2 2
result_variable_page_category_delete AS (
DELETE FROM common.variable_page_category
WHERE variable_id = (dynamic_variable_json->>'id')::BIGINT
RETURNING 1
),
result_variable_page_category AS (
INSERT INTO common.variable_page_category (page_category_id, variable_id)
SELECT
(page_category_id::TEXT)::BIGINT,
(dynamic_variable_json->>'id')::BIGINT
FROM jsonb_array_elements_text((dynamic_variable_json->>'page_category_id')::JSONB) AS page_category_id
RETURNING 1
)
但是没有按顺序执行,并且出现此错误。这两个查询都是正确的。
ERROR: duplicate key value violates unique constraint \"variable_page_category_pkey\"\n Detail: Key (page_category_id, variable_id)=(1, 1) already exists.
如何合并两个查询,以便在插入之前完成删除查询? 更新查询也是一种选择,但是因为我是新手,所以我无法轻松处理更新查询,这就是为什么首先尝试这种方法的原因。
答案 0 :(得分:0)
为什么不简单地使用;
连接两个查询?
DELETE FROM common.variable_page_category
WHERE variable_id = (dynamic_variable_json->>'id')::BIGINT
;
INSERT INTO common.variable_page_category (page_category_id, variable_id)
SELECT
(page_category_id::TEXT)::BIGINT,
(dynamic_variable_json->>'id')::BIGINT
FROM jsonb_array_elements_text((dynamic_variable_json->>'page_category_id')::JSONB) AS page_category_id
您可能要根据您的客户端配置添加交易