I am trying to write a generic plpgsql function that won't allow user to insert record with empty strings to a table.
My problem is that if NEW.nazwa_kolumny
looks for column named "nazw_kolumny"
rather than substitute the variable's value. After some research I wrote the code below, but apparently NEW
is not known in that EXECUTE
statement.
CREATE OR REPLACE FUNCTION czy_pusty_rekord() RETURNS TRIGGER
AS $$
DECLARE
nazwy_kolumn TEXT[];
nazwa_kolumny TEXT;
czy_pusty BOOLEAN;
BEGIN
nazwy_kolumn := array(SELECT column_name::text
FROM information_schema.columns
WHERE table_name = TG_TABLE_NAME);
FOREACH nazwa_kolumny IN ARRAY nazwy_kolumn
LOOP
EXECUTE 'EXISTS SELECT * FROM NEW WHERE ' || quote_ident(nazwa_kolumny) || ' = ''''' INTO czy_pusty;
IF (czy_pusty) THEN
RAISE EXCEPTION 'Nie podano wszystkich wymaganych danych';
END IF;
END LOOP;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;