gpt4 book ai didi

sql - PostgreSQL:递增否则插入

转载 作者:行者123 更新时间:2023-11-29 13:45:14 25 4
gpt4 key购买 nike

我有一些行经常以增量更新,但很少插入。是否可以切换新的 INSERT ... ON CONFLICT 语句的顺序以优化更新而不是插入?

现在我正在这样做:

INSERT INTO ?? (??) VALUES (?) ON CONFLICT(??) DO UPDATE SET ?? = ?? + 1 RETURNING ??

虽然这可行,但即使插入失败,它也会每次增加主键的序列。

是否有可能以第一个操作是更新的方式重写查询,并且只有在没有执行更新时才执行插入?

最佳答案

我不知道它的内置命令,但你可以为此编写一个存储过程:

CREATE OR REPLACE FUNCTION update_or_insert(in_parameter1 INTEGER, ...) RETURNING SETOF my_table AS $$
DECLARE
result my_table%ROWTYPE;
BEGIN
WITH updated_rows AS (
UPDATE my_table SET ... WHERE ... RETURNING *
)
SELECT * INTO result FROM updated_rows;
IF FOUND THEN
RETURN NEXT result;
ELSE
WITH inserted_rows AS (
INSERt INTO my_table (...) VALUES (...) RETURNING *
)
SELECT * INTO result FROM inserted_rows;
RETURN NEXT result;
END IF;
RETURN;
$$ LANGUAGE plpgsql;

您可以按如下方式调用此函数:

SELECT * FROM update_or_insert(123, ...);

关于sql - PostgreSQL:递增否则插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49473291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com