sql >> Database >  >> RDS >> PostgreSQL

Postgres:update primaire sleutelreeks voor alle tabellen

hier is plpgsql om alle sequenties te resetten (uitgevoerd in pgadmin of psql of een andere client):

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

of gebruik een andere oplossing die wordt voorgesteld op Hoe de primaire sleutelreeks van postgres resetten wanneer deze niet meer synchroon loopt?




  1. Hoe ontwerp ik een tabel waarin zeer grote gegevens worden opgeslagen?

  2. Tel het aantal keren dat de waarde in een bepaalde kolom in MySQL verschijnt

  3. Voorrang van operator in reguliere expressies

  4. codering van UTF8 komt niet overeen met locale en_US; de gekozen LC_CTYPE-instelling vereist codering LATIN1