Ala*_*yne 1 database postgresql-9.4
(PostgreSQL 9.4)
我正在将旧数据库迁移到新架构。在使用pg_restore从开发机器获取新模式(没有数据)之后,我发现某些序列不是从1开始的。(在开发过程中,我更改了多个序列以使用更高的值)。
在开始数据库迁移之前,是否可以通过编程方式将所有序列(其中一些不是主键)重置为1?
感谢您的帮助或建议。
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)
我将此作为对任何来这里的人的帮助。
您可以使用 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)