Ich habe 54 Tabellen in meiner Postgresql-Datenbank. Und die meisten Tabellen enthalten das Erstellungsdatum der Daten. Ich möchte einen globalen Trigger für alle Tabellen erstellen, die CreatedDate Spalte enthalten. Und dieser Trigger wird die Spalte aktualisieren, wenn ein Datensatz eingefügt wird.Postgresql-Trigger für alle Tabellen, die das Erstellungsdatum enthalten
Antwort
Jede Tabelle benötigt einen eigenen Auslöser, aber Sie können einen einzigen Trigger-Funktion verwenden:
CREATE FUNCTION set_created_date() RETURNS trigger AS $$
BEGIN
NEW.createddate := CURRENT_TIME;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
Für jede Tabelle Sie einen Trigger wie diese haben sollte:
CREATE TRIGGER set_createddate
BEFORE INSERT ON <table name>
FOR EACH ROW EXECUTE PROCEDURE set_created_date();
Sie den Auslöser einstellen für alle 54 Tabellen mit diesem Code (zuerst erstellen Sie die Trigger-Funktion):
DO $$
DECLARE
t record;
BEGIN
FOR t IN
SELECT * FROM information_schema.columns
WHERE column_name = 'createddate'
LOOP
EXECUTE format('CREATE TRIGGER set_createddate
BEFORE INSERT ON %I.%I
FOR EACH ROW EXECUTE PROCEDURE set_created_date()',
t.schema_name, t.table_name);
END LOOP;
END;
$$ LANGUAGE plpgsql;
Diese obvio Normalerweise wird davon ausgegangen, dass keine anderen Tabellen mit einer Spalte mit dem Namen createddate
vorhanden sind. Dies können Sie leicht überprüfen, indem Sie die Tabelle information_schema.columns
abfragen.
Für diejenigen, die Probleme mit Patricks Lösung haben. Hier der gleiche Code mit einer gewissen Verbesserung:
DO $$
DECLARE
t text;
BEGIN
FOR t IN
SELECT table_name FROM information_schema.columns
WHERE column_name = 'createddate'
LOOP
EXECUTE format('CREATE TRIGGER set_createddate
BEFORE INSERT ON %I
FOR EACH ROW EXECUTE PROCEDURE set_created_date()',
t);
END LOOP;
END;
$$ LANGUAGE plpgsql;
Im Allgemeinen sind Antworten viel hilfreicher, wenn sie eine Erklärung enthalten, was der Code tun soll, und warum das das Problem löst, ohne andere einzuführen. – Peter
- 1. Sollte EF DbContext alle Tabellen enthalten?
- 2. Alle Tabellen auflisten, die einen bestimmten Spaltennamen enthalten
- 3. Alle gespeicherten Prozeduren nach Erstellungsdatum aufgelistet?
- 4. Erhalten Sie das Erstellungsdatum eines Stash
- 5. Wie finden Sie alle Spalten in allen Tabellen, die alle NULL-Werte enthalten?
- 6. Das Google Kalender-Backup speichert das Erstellungsdatum des Ereignisses nicht
- 7. Regex für alle Zeichenfolgen, die keine Zeichenfolge enthalten?
- 8. So löschen Sie Zeilen in Tabellen, die Fremdschlüssel für andere Tabellen enthalten
- 9. Automatisches Erstellungsdatum für Django-Modell-Formularobjekte?
- 10. Alle Wörter finden, die aktuelle Zeichen enthalten
- 11. Alle Unterverzeichnisse, die nur Dateien enthalten
- 12. R-Faktor alle Spalten, die Zeichenfolge enthalten
- 13. Set IDENTITY_INSERT OFF für alle Tabellen
- 14. BitBucket Branch Erstellungsdatum
- 15. Erstellungsdatum und File.Copy Problem
- 16. Grant Select für alle Tabellen, die einem bestimmten Benutzer gehören
- 17. Wiederholbare Lese-Isolationsstufe sperrt alle Tabellen für die Aktualisierung?
- 18. MYSQL LINKER JOIN 3 Tabellen enthalten Nullsätze
- 19. Wählen Sie Indizes für alle Tabellen aus
- 20. Präfix der Standardtabellennamen für alle Liferay-Tabellen
- 21. ORMLite alle Tabellen zurücksetzen
- 22. Erstellungsdatum des SPWebApplication-Objekts?
- 23. Oracle manuell Statistiken für alle Tabellen aktualisieren
- 24. Mysql OPTIMIZE TABLE für alle fragmentierten Tabellen
- 25. Xamarin SQLite Datenbank erstellen für alle Tabellen
- 26. Wählen Sie in 2 Tabellen, die den gleichen Feldnamen enthalten?
- 27. Dateinamen mit Erstellungsdatum generieren
- 28. Verwenden tablediff alle Tabellen
- 29. Javascript Erstellungsdatum ohne Sommerzeit Umwandlung
- 30. alle ‚x‘ Werte finden, die keine ‚y‘ enthalten
Warum 'Sie nicht einfach die Spalten nun auf' default() ändern? –
Standard jetzt() funktioniert gut für SQL-Abfragen einfügen. Aber ich benutze Software von Drittanbietern wie QGIS, um Datensätze in den Tisch zu legen. In dieser Übung wird ein neuer Datensatz manuell über Formulare erstellt. Wenn ich das Erstellungsdatum manuell ablege, geht das Datumsfeld NULL zur Datenbanktabelle. – barteloma
Ok. Warum versuchst du nicht auf gis.stackexchange.com zu fragen? Es muss definitiv eine Lösung dafür geben. Ich bezweifle, dass qgis Standardeinstellungen auf Einfügungen nicht behandeln kann. –