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

Cách cập nhật hàng loạt ID chuỗi postgreSQL cho tất cả các bảng

Giả sử rằng tất cả các trình tự đã sử dụng đều thuộc sở hữu của các cột tương ứng, ví dụ:thông qua một serial hoặc identity , bạn có thể sử dụng thuộc tính này, để đặt lại tất cả các chuỗi (sở hữu) trong cơ sở dữ liệu hiện tại.

with sequences as (
  select *
  from (
    select table_schema,
           table_name,
           column_name,
           pg_get_serial_sequence(format('%I.%I', table_schema, table_name), column_name) as col_sequence
    from information_schema.columns
    where table_schema not in ('pg_catalog', 'information_schema')
  ) t
  where col_sequence is not null
), maxvals as (
  select table_schema, table_name, column_name, col_sequence,
          (xpath('/row/max/text()',
             query_to_xml(format('select max(%I) from %I.%I', column_name, table_schema, table_name), true, true, ''))
          )[1]::text::bigint as max_val
  from sequences
) 
select table_schema, 
       table_name, 
       column_name, 
       col_sequence,
       coalesce(max_val, 0) as max_val,
       setval(col_sequence, coalesce(max_val, 1)) --<< this will change the sequence
from maxvals;

Phần đầu tiên chọn tất cả các chuỗi thuộc sở hữu của một cột. Sau đó, phần thứ hai sử dụng query_to_xml() để nhận giá trị tối đa cho cột được liên kết với trình tự đó. Và sau đó SELECT cuối cùng áp dụng giá trị tối đa đó cho từng chuỗi bằng cách sử dụng setval() .

Bạn có thể muốn chạy mà không có setval() gọi trước để xem mọi thứ có như bạn cần không.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Psql liệt kê tất cả các bảng

  2. Làm cách nào để sử dụng truy vấn có trình giữ chỗ bên trong dấu ngoặc kép? (perl / postgresql)

  3. Trả về các giá trị không phải dạng số từ cột cơ sở dữ liệu PostgreSQL

  4. PostgreSQL:cách cài đặt tiện ích mở rộng plpythonu

  5. GeoDjango trên Windows:Không thể tìm thấy thư viện GDAL / OSError:[WinError 126] Không tìm thấy mô-đun đã chỉ định