簡體   English   中英

postgresql試圖調用update返回多行

[英]postgresql trying to call update returning multiple rows

這個示例語句在postgresql 9.1及更高版本中運行正常。 不幸的是,它在舊版本中不起作用,原因是更新不支持with語句。 如何將RETURNING放入數組中? 我正在使用plpgsql編寫一個函數。

begin

create table testing(
i serial,
t text);

insert into testing
(t)
values (null),(null),(null);

with abc AS (
update testing
set t = null
returning i )
select array_agg(i)
from abc;

rollback

謝謝您的幫助!

遺憾的是,你不能在9.1之前的版本上做到這一點,因為可寫的公用表表達式(AKA wCTE)僅在9.1處可用(參見PostgreSQL特征矩陣中的 “可寫公用表表達式”)。

我能看到的唯一解決方案是這種情況是在您的應用程序上執行此操作或使用函數,如:

CREATE OR REPLACE FUNCTION test()
RETURNS int[]
VOLATILE
LANGUAGE plpgsql AS $$
DECLARE
    ret int[];
    aux int;
BEGIN
    ret := '{}';
    FOR aux IN
        UPDATE testing
        SET t = null
        RETURNING i
    LOOP
        ret := ret || aux;
    END LOOP;
    RETURN ret;
END;
$$;

在任何情況下,如果您使用的是舊版本,我建議您盡快升級到較新版本(現在為9.3)。 8.4版本即將失去支持,明年將丟失9.0(參見版本控制政策 )。

編輯:

要為使用PostgreSQL 9.1+的用戶留下參考,可以使用wCTE完成上述操作,如下所示:

WITH updt AS (
    UPDATE testing
    SET t = null
    RETURNING i
)
SELECT array_agg(i) FROM updt;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM