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

Shift (cập nhật) các giá trị cột duy nhất trong PostgreSQL

Điều này thực sự hơi khó hiểu vì tất cả các ràng buộc khác đều được đánh giá ở cấp độ câu lệnh, chỉ có ràng buộc PK / duy nhất được đánh giá ở cấp độ mỗi hàng trong các hoạt động DML.

Nhưng bạn có thể giải quyết vấn đề đó bằng cách khai báo ràng buộc khóa chính là có thể hoãn lại:

create table tbl_test 
(
  testkey   INTEGER,
  constraint pk_tbl_test primary key (testkey) deferrable initially immediate
);

insert into tbl_test values (1), (2);

set constraints all deferred;

update tbl_test
   set testkey = testkey +1;

Ràng buộc hoãn lại có một số chi phí, vì vậy bằng cách xác định nó là initially immediate chi phí này được giữ ở mức tối thiểu. Bạn có thể trì hoãn đánh giá ràng buộc khi bạn cần bằng cách sử dụng set constraint .

Tuy nhiên, câu hỏi thực sự là:tại sao bạn cần làm điều này trên một giá trị khóa chính? Giá trị PK không có ý nghĩa gì, vì vậy có vẻ như không cần thiết phải tăng tất cả các giá trị (bất kể DBMS đang được sử dụ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. không cho phép thực thi root máy chủ PostgreSQL

  2. Truy vấn PostgreSQL rất chậm với giới hạn 1

  3. Tính toán sự khác biệt của các ngày trong Postgresql

  4. Gọi RESTful Web Services từ thủ tục / hàm PostgreSQL

  5. PostgreSQL:Vi phạm duy nhất:7 LỖI:giá trị khóa trùng lặp vi phạm ràng buộc duy nhất users_pkey