sql >> Databáze >  >> RDS >> PostgreSQL

Postgres:Aktualizujte sekvenci primárních klíčů pro všechny tabulky

zde je plpgsql pro resetování všech sekvencí (spuštění v pgadmin nebo psql nebo jakémkoli jiném klientovi):

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;
$$
;

nebo použijte jakékoli jiné řešení navržené na Jak resetovat sekvenci primárních klíčů postgresu, když se nesynchronizuje?




  1. Úložiště bajtového pole Mysql

  2. Povolit sdílení stránky chráněné heslem na sociálních sítích?

  3. Jak získám protokolování psycopg2 doby provádění dotazu?

  4. zkontrolujte, zda sloupec obsahuje VŠECHNY hodnoty jiného sloupce - Mysql