ich möchte bei Eingabe eines Array-Wertes in eine Tabelle nur bestimmte Werte zulassen. Um das zu validieren benötige ich also eine DOMAIN oder FUNKTION.
Angenommen es gibt ein Attribut Namens axisdirlists mit dem Datentyp text[].
Dazu habe ich folgende DOMAIN, die die eingegebenen Werte über folgenden regulären Ausdruck überprüfen soll.
CREATE DOMAIN AxisDirectionList AS text[] CHECK(
VALUE[0] ~ '[\+\-][1-9][0-9]*'
);
In diesem Fall wird nur der erste Wert im text-Array überprüft. Wie kann ich alle überprüfen. Ich denke, dass man in eine DOMAIN keine FOR-Schleife setzen kann, also brauche ich wohl doch eine FUNKTION.
CREATE OR REPLACE FUNCTION check_input(text[]) returns bool AS
$$BEGIN
FOR i in 0..array_upper($1,1) LOOP
if $1[i] ~ '[\+\-][1-9][0-9]*' then return true;
else return false;
end if;
END LOOP;
END;
$$language plpgsql;
aber da ist noch ein fehler drin…
wenn ich das richtig verstanden habe enthält doch der 2. Parameter bei der Funktion array_upper die Dimension, nicht wahr? …in der Referenz wird das nicht deutlich