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

Làm cách nào để truy vấn cập nhật gia tăng postgres kể từ một điểm được chỉ định (dấu thời gian hoặc id giao dịch)?

Điều bạn thực sự muốn là giải mã logic của PostgreSQL 9.4 hỗ trợ, cho phép bạn trích xuất một luồng thay đổi từ máy chủ. Để sử dụng nó, bạn cần một plugin giải mã logic để biến luồng thay đổi trên máy chủ thành thứ mà ứng dụng của bạn có thể sử dụng. Có một số trong quá trình phát triển, nhưng vẫn còn khá sớm.

Vì bạn đã lưu ý trong một nhận xét rằng bạn đang sử dụng AWS RDS, tại thời điểm này, bạn không gặp may, vì RDS tại thời điểm viết bài này không cung cấp bất kỳ plugin giải mã nào và bạn cần có đặc quyền của người dùng siêu cấp để cài đặt chúng.

Bạn không thể sử dụng xmin và xmax để sao chép gia tăng hoàn toàn, bởi vì bạn không thể thực hiện đọc bẩn trong PostgreSQL, vì vậy bạn không thể xem liệu một bộ đã bị DELETE hay chưa d. Để sử dụng ID giao dịch, bạn cần ngăn VACUUM khỏi việc xóa các hàng "chết", tức là các hàng không có giao dịch hiện tại vẫn cần thực hiện chính xác. Bạn cũng cần phải có khả năng đọc bẩn. Cả hai đều không có giải pháp dễ dàng trong PostgreSQL.

Nếu bạn có bảng chỉ chèn (hoặc bạn thực hiện chèn và cập nhật, không bao giờ xóa và không bao giờ thay đổi khóa chính của một hàng) thì bạn có thể sử dụng giao dịch xmin. Bạn sẽ phải đối phó với giao dịch-id gói bằng cách kiểm tra pg_database.datfrozenxidpg_class.relfrozenxid cho mối quan hệ của lợi ích. Xem mã nguồn và nhận xét trong mã để biết chi tiết. VACUUM và việc thiếu các bài đọc bẩn không phải là vấn đề nếu bạn không bao giờ xóa một mục nhập, vì bạn không cần phải nhìn thấy các hàng "đã biến mất".

Sử dụng giải mã logic trong 9.4+ nếu có thể. Đối với các phiên bản cũ hơn, nếu bạn cần sao chép hoàn chỉnh, bạn cần tích lũy hàng đợi thay đổi với các trình kích hoạt.

Nếu bạn có thể cấm hoàn toàn việc xóa và thay đổi khóa chính, bạn có thể sử dụng xmin để tìm các hàng đã thay đổi, miễn là bạn cẩn thận để đảm bảo không có delete s chạy hoặc bất kỳ update sẽ thay đổi primary key s.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chia tỷ lệ kết nối trong PostgreSQL bằng cách sử dụng gộp kết nối

  2. biểu thức bảng chung có thể ghi và nhiều câu lệnh chèn

  3. Sự cố khi truy xuất bản ghi có mảng trống

  4. Django số lượng chú thích trong JSONField với Postgres

  5. Postgis xử lý các tọa độ được gửi bằng SRID khác nhau như thế nào