CREATE TABLE rate ( id SERIAL UNIQUE NOT NULL, description TEXT, pattern TEXT NOT NULL, prefixlen INTEGER NOT NULL DEFAULT 0, primary key(id) ); CREATE FUNCTION update_prefixlen() RETURNS opaque AS ' DECLARE BEGIN UPDATE rate SET prefixlen = length(pattern) WHERE id = NEW.id; RETURN NEW; END; ' LANGUAGE plpgsql; CREATE TRIGGER set_prefixlen AFTER INSERT OR UPDATE ON rate FOR EACH STATEMENT EXECUTE PROCEDURE update_prefixlen(); test=> INSERT INTO rate (description, pattern) VALUES ('test 1', 'abc'); ERROR: record "new" is not assigned yet DETAIL: The tuple structure of a not-yet-assigned record is indeterminate. CONTEXT: PL/pgSQL function "update_prefixlen" line 3 at SQL statement