https://www.postgresql.org/docs/current/plpgsql-trigger.html
> > Row-level triggers fired BEFORE can return null to signal the trigger > manager to skip the rest of the operation for this row (i.e., subsequent > triggers are not fired, and the INSERT/UPDATE/DELETE does not occur for > this row). If a nonnull value is returned then the operation proceeds with > that row value. *Returning a row value different from the original value > of NEW alters the row that will be inserted or updated. *Thus, if the > trigger function wants the triggering action to succeed normally without > altering the row value, NEW (or a value equal thereto) has to be > returned. To alter the row to be stored, it is possible to replace single > values directly in NEW and return the modified NEW, or to build a > complete new record/row to return. In the case of a before-trigger on > DELETE, the returned value has no direct effect, but it has to be nonnull > to allow the trigger action to proceed. Note that NEW is null in DELETE > triggers, so returning that is usually not sensible. The usual idiom in > DELETE triggers is to return OLD. > I just want confirm the highlighted sentence is equivalent as the following sql code: begin; > CREATE TABLE documents ( > docdesc text, > misc text, > modification_time timestamp with time zone DEFAULT now() > ); > CREATE FUNCTION documents_update_mod_time() RETURNS trigger > AS $$ > begin > new.modification_time := now(); > return new; > end > $$ > LANGUAGE plpgsql; > CREATE TRIGGER documents_modification_time > BEFORE INSERT OR UPDATE ON documents > FOR EACH ROW > EXECUTE PROCEDURE documents_update_mod_time(); > commit; > as a non-native english speaker, I kind of feel this sentence quite hard to understand....