【发布时间】:2019-12-19 10:25:38
【问题描述】:
我想先在我的表上应用删除查询,然后在同一张表上应用插入查询。
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.
如何合并两个查询,以便在插入之前完成删除查询? 更新查询也是一种选择,但因为我是新手,所以无法轻松处理更新查询,这就是为什么要先尝试这种方法。
【问题讨论】:
标签: sql postgresql stored-procedures sql-insert sql-delete