DEFAULT-Spaltenwert in der Triggerfunktion

Hi,

gibt es eine Möglichkeit eine generische UPDATE-Triggerfunktion in einer prozeduralen Sprache wie PLSQL oder PLPYTHON zu schreiben, die eine der Spalten auf ihren DEFAULT-Wert setzt (der bei CREATE TABLE angegebene DEFAULT-Wert), etwa so:


NEW.id=‘default’

RETURN NEW;

Danke

Ungetestet:

schaue in pg_attribute, ob es einen Default-Value gibt, und hole diesen aus pg_attrdef, falls es einen gibt.

Bessere Lösung:

guggst Du Spalte column_default in information_schema.columns. Besser, weil portabler und pg_* versionsabhängig ist bzw. sein kann.

Andreas



test=*# create table bla (id serial, val int default 5);
NOTICE:  CREATE TABLE will create implicit sequence "bla_id_seq" for serial column "bla.id"
CREATE TABLE
Zeit: 2,391 ms
test=*# create or replace function bla_insert() returns trigger as $$begin raise notice 'bla %',new.val; NEW.val := (select column_default from information_schema.columns where table_name = tg_table_name and column_name = 'val'); return NEW; end; $$ language plpgsql;
CREATE FUNCTION
Zeit: 0,451 ms
test=*# create trigger trg_bla before insert on bla for each row execute procedure bla_insert();
CREATE TRIGGER
Zeit: 0,630 ms
test=*# insert into bla (val) values (33);
NOTICE:  bla 33
INSERT 0 1
Zeit: 5,040 ms
test=*# select * from bla;
 id | val
----+-----
  1 |   5
(1 Zeile)

mal so als Fahrplan …

Andreas

Hmm, ev. reicht auch einfach DEFAULT aus, ohne Hochkommas.
Im SQL selbst genügt das, aber ich weiß nicht, ob die Datenbank das so spät im Trigger noch mal ersetzt.

das habe ich erfolglos probiert …

Andreas

Ah ok, gut zu wissen.
Danke für die Info.

Gern geschehen :wink:

Darfst mir im Hotel einen ausgeben dafür!

Btw.: schön, daß Du auch dort gebucht hast.


Andreas