sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL Trigger efter opdatering af en specifik kolonne

Syntaksen ville være:

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

(Som dokumenteret i manualen.)

Men hele tilgangen er tvivlsom. At holde aggregater opdateret via trigger er tilbøjelige til fejl under samtidig skrivebelastning.

Og uden samtidig skrivebelastning er der enklere løsninger:bare læg til / træk 1 fra den aktuelle total ...

En VIEW ville være et pålideligt alternativ. Fjern kolonnen game_collection.total_game_count i alt - og måske hele bordet game_collection , som ikke synes at have noget andet formål. Opret en VIEW i stedet:

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

Dette returnerer alle brugere med mindst 1 række i game_info hvor game_saved IS TRUE (og udelader alle andre).

For meget store borde vil du måske have en MATERIALIZED VIEW eller relaterede løsninger til at forbedre læseydelsen.




  1. Vis kolonnenavn med maks. værdi mellem flere kolonner

  2. Filtrering af MySQL-forespørgsel i PHP

  3. Tæl rækker i mysql-databasen, hvor tidsstempel inden for X-interval

  4. Returner kolonneoplysninger fra en sammenkædet server i SQL Server (T-SQL-eksempler)