이 게시물이 꽤 오래 되었다는 것을 알고 있지만 CMS 의 솔루션 이 시퀀스를 테이블 및 열에 자동으로 연결하는 방법을 찾고 공유하고 싶을 때 매우 유용하다는 것을 알았습니다. 의 사용 pg_depend의 카탈로그 테이블은 키이었다. 나는 무엇을했는지 확장했다 :
WITH fq_objects AS (SELECT c.oid,n.nspname || '.' ||c.relname AS fqname ,
c.relkind, c.relname AS relation
FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace ),
sequences AS (SELECT oid,fqname FROM fq_objects WHERE relkind = 'S'),
tables AS (SELECT oid, fqname FROM fq_objects WHERE relkind = 'r' )
SELECT
s.fqname AS sequence,
'->' as depends,
t.fqname AS table,
a.attname AS column
FROM
pg_depend d JOIN sequences s ON s.oid = d.objid
JOIN tables t ON t.oid = d.refobjid
JOIN pg_attribute a ON a.attrelid = d.refobjid and a.attnum = d.refobjsubid
WHERE
d.deptype = 'a' ;
이 버전은 반환 된 필드 목록에 열을 추가합니다. 테이블 이름과 열 이름을 모두 사용하면 pg_set_serial_sequence 를 호출 하면 데이터베이스의 모든 시퀀스가 올바르게 설정되었는지 쉽게 확인할 수 있습니다. 예를 들면 다음과 같습니다.
CREATE OR REPLACE FUNCTION public.reset_sequence(tablename text, columnname text)
RETURNS void
LANGUAGE plpgsql
AS $function$
DECLARE
_sql VARCHAR := '';
BEGIN
_sql := $$SELECT setval( pg_get_serial_sequence('$$ || tablename || $$', '$$ || columnname || $$'), (SELECT COALESCE(MAX($$ || columnname || $$),1) FROM $$ || tablename || $$), true)$$;
EXECUTE _sql;
END;
$function$;
이것이 시퀀스를 재설정하는 데 도움이되기를 바랍니다!