插入,然后删除查询

时间:2019-12-19 10:25:38

标签: sql postgresql stored-procedures sql-insert sql-delete

我想先在表上应用删除查询,然后在同一表上应用插入查询。

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.

如何合并两个查询,以便在插入之前完成删除查询? 更新查询也是一种选择,但是因为我是新手,所以我无法轻松处理更新查询,这就是为什么首先尝试这种方法的原因。

1 个答案:

答案 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

您可能要根据您的客户端配置添加交易