2026년 7월 23일 목요일

PostgreSQL 모든테이블의 SerialType의 인덱스를 최신으로 맞추기

DB 마이그레이션 하거나 그럴때 ID값이 안따라갈수 있음..
아래의 내용으로 인덱스를 최신으로 바꿔줘야함..
안하면 duplicate key value violates unique constraint  에러를 만나게됨..





DO $$
DECLARE
    r RECORD;
BEGIN
    FOR r IN
        SELECT
            n.nspname AS schema_name,
            c.relname AS table_name,
            a.attname AS column_name,
            pg_get_serial_sequence(
                quote_ident(n.nspname) || '.' || quote_ident(c.relname),
                a.attname
            ) AS seq_name
        FROM pg_class c
        JOIN pg_namespace n ON n.oid = c.relnamespace
        JOIN pg_attribute a ON a.attrelid = c.oid
        WHERE c.relkind = 'r'
          AND pg_get_serial_sequence(
                quote_ident(n.nspname) || '.' || quote_ident(c.relname),
                a.attname
              ) IS NOT NULL
    LOOP
        EXECUTE format(
            'SELECT setval(%L, COALESCE((SELECT MAX(%I) FROM %I.%I), 1), true)',
            r.seq_name,
            r.column_name,
            r.schema_name,
            r.table_name
        );
    END LOOP;
END $$;






ㅇㅇ

댓글 없음:

댓글 쓰기