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:
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)
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.