PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Pemicu PostgreSQL setelah pembaruan kolom tertentu

Sintaksnya adalah:

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

(Seperti yang didokumentasikan dalam manual.)

Tetapi seluruh pendekatannya meragukan. Menjaga agregat tetap terbarui melalui pemicu rentan terhadap kesalahan di bawah beban tulis bersamaan.

Dan tanpa beban tulis bersamaan, ada solusi yang lebih sederhana:cukup tambahkan / kurangi 1 dari total saat ini ...

VIEW akan menjadi alternatif yang dapat diandalkan. Hapus kolom game_collection.total_game_count semuanya - dan mungkin seluruh tabel game_collection , yang tampaknya tidak memiliki tujuan lain. Buat VIEW sebagai gantinya:

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

Ini mengembalikan semua pengguna dengan setidaknya 1 baris di game_info di mana game_saved IS TRUE (dan menghilangkan yang lainnya).

Untuk tabel yang sangat besar, Anda mungkin menginginkan MATERIALIZED VIEW atau solusi terkait untuk meningkatkan kinerja membaca.




  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 Setara dengan Petunjuk NoLock SQLServer

  2. Sisipkan beberapa baris dalam satu tabel berdasarkan nomor di tabel lain

  3. Urutan pengurutan deterministik untuk fungsi jendela

  4. Mengintegrasikan Alat untuk Mengelola PostgreSQL dalam Produksi

  5. Postgres:ERROR:paket yang di-cache tidak boleh mengubah jenis hasil