Which of the following is the correct way to define a trigger function in PostgreSQL for audit logging?
ACREATE PROCEDURE audit_log_func() AS $$ BEGIN INSERT INTO audit_table VALUES (OLD.*); END; $$ LANGUAGE sql;
BCREATE FUNCTION audit_log_func() RETURNS trigger AS $$ BEGIN INSERT INTO audit_table VALUES (NEW.*); RETURN NEW; END; $$ LANGUAGE plpgsql;
CCREATE FUNCTION audit_log_func() RETURNS void AS $$ BEGIN INSERT INTO audit_table VALUES (NEW.*); END; $$ LANGUAGE plpgsql;
DCREATE FUNCTION audit_log_func() RETURNS trigger AS $$ BEGIN UPDATE audit_table SET data = NEW.data; RETURN OLD; END; $$ LANGUAGE plpgsql;