List all sequences in a Postgres db 8.1 with SQL

后端 未结 19 1763
旧时难觅i
旧时难觅i 2020-12-12 11:30

I\'m converting a db from postgres to mysql.

Since i cannot find a tool that does the trick itself, i\'m going to convert all postgres sequences to autoincrement id

19条回答
  •  鱼传尺愫
    2020-12-12 11:54

    I know this post is pretty old, but I found the solution by CMS to be very useful as I was looking for an automated way to link a sequence to the table AND column, and wanted to share. The use of pg_depend catalog table was the key. I expanded what was done to:

    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' ;
    

    This version adds column to the list of fields returned. With both the table name and the column name in hand, a call to pg_set_serial_sequence makes it easy to ensure that all sequences in the database are set correctly. For example:

    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$;
    

    Hope this helps someone with resetting sequences!

提交回复
热议问题