Ich bin neu in PostgreSQL. Ich habe einen Trigger gemacht, der nach einem Einfügen in eine Tabelle aktiviert ist. Meine Tabelle enthält Werte, 1 Datumswert für ein Startdatum und 1 Datumswert für ein Enddatum. Wenn ich eine neue Zeile in die Tabelle einfüge, möchte ich prüfen, ob es Überschneidungen mit einem der vorhandenen Daten gibt. Also meine Trigger ist folgendes:Überprüfen Sie, ob ein Wert in einer Rückfrage in Postgresql
CREATE OR REPLACE FUNCTION insert_new()
RETURNS TRIGGER AS $$
BEGIN
if ('t' = any (select ((NEW.start_date, NEW.end_date) overlaps (start_date, end_date)) from "mytable")) then
RAISE EXCEPTION 'Invalid insertion!';
else
return NEW;
end if;
END;
$$ LANGUAGE plpgsql;
Es scheint mir richtig, aber wenn ich versuche, eine neue Zeile in meiner Tabelle einzufügen bekomme ich jedes Mal die Ausnahme. Ich kann nicht verstehen, warum das passiert .. Irgendwelche Gedanken? Vielen Dank im Voraus ..
Hier ist der Trigger-Code erstellen:
CREATE TRIGGER check_insert
AFTER INSERT ON "mytable"
FOR EACH ROW
WHEN (NEW.status = 'current')
EXECUTE PROCEDURE insert_new();
Ich weiß nicht, ob es helfen wird, das ist nur schnell zu bemerken. Prüfe, ob es hilft: '' if 't' = any (wähle ((NEW.start_date, NEW.end_date) überlappt (start_date, end_date)) von "mytable") then'' – Sylogista
Diese Klammer sieht ein bisschen verdächtig aus, aber ich weiß es wirklich nicht. – Sylogista
@Sylogista Ich habe versucht, ohne die Klammer, aber ich bekomme das gleiche Ergebnis .. –