MP063WARNINGFree

warn-do-block-ddl

What It Detects

DO block contains DDL that bypasses static analysis — lock impact cannot be determined.

Why It's Dangerous

PL/pgSQL DO blocks execute arbitrary code that cannot be analyzed by SQL linters. DDL inside DO blocks (ALTER TABLE, CREATE INDEX, DROP) acquires the same locks as direct SQL, but the operations are invisible to static analysis. Extract DDL from DO blocks into direct SQL statements for full safety analysis.

Bad Example

DO $$
BEGIN
  ALTER TABLE users ADD COLUMN age INTEGER;
  CREATE INDEX idx_users_age ON users (age);
END;
$$;

Good Example

-- Extract DDL into direct SQL statements
ALTER TABLE users ADD COLUMN age INTEGER;
CREATE INDEX CONCURRENTLY idx_users_age ON users (age);

Configuration

Disable this rule:

# .migrationpilotrc.yml
rules:
  MP063: false

Or change its severity:

# .migrationpilotrc.yml
rules:
  MP063:
    severity: warning