增加PostgreSQL DB中的所有序列

yx2lnoni  于 2023-04-20  发布在  PostgreSQL
关注(0)|答案(1)|浏览(107)

我使用AWS DMS迁移PostgreSQL数据库。源数据库在Aurora Postgres 10.xx上,目标数据库在Aurora Postgres 12.xx上。
由于DMS不同步序列,因此我使用以下查询(在目标DB上)来创建动态SQL查询,该查询将使我的序列增加相关列的max_value + 1000:

SELECT 
    'SELECT SETVAL(' ||
       quote_literal(quote_ident(sequence_namespace.nspname) || '.' || quote_ident(class_sequence.relname)) ||
       ', COALESCE(MAX(' ||quote_ident(pg_attribute.attname)|| '), 1)+ 1000 ) FROM ' || -- Buffer of 1000
       quote_ident(table_namespace.nspname)|| '.'||quote_ident(class_table.relname)|| ';'
FROM pg_depend 
    INNER JOIN pg_class AS class_sequence
        ON class_sequence.oid = pg_depend.objid 
            AND class_sequence.relkind = 'S'
    INNER JOIN pg_class AS class_table
        ON class_table.oid = pg_depend.refobjid
    INNER JOIN pg_attribute 
        ON pg_attribute.attrelid = class_table.oid
            AND pg_depend.refobjsubid = pg_attribute.attnum
    INNER JOIN pg_namespace as table_namespace
        ON table_namespace.oid = class_table.relnamespace
    INNER JOIN pg_namespace AS sequence_namespace
        ON sequence_namespace.oid = class_sequence.relnamespace
    where sequence_namespace.nspname='public' -- This is the schema name
ORDER BY sequence_namespace.nspname, class_sequence.relname;

这将返回总共15个SQL语句,这意味着公共模式中总共有15个序列。
现在,当我在同一个数据库上执行\ds public.*时,它给了我25个序列。我不明白为什么SELECT查询不能提取所有25个序列。
有人能帮帮忙吗?
谢谢

4nkexdtk

4nkexdtk1#

查询仅返回表列所拥有的序列:

ALTER SEQUENCE seq OWNED BY tab.id;

其他序列似乎与表列没有这种关系。

相关问题