PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Postgres:Cập nhật chuỗi khóa chính cho tất cả các bảng

đây là plpgsql để đặt lại tất cả các chuỗi (chạy trong pgadmin hoặc psql hoặc bất kỳ ứng dụng khách nào khác):

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

hoặc sử dụng bất kỳ giải pháp nào khác được đề xuất tại Cách đặt lại trình tự khóa chính của postgres khi nó không đồng bộ hóa?




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. postgresql di chuyển JSON sang JSONB

  2. Tại sao `libpq` lại sử dụng tính năng thăm dò thay vì thông báo để tìm nạp dữ liệu?

  3. Làm thế nào để hiển thị cha mẹ trên hệ thống phân cấp sql?

  4. Làm cách nào để tôi có thể yêu cầu PostgreSQL không hủy bỏ toàn bộ giao dịch khi một ràng buộc duy nhất không thành công?

  5. làm thế nào để chuyển đổi số phút số nguyên thành khoảng thời gian trong postgres