如何在PostgreSQL中迁移数据库之前将所有序列重置为1?

Ala*_*yne 1 database postgresql-9.4

(PostgreSQL 9.4)

我正在将旧数据库迁移到新架构。在使用pg_restore从开发机器获取新模式(没有数据)之后,我发现某些序列不是从1开始的。(在开发过程中,我更改了多个序列以使用更高的值)。

在开始数据库迁移之前,是否可以通过编程方式将所有序列(其中一些不是主键)重置为1?

感谢您的帮助或建议。

Ala*_*yne 7

SETVAL手册可以满足我的需求,它的工作方式非常简单在PgAdmin中,我想将序列限制为公共模式中的所有序列:

SELECT  SETVAL(c.oid, 1)
from pg_class c JOIN pg_namespace n 
on n.oid = c.relnamespace 
where c.relkind = 'S' and n.nspname = 'public'  
Run Code Online (Sandbox Code Playgroud)

我将此作为对任何来这里的人的帮助。

  • 值得一提的是,“setval()”函数中有一个可选的第三个参数。当设置为 false 时,nextval 将返回 1,否则将返回 2。 (4认同)

M. *_*cki 6

您可以使用 in 循环更改 seq 值,在这里您可以获取setval包含以下列的所有表IdDATA_BASE_NAME

DO $$
DECLARE
i TEXT;
BEGIN
 FOR i IN (SELECT tb.table_name FROM information_schema.tables AS tb INNER JOIN information_schema.columns AS cols ON 
        tb.table_name = cols.table_name WHERE tb.table_catalog='DATA_BASE_NAME' 
         AND tb.table_schema='public' AND cols.column_name='Id') LOOP
         EXECUTE 'SELECT setval('||'"' || i || '_Id_seq"'||',1);';

  END LOOP;
END $$;
Run Code Online (Sandbox Code Playgroud)