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

Kích hoạt PostgreSQL sau khi cập nhật một cột cụ thể

Cú pháp sẽ là:

CREATE TRIGGER tr_total_games 
AFTER UPDATE OF game_saved ON game_info
FOR EACH ROW 
EXECUTE PROCEDURE total_games();

(Như được ghi trong sách hướng dẫn.)

Nhưng toàn bộ cách tiếp cận là không rõ ràng. Việc cập nhật tổng hợp thông qua trình kích hoạt dễ xảy ra lỗi khi tải ghi đồng thời.

Và không có tải ghi đồng thời, có các giải pháp đơn giản hơn:chỉ cần cộng / trừ 1 từ tổng hiện tại ...

VIEW sẽ là một sự thay thế đáng tin cậy. Xóa cột game_collection.total_game_count hoàn toàn - và có thể là toàn bộ bảng game_collection , mà dường như không có bất kỳ mục đích nào khác. Tạo VIEW thay vào đó:

CREATE VIEW v_game_collection AS
SELECT user_id, count(*) AS total_game_count
FROM   game_info
WHERE  game_saved
GROUP  BY user_id;

Điều này trả về tất cả người dùng có ít nhất 1 hàng trong game_info trong đó game_saved IS TRUE (và bỏ qua tất cả những thứ khác).

Đối với các bảng rất lớn, bạn có thể muốn có MATERIALIZED VIEW hoặc các giải pháp liên quan để cải thiện hiệu suất đọc.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để cấp quyền cho người dùng trên tất cả các bảng mới trong Postgres?

  2. Chuyển đổi một kết quả sql để một cột chuyển sang nhiều cột

  3. Truyền hoặc trích xuất dấu thời gian từ v1 UUID trong PostgreSQL

  4. Heroku pg:pull không điền giản đồ

  5. Postgres trên Rails FATAL:cơ sở dữ liệu không tồn tại