-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 > If possible, can you give a complete example script that shows the > problem?
Here it is. CREATE OR REPLACE FUNCTION qmail_account_check() RETURNS TRIGGER AS ' -- do some check before insert/update on qmail_account DECLARE rec1 RECORD; rec2 RECORD; rec3 RECORD; recx RECORD; BEGIN -- allow the script only before operation on qmail_account IF NOT (TG_WHEN = ''BEFORE'' AND TG_RELNAME = ''qmail_account'') THEN RAISE NOTICE ''qmail_account_check RETURNS NULL 1 for % @ %'', NEW.username,NEW.domain; RETURN NULL; END IF; -- INSERT, UPDATE IF TG_OP = ''INSERT'' OR TG_OP = ''UPDATE'' THEN IF NEW.home ISNULL OR NEW.home = '''' THEN -- get qmail base dir from table constants NEW.home := get_constant(''qmailhome''); IF NEW.home ISNULL THEN RAISE EXCEPTION ''QMAIL home dir lookup failed on table constants''; END IF; SELECT INTO rec1 public_mail FROM zone WHERE name = NEW.domain AND public_mail; IF FOUND THEN -- public domain, create structured home dir -- NEW.home/NEW.domain/u/us/username RAISE NOTICE ''Zone % is public'', NEW.domain; SELECT INTO rec2 NEW.home || ''/'' || btrim(NEW.domain,'' '')::varchar || ''/'' || substring(NEW.username from 1 for 1) || ''/'' || substring(NEW.username from 1 for 2) || ''/'' || NEW.username AS home; NEW.home := rec2.home; ELSE -- private zone, set homedir to NEW.home/NEW.domain/username RAISE NOTICE ''Zone % is private'', NEW.domain; SELECT INTO rec3 NEW.home || ''/'' || btrim(NEW.domain,'' '')::varchar || ''/'' || NEW.username AS home; NEW.home := rec3.home; END IF; END IF; IF NEW.password ISNULL OR NEW.password = '''' THEN NEW.password := generate_password(); END IF; RETURN NEW; END IF; RAISE NOTICE ''qmail_account_check RETURNS NULL 2 for % @ %'', NEW.username,NEW.domain; RETURN NULL; END ' LANGUAGE 'plpgsql'; - -- Martin Edlman Fortech s.r.o, Litomysl Public PGP key: http://edas.visaci.cz/#keys -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE/WCDmoFlEKJy9loQRAhzLAJ0X5y+bbhG3MVih0acZvzuqGJ9KzgCfftZ5 DsPMUXkkwX1heP7VdN3aTro= =YIt6 -----END PGP SIGNATURE----- ---------------------------(end of broadcast)--------------------------- TIP 4: Don't 'kill -9' the postmaster