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

Sqlalchemy và PostgreSql:Làm thế nào để đặt khóa chính theo cách thủ công mà không có xung đột trong tương lai?

Tôi không biết bất kỳ cách an toàn và hiệu quả nào để làm những gì bạn muốn. Bạn thực sự nên chọn xem bạn muốn tự mình xác định các khóa hay sử dụng các khóa đã tạo và tuân theo chiến lược này hay chiến lược khác.

Nếu bạn không ngại về tính đồng thời khủng khiếp, bạn có thể LOCK TABLE thetable , làm công việc của bạn, setval chuỗi mã định danh của bảng thành giá trị miễn phí tiếp theo sau giá trị bạn đã chèn và commit để mở khóa. Tuy nhiên, điều đó vẫn sẽ gây ra sự cố với các ứng dụng gọi nextval một cách rõ ràng (giống như nhiều ORM) thay vì để cơ sở dữ liệu xác định giá trị bằng cách bỏ qua nó khỏi ?INSERT danh sách cột hoặc đặt tên rõ ràng là DEFAULT .

Nếu không, bạn có thể yêu cầu mã của mình (hoặc một hàm trợ giúp PL / PgSQL) thực hiện việc chèn trong một vòng lặp thử lại để tăng khóa và thử lại khi nó gặp lỗi toàn vẹn. Chiến lược này sẽ không hoạt động nếu bạn cần thực hiện nhiều hơn chỉ một lần chèn cho mỗi giao dịch. Hơn nữa trong SERIALIZABLE Chế độ cách ly Tôi không nghĩ bạn có thể làm điều đó với PL / PgSQL, bạn phải sử dụng vòng lặp thử lại phía máy khách để xử lý các lỗi tuần tự hóa.

Đó là một ý tưởng khủng khiếp. Sử dụng các khóa do ứng dụng xác định một cách nhất quán hoặc các khóa do cơ sở dữ liệu xác định một cách nhất quán. Đừng trộn lẫn cả hai.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tham gia truy vấn đếm trên create_series () và truy xuất giá trị Null là '0'

  2. Làm thế nào để tạo một chỉ mục duy nhất với điều kiện và truy vấn con trong PostgreSQL?

  3. Quản lý tính khả dụng cao của PostgreSQL - Phần I:Chuyển đổi dự phòng tự động PostgreSQL

  4. Vị trí mặc định của cơ sở dữ liệu PostgreSQL trên Linux

  5. Chọn nhiều giá trị hàng thành một hàng duy nhất với các mệnh đề nhiều bảng