sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL Trigger efter uppdatering av en specifik kolumn

Syntaxen skulle vara:

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

(Som dokumenterat i manualen.)

Men hela tillvägagångssättet är tveksamt. Att hålla aggregat uppdaterade via utlösaren är benägna att få fel under samtidig skrivbelastning.

Och utan samtidig skrivbelastning finns det enklare lösningar:lägg bara till / subtrahera 1 från den aktuella summan ...

En VIEW skulle vara ett pålitligt alternativ. Ta bort kolumnen game_collection.total_game_count helt och hållet - och kanske hela tabellen game_collection , som inte verkar ha något annat syfte. Skapa en VIEW istället:

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

Detta returnerar alla användare med minst 1 rad i game_info där game_saved IS TRUE (och utelämnar alla andra).

För mycket stora bord kanske du vill ha en MATERIALIZED VIEW eller relaterade lösningar för att förbättra läsprestanda.




  1. Hur får man element med ett unikt nummer från en json-array i PostgreSQL?

  2. Hur hämtar man från MySql Database när man använder Include-anslutning?

  3. omvänd mysql_real_escape_string

  4. Finns det något sätt att upprätthålla en db-relation (pk/fk) i följande scenario