2016-03-23 5 views
-2

Ich möchte einen Trigger, dass, wenn eine Tabelle, nennen wir es A, aktualisiert wird, es zählt die Anzahl der Zeilen auf A und aktualisiert einen Wert in einer anderen Tabelle B, wie kann es getan werden?PGSQL: Trigger Zähler von Zeilen einer anderen Tabelle

+0

Was haben Sie bis jetzt versucht? –

+0

Ich bin sehr neu in pgsql, auch sehr neu bei der Erstellung von Datenbanken, ich habe versucht, einen Trigger nach der postgresql.org Dokumentation zu erstellen, aber ich habe nicht sehr klar, wie man eine Prozedur erstellt. –

Antwort

0

Es gibt volle Probe hier: http://www.postgresql.org/docs/9.3/static/plpgsql-trigger.html

Um gespeicherte Prozedur erstellen Sie bieten sollen: FUNCTION your_function_name CREATE (parameters_goes_here) RETURNS returned_data_type_or_trigger_for_triggers AS string_value_with_body;

Normalerweise Semikolon endet Befehl, so dass Sie nicht Körper eingeben können. Andere Datenbanken ändern das Befehlstrennzeichen. PG erlaubt spezielle String Delimiter Dollarzeichen. Bitte lesen Sie mehr unter diesem Thema: What are '$$' used for in PL/pgSQL

Zurück zu den Schaltern - sie sind knifflig. Angenommen, Sie zählen Beiträge in Themen. Verschieben von Posts zwischen zwei Themen. Da sie Zähler haben, werden Themen aktualisiert. Das bedeutet wiederum Update-Sperre. Was passiert, wenn zwei gleichzeitige Posts zwischen zwei Themen verschoben werden? Der erste Zug sperrt sein Basisthema und versucht es mit einem anderen. Und das gleiche passiert dem anderen. : D Um damit umzugehen, müssen Sie sicherstellen, dass beide mit dem gleichen versuchen. Zum Beispiel sortieren Themen nach ID und wählen Sie zuerst von ihnen.

+0

, dass die Probe war ich folgende, ich habe diesen Code CREATE OR FUNCTION contar_formar() RETURNS auslösen AS $ BODY BEGIN $ UPDATE equipos SET numeromiembros = (SELECT COUNT (*) FROM formar) WHERE idequipo REPLACE = (SELECT equipo FROM formar); ENDE; $ BODY $ SPRACHE plpgsql VOLATILE COST 100; ALTER FUNKTION contar_formar() EIGENTÜMER NACH Postgres; aber es funktioniert nicht, wenn ich versuche, etwas in formar einzufügen, heißt es ist ein Fehler aufgetreten: ERROR: Steuerende Triggerprozedur ohne CONTEXT RETURN erreicht: PL/pgSQL Funktion contar_formar() –

+0

gelöst, Ich musste RETURN NULL vor dem Ende hinzufügen, danke für Ihre Hilfe! –

Verwandte Themen