Steg 1: Skriv en funksjon i C.
Min funksjon sjekker at input er korrekt ved insert og update.
Se på koden her
Steg 2: Kompiler koden som shared object.
gcc -L/usr/lib/pgsql -I/usr/include/pgsql/server -lpq -shared -o sjekkrna.so sjekkrna.c
Steg 3: Opprett tabellen, funksjonen og triggeren i psql
create table cFunkTest( id int not null, navn varchar(30), regnr varchar(6), alder int, primary key(id)); create function sjekkrna() RETURNS TRIGGER AS '/home/ansatte/elinkaan/moddb/sjekkrna.so' LANGUAGE C; create trigger rnabefore BEFORE INSERT OR UPDATE ON cFunkTest for each row execute procedure sjekkrna();
Steg 4: Legg inn testdata for å sjekke at alt er ok
insert into cFunkTest values(1, 'Hans Nilsen', 'AA2345', -1); ERROR: sjekkrna: alder=-1, kan ikke være negativ verdi insert into cFunkTest values(2, 'Per Olsen', 'AA1111', 25); INSERT 4464450 1 insert into cFunkTest values(3, 'Ole Jensen', 'bb2222', 31); INSERT 4464451 1 insert into cFunkTest values(4, 'Emma Evensen', 'AAA111', 18); ERROR: sjekkrna: regnr=AAA111, feil format. Skal være CC#### insert into cFunkTest values(5, 'Anne Andersen', 'PP2212', NULL); INSERT 4464452 1 insert into cFunkTest values(6, 'Hans Hansen', NULL, 34); INSERT 4464453 1 select * from cFunkTest; id | navn | regnr | alder ----+---------------+--------+------- 2 | Per Olsen | AA1111 | 25 3 | Ole Jensen | BB2222 | 31 5 | Anne Andersen | PP2212 | 6 | Hans Hansen | | 34 (4 rows) update cFunkTest set alder=-1 where id = 2; ERROR: sjekkrna: alder=-1, kan ikke være negativ verdi update cFunkTest set alder=22 where id = 5; UPDATE 1 select * from cFunkTest; id | navn | regnr | alder ----+---------------+--------+------- 2 | Per Olsen | AA1111 | 25 3 | Ole Jensen | BB2222 | 31 6 | Hans Hansen | | 34 5 | Anne Andersen | PP2212 | 22 (4 rows) update cFunkTest set regnr='aa7654' where id = 6; UPDATE 1 update cFunkTest set regnr='bb76b1' where id = 2; ERROR: sjekkrna: regnr=bb76b1, feil format. Skal være CC#### select * from cFunkTest; id | navn | regnr | alder ----+---------------+--------+------- 2 | Per Olsen | AA1111 | 25 3 | Ole Jensen | BB2222 | 31 5 | Anne Andersen | PP2212 | 22 6 | Hans Hansen | AA7654 | 34 (4 rows)