Tomasz Zadora

Tomasz Zadora programuję

Temat: [postgreSQL] Dynamiczna nazwa kolumny w NEW (typie danych...

Witam,

pytanie:

czy można w funkcji która zwraca trigger (a właściwie typ danych RECORD) używać dynamicznej nazwy kolumny w obiekcie RECORD - np.
NEW, która została przekazana przy wywołaniu tej funkcji przez trigger?

Przykład który nie działa, funkcja:


CREATE OR REPLACE FUNCTION autoinc_uni()
RETURNS trigger AS
$BODY$
BEGIN
if (NEW.TG_ARGV[0] IS NULL) THEN
NEW.TG_ARGV[0] := nextval(TG_ARGV[1]);
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;


Zamiast użyć np. NEW.id chciałbym użyć nazwę kolumny jaką przekazałem przy wywoływaniu funkcji w triggerze, np.:


CREATE TRIGGER trgautoinc_sometable
BEFORE INSERT
ON sometable
FOR EACH ROW
EXECUTE PROCEDURE autoinc_uni('id', 'seq_sometable');


Przy próbie wprowadzenia danych do tabeli "sometable" dostaję komunikat, że rekord NEW nie posiada pola tg_argv.Ten post został edytowany przez Autora dnia 29.04.14 o godzinie 19:23

konto usunięte

Temat: [postgreSQL] Dynamiczna nazwa kolumny w NEW (typie danych...

Najprościej będzie jak napiszesz tę funkcję w plpgpythonie albo plpgperlu http://www.postgresql.org/docs/9.3/static/plpython-tri...Ten post został edytowany przez Autora dnia 29.04.14 o godzinie 23:55

konto usunięte

Temat: [postgreSQL] Dynamiczna nazwa kolumny w NEW (typie danych...

Albo jeszcze lepiej: nie rób tego triggera. Zamiast tego ustaw wartość DEFAULT na nextval('sequence'). A jeszcze lepiej użyj pseudotypu SERIAL.
Tomasz Zadora

Tomasz Zadora programuję

Temat: [postgreSQL] Dynamiczna nazwa kolumny w NEW (typie danych...

Dzięki, parę lat nie pracowałem z Postgres-em i pozapominałem kilka rzeczy :)

Następna dyskusja:

PostgreSQL i duża baza danych




Wyślij zaproszenie do