Restrict PostgreSQL row edits by username
A minimal example on how to limit row edits on a PostgreSQL table to a user matching a username value in one of the row’s columns.
CREATE OR REPLACE FUNCTION my_schema.edit_owned()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
BEGIN
IF OLD."allowed_user" != current_user
AND current_user NOT IN ('postgres','other_privileged_user')
THEN RAISE EXCEPTION 'You are not allowed modify this row';
ELSIF (TG_OP = 'UPDATE')
THEN RETURN NEW;
ELSIF (TG_OP = 'DELETE')
THEN RETURN OLD;
END IF;
END;
$function$;
CREATE TRIGGER MyTable__edit_owned BEFORE DELETE OR UPDATE ON my_schema."MyTable" FOR EACH ROW EXECUTE PROCEDURE my_schema.edit_owned();