0
i를 NEXTVAL와 함께 모든 시퀀스를 제공하는 쿼리가 : 나는 '기다립니다 얻을 수 LAST_VALUE
ERROR: cannot access temporary tables of other sessions
:
SELECT c.oid::regclass, setval(c.oid, nextval(c.oid), false)
FROM pg_class c
WHERE c.relkind = 'S'
는하지만 프로덕션 데이터베이스에 오류가 발생합니다 또한이 게시물에서와 같이 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;
이렇게하면 무엇을하려합니까? 해결하려는 근본적인 문제는 무엇입니까? 당신은 이것을 할 필요가 없습니다. –
"모든 테이블을 잠그지 않고 모든 시퀀스가 완료 될 때까지 기다릴 수있는 방법이 있습니까?" ? 시퀀스가 전혀 잠그지 않으면 항상이 시퀀스의 현재 값을 가져올 수 있습니다. –
@FrankHeikens이 시퀀스를 사용하는 트랜잭션이 아직 완료되지 않은 동안 시퀀스를 잠그는 것 같습니다. 나는 아직 그것을 debuged하지 않았습니다. – iRaS