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

Làm thế nào để tạo một chuỗi phân vùng PostgreSQL?

Tôi không tin rằng có một cách đơn giản dễ dàng như các chuỗi thông thường, bởi vì:

  1. Một chuỗi chỉ lưu trữ một dòng số (giá trị tiếp theo, v.v.). Bạn muốn một cái cho mỗi phân vùng.
  2. Các chuỗi có cách xử lý đặc biệt bỏ qua giao dịch hiện tại (để tránh điều kiện đua). Thật khó để tái tạo điều này ở cấp SQL hoặc PL / pgSQL mà không sử dụng các thủ thuật như dblink.
  3. Thuộc tính cột DEFAULT có thể sử dụng một biểu thức đơn giản hoặc một lệnh gọi hàm như nextval('myseq'); nhưng nó không thể tham chiếu đến các cột khác để thông báo cho hàm xem dòng giá trị sẽ đến từ đâu.

Bạn có thể tạo ra một cái gì đó hiệu quả, nhưng có thể bạn sẽ không nghĩ nó đơn giản. Lần lượt giải quyết các vấn đề trên:

  1. Sử dụng bảng để lưu trữ giá trị tiếp theo cho tất cả các phân vùng, với một lược đồ như multiseq (partition_id, next_val) .
  2. Viết multinextval(seq_table, partition_id) hàm thực hiện một số chức năng như sau:

    1. Tạo một giao dịch mới độc lập với giao dịch hiện tại (một cách để thực hiện việc này là thông qua dblink; tôi tin rằng một số ngôn ngữ máy chủ khác có thể thực hiện dễ dàng hơn).
    2. Khóa bảng được đề cập trong seq_table .
    3. Cập nhật hàng có id phân vùng là partition_id , với một giá trị tăng dần. (Hoặc chèn một hàng mới với giá trị 2 nếu không có hàng nào hiện có.)
    4. Cam kết giao dịch đó và trả lại id đã lưu trữ trước đó (hoặc 1).
  3. Tạo một trình kích hoạt chèn trên bảng dự án của bạn sử dụng lệnh gọi đến multinextval('projects_table', NEW.Project_ID) để chèn.

Bản thân tôi chưa sử dụng toàn bộ kế hoạch này, nhưng tôi đã thử một cái gì đó tương tự với từng bước riêng lẻ. Ví dụ về multinextval chức năng và trình kích hoạt có thể được cung cấp nếu bạn muốn thử điều này ...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng regex ở WHERE trong Postgres

  2. Làm thế nào để tạo tìm kiếm mờ đơn giản chỉ với PostgreSQL?

  3. Các chuỗi không có khoảng trống PostgreSQL

  4. Django prefetch_inity với giới hạn

  5. 7 điều cần lưu ý khi triển khai PostgreSQL của bạn