sql >> データベース >  >> RDS >> PostgreSQL

Postgres:すべてのテーブルの主キーシーケンスを更新します

    すべてのシーケンスをリセットするためのplpgsqlは次のとおりです(pgadmin、psql、またはその他のクライアントで実行):

    do 
    $$
    declare
     _r record;
     _i bigint;
     _m bigint;
    begin
      for _r in (
        SELECT relname,nspname,d.refobjid::regclass, a.attname, refobjid
        FROM   pg_depend    d
        JOIN   pg_attribute a ON a.attrelid = d.refobjid AND a.attnum = d.refobjsubid
        JOIN pg_class r on r.oid = objid
        JOIN pg_namespace n on n.oid = relnamespace
        WHERE  d.refobjsubid > 0 and  relkind = 'S'
       ) loop
        execute format('select last_value from %I.%I',_r.nspname,_r.relname) into _i;
        execute format('select max(%I) from %s',_r.attname,_r.refobjid) into _m;
        if coalesce(_m,0) > _i then
          raise info '%',concat('changed: ',_r.nspname,'.',_r.relname,' from:',_i,' to:',_m); 
          execute format('alter sequence %I.%I restart with %s',_r.nspname,_r.relname,_m+1);
        end if;
      end loop;
    
    end;
    $$
    ;
    

    または、 postgresの主キーシーケンスが同期しなくなったときにリセットするにはどうすればよいですか?




    1. RuntimeError:OperationalError:(2003、「インスタンスのIPアドレス」でMySQLサーバーに接続できません

    2. サーバーの現在の負荷に影響を与えないようにMySQLダンプを遅くするにはどうすればよいですか?

    3. mySQLで動的WHERE句を作成する

    4. MySQLユーザー定義変数のストレージ制限