【问题标题】:Insert followed by delete query插入后跟删除查询
【发布时间】: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


    【解决方案1】:

    为什么不简单地使用; 连接两个查询??

    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
    

    您可能希望根据您的客户端配置添加事务

    【讨论】:

    • 我已经试过了。这没有用。执行时出现错误。
    • 您也尝试过交易吗?开始; {查询};提交;
    猜你喜欢
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    相关资源
    最近更新 更多