如何使用 select 语句声明一个函数以将所有 auto_increment 值重置为 postgresql 中表的最大 id

问题描述

我有一个包含许多表的 Postgres 数据库。我想声明一个函数,将所有表的所有 auto_increment 值 (next_value) 重置为表的 max(id)。例如,如果 sample_tablema​​x(id)22

postgres=# SELECT nextval('"public"."sentry_project_id_seq"'::regclass);
 nextval 
---------
       7
(1 row)

虽然表的next_value7

SELECT setval('auth_user_id_seq',(SELECT MAX(id) from "auth_user"));

我想通过以下方式将所有表的 next_value 设置为它们的 ma​​x(id)

CREATE OR REPLACE FUNCTION reset_auto_increment(username IN VARCHAR) RETURNS void AS $$
DECLARE
        statements CURSOR FOR
            SELECT tablename FROM pg_tables
            WHERE tableowner = username AND schemaname = 'public';
    BEGIN
        FOR stmt IN statements LOOP
            EXECUTE 'SELECT setval(' || concat(stmt.tablename,'_id_seq') || ',(SELECT MAX(id) from ' || quote_ident(stmt.tablename) || '));';
        END LOOP;
    END;
$$ LANGUAGE plpgsql;

为此,我通过以下方式声明了一个名为 reset_auto_increment函数

postgres=# select reset_auto_increment('postgres');
**ERROR:  column "_id_seq" does not exist**
LINE 1: SELECT 'SELECT setval(' || concat(stmt.tablename,"_id_seq")...
                                                          ^
QUERY:  SELECT 'SELECT setval(' || concat(stmt.tablename,"_id_seq") || ',(SELECT MAX(id) from ' || quote_ident(stmt.tablename) || '));'
CONTEXT:  PL/pgsql function reset_auto_increment(character varying) line 8 at EXECUTE

但是上面语句声明的函数下面有错误

web.xml

如何修正这个功能

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)