no-database-functions
Prefer explicit application behavior to stored SQL functions.
Why
Under a single-writer application architecture, stored functions can obscure application behavior. Database-owned invariants and expression indexes may still require approved stored functions.
Fix
Prefer declarative constraints or explicit transactional application behavior where equivalent. Preserve transaction atomicity and database-enforced integrity; use an exact SARJ120 suppression for an approved database-owned invariant or compatibility exception.
Examples
CREATE FUNCTION fail_counter () RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN RAISE EXCEPTION 'failure'; END $$;ALTER TABLE batchADD CONSTRAINT fail_counter CHECK (FALSE) NOT VALID;