sql >> Databáze >  >> RDS >> PostgreSQL

PostgreSQL Trigger po aktualizaci konkrétního sloupce

Syntaxe by byla:

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

(Jak je uvedeno v příručce.)

Celý přístup je ale pochybný. Udržování aktuálních agregátů pomocí spouštěče je náchylné k chybám při souběžném zatížení zápisu.

A bez souběžného zatížení zápisu existují jednodušší řešení:stačí přidat / odečíst 1 od aktuálního součtu ...

VIEW bude spolehlivou alternativou. Odstraňte sloupec game_collection.total_game_count dohromady – a možná i celou tabulku game_collection , která, jak se zdá, nemá jiný účel. Vytvořte VIEW místo toho:

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

To vrátí všechny uživatele s alespoň 1 řádkem v game_info kde game_saved IS TRUE (a vynechá všechny ostatní).

Pro velmi velké stoly můžete chtít MATERIALIZED VIEW nebo související řešení pro zlepšení výkonu čtení.




  1. Python:MySQLdb a knihovna nejsou načteny:libmysqlclient.16.dylib

  2. Jak zobrazit výchozí hodnotu, když v dotazu nebyla nalezena žádná shoda?

  3. MySql Insert Select uuid()

  4. Jak používat Relation::morphMap() pro různé třídy