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

Tự động cộng gộp, nhưng bỏ qua các giá trị hiện có trong cột

Cập nhật:Sau đó, câu trả lời chi tiết hơn:

Điều này sẽ hoạt động trơn tru:

CREATE OR REPLACE FUNCTION f_next_free(_seq regclass)
  RETURNS integer AS
$func$
BEGIN
   LOOP
      PERFORM nextval(_seq);
      EXIT WHEN NOT EXISTS (SELECT 1 FROM db.t1 WHERE id = lastval());
   END LOOP; 

   RETURN lastval();
END
$func$  LANGUAGE plpgsql VOLATILE;

Vòng lặp đang tìm nạp số tiếp theo từ chuỗi đã cho cho đến khi tìm thấy một số chưa có trong bảng. Thậm chí phải an toàn khi sử dụng đồng thời , vì chúng tôi vẫn dựa trên một trình tự.

Sử dụng hàm này trong cột mặc định của cột nối tiếp (thay thế mặc định cho cột nối tiếp nextval('t1_id_seq'::regclass) :

ALTER TABLE db.t1 ALTER COLUMN id
SET DEFAULT f_next_free('t1_id_seq'::regclass);

Hướng dẫn về lastval () .

Điều này hoạt động tốt với ít đảo và nhiều khoảng trống (có vẻ là trường hợp theo ví dụ). Để thực thi tính duy nhất, thêm ràng buộc duy nhất (hoặc khóa chính) trên cột.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cập nhật đơn đặt hàng trả lại bằng postgresql

  2. Bản ghi riêng biệt với các phép nối và thứ tự

  3. Truy vấn nhiều bảng với các mối quan hệ phức tạp

  4. Các phiên bản Postgres không tương thích

  5. Lấy tổng hợp trong các khoảng thời gian tùy ý