PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wyzwalacz PostgreSQL po aktualizacji określonej kolumny

Składnia byłaby następująca:

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

(Zgodnie z dokumentacją w instrukcji.)

Ale całe podejście jest wątpliwe. Utrzymywanie aktualności agregatów za pomocą wyzwalacza jest podatne na błędy przy jednoczesnym obciążeniu zapisu.

A bez współbieżnego obciążenia zapisu istnieją prostsze rozwiązania:po prostu dodaj / odejmij 1 od bieżącej sumy ...

VIEW byłaby niezawodną alternatywą. Usuń kolumnę game_collection.total_game_count w sumie - a może cały stół game_collection , co nie wydaje się mieć żadnego innego celu. Utwórz VIEW zamiast tego:

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

Zwraca wszystkich użytkowników z co najmniej 1 wierszem w game_info gdzie game_saved IS TRUE (i pomija wszystkie inne).

W przypadku bardzo dużych tabel możesz potrzebować MATERIALIZED VIEW lub powiązane rozwiązania poprawiające wydajność odczytu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sortowanie postgreSQL ze znacznikami czasu

  2. Normalizacja Unicode w Postgres

  3. Korzystanie z klauzuli EXCEPT w PostgreSQL

  4. Django i PostgreSQL - zbyt długa wartość dla zmiennej typu character(512)

  5. Pula połączeń bazy danych pracownika selera