PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

PostgreSQL Trigger след актуализиране на конкретна колона

Синтаксисът би бил:

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

(Както е документирано в ръководството.)

Но целият подход е съмнителен. Поддържането на агрегатите актуални чрез тригер е предразположено към грешки при едновременно натоварване на запис.

И без едновременно натоварване на запис има по-прости решения:просто добавете/извадете 1 от текущата обща сума...

VIEW ще бъде надеждна алтернатива. Премахнете колоната game_collection.total_game_count общо - и може би цялата таблица game_collection , което изглежда няма друго предназначение. Създайте VIEW вместо това:

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

Това връща всички потребители с поне 1 ред в game_info където game_saved IS TRUE (и пропуска всички останали).

За много големи таблици може да искате MATERIALIZED VIEW или свързани решения за подобряване на производителността на четене.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как да поставим префикс на низ преди последователност, генерирана от postgresql?

  2. Безопасен за нишка PQconn обект

  3. Динамично предаване на имена на колони за променлива на запис в PostgreSQL

  4. Как да направя SQL заявка за думи с препинателни знаци в Postgresql?

  5. Как да разделя ред на няколко реда с една заявка?