0
我有與NEXTVAL給所有序列連接在一起的查詢: 等待序列獲得LAST_VALUE
SELECT c.oid::regclass, setval(c.oid, nextval(c.oid), false)
FROM pg_class c
WHERE c.relkind = 'S'
但它拋出對生產數據庫的錯誤:
ERROR: cannot access temporary tables of other sessions
我以前也創造了LAST_VALUE功能(可避免設置序列值),在這個崗位Get max id of all sequences in PostgreSQL
沒有幫助等。
有沒有辦法等待所有序列完成而不鎖定所有表?
這就是我的功能
CREATE TYPE tp_sequencedetails AS (sequence_name text, last_value bigint);
CREATE OR REPLACE FUNCTION getsequenceswithdetails()
RETURNS SETOF tp_sequencedetails AS
$BODY$
DECLARE
returnrec tp_sequencedetails;
sequence_name text;
BEGIN
FOR sequence_name IN (SELECT c.oid::regclass FROM pg_class c WHERE c.relkind = 'S')
LOOP
FOR returnrec IN EXECUTE 'SELECT ''' || sequence_name || ''', last_value FROM ' || sequence_name
LOOP
RETURN NEXT returnrec;
END LOOP;
END LOOP;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
你想通過這樣做完成什麼?你試圖解決的根本問題是什麼?你不應該這樣做。 – 2014-12-02 08:46:23
你是什麼意思?「有沒有辦法等待所有序列完成而不鎖定所有表?」 ?一個序列根本不會鎖定,你總能得到這個序列的當前值。 – 2014-12-02 08:53:15
@FrankHeikens它似乎鎖定序列,而使用這個序列的事務還沒有完成。我還沒有放棄它。 – iRaS 2014-12-02 09:00:06