this a test case :
CREATE TABLE tab ( _id bigserial NOT NULL, _name text, CONSTRAINT tab_pkey PRIMARY KEY (_id) ); CREATE TABLE tab_s1 ( CONSTRAINT tab_s1_check CHECK (1 = 1) ) INHERITS (tab); CREATE OR REPLACE VIEW v_tab AS SELECT tab._id, tab._name FROM tab; CREATE OR REPLACE FUNCTION tab_insert() RETURNS trigger AS $BODY$ BEGIN INSERT INTO tab_s1 VALUES ((NEW).*); RETURN NEW; END $BODY$ LANGUAGE plpgsql; CREATE TRIGGER tab_trigger INSTEAD OF INSERT ON v_tab FOR EACH ROW EXECUTE PROCEDURE tab_insert(); -- the query fail because _id is null insert into v_tab(_name) values ('uuuu');