Ich möchte einen Trigger für eine game_catalog
Tabelle erstellen, sodass jedes Mal, wenn ein Benutzer ein Spiel aus seiner Sammlung hinzufügt oder löscht, die Gesamtzahl der Spiele aktualisiert wird. Da die Spielesammlung als ein Text-Array gespeichert ist, entschied ich mich, array_length-Funktion zu verwenden, um die Anzahl der Spiele zu zählen.PostgreSQL-Trigger zum Aktualisieren der Spielanzahl beim Einfügen/Löschen von Array-Elementen
game_catalog
id - BIGSERIAL primary key
user_id - INTEGER
game_list - text []
game_count - INTEGER
Ich habe versucht, einen Auslöser zu schaffen, so dass sie die Länge der game_list
Spalte nach Einsatz neu berechnet oder zu löschen, aber es funktioniert nicht. Hier ist, was ich habe jetzt:
CREATE OR REPLACE FUNCTION count_games()
RETURNS TRIGGER AS $$
BEGIN
UPDATE game_catalog
SET game_count = (SELECT array_length(game_list, 1) from game_catalog)
WHERE user_id = NEW.user_id;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER count_games
AFTER INSERT OR DELETE ON game_catalog FOR EACH ROW
EXECUTE PROCEDURE count_games();
seltsam. Wenn die Spieleliste im Array ist, wird kein Einfügen oder Löschen durchgeführt - nur update - um die Zeile für den Benutzer zu aktualisieren, indem das Feld 'game_list' geändert wird ... –