gpt4 book ai didi

postgresql - 如何在postgreSQL中动态更新序列

转载 作者:行者123 更新时间:2023-11-29 12:58:51 25 4
gpt4 key购买 nike

我需要在各种系统上更新超过 26 个表 的序列

现在我正在为每个表执行 SELECT setval('auth_group_id_seq', max(id)) FROM auth_group;

但它们是一种我可以遍历 \dt public.* 中可用的每个表然后更新序列的方法。

我想做这样的事情但得到了错误 select table_name from tables where tables IN (\dt public.*);

最佳答案

您可以使用此查询获取公共(public)模式中的每个表:

 select tablename from pg_tables where schemaname='public';

pg_tables doc

要获取每个公共(public)模式的所有序列,您可以这样做:

select cs.relname, nc.nspname
from pg_class cs
join pg_namespace nc on cs.relnamespace = nc.oid
where cs.relkind='S' and nc.nspname='public';

pg_class doc

您不需要为了改变序列而将序列链接到表格。还要考虑序列是它们自己的对象,不“属于”postgres 中的表。序列必须是每个模式的唯一名称,因此只要您根据正确的模式更改所需的序列,这应该可以解决问题。

改变序列语法:

ALTER SEQUENCE serial RESTART WITH 105;

alter sequence doc

进行这些更新的一种快速方法是动态生成更改语句。但是,这需要您更改 maxvalue 的值在所有序列上都相同。

select 'alter sequence ' || nc.nspname || '.' || cs.relname || ' maxvalue  value_to_be_set;'
from pg_class cs
join pg_namespace nc on cs.relnamespace = nc.oid
where cs.relkind='S' and nc.nspname='public';

会输出这样的东西:

alter sequence public.sequence_1 maxvalue 5;
alter sequence public.sequence_2 maxvalue 5;
alter sequence public.sequence_3 maxvalue 5;

关于postgresql - 如何在postgreSQL中动态更新序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35671493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com