A coding agent is good at producing syntactically valid DDL. It is bad at knowing that your orders table has hundreds of millions of rows, that a reporting query holds a read lock for minutes, or that the default value it chose forces a full table rewrite. When a human writes a migration, that context usually travels with the person. When an agent writes it, the context has to be supplied and checked.
The failure mode is well documented. Adding a nullable column with no default is catalog-only and finishes in under a millisecond on modern PostgreSQL, yet the whole application can freeze because the ALTER TABLE waits behind an open transaction and blocks every query that arrives after it in the lock queue as described here. A regular CREATE INDEX takes a SHARE lock that conflicts with INSERT, UPDATE and DELETE for the whole build per this lock comparison, so an agent that writes CREATE INDEX on a large table can take writes offline for hours.
The good news is that the review is mechanical. You do not need to read the agent's reasoning. You need to check four things: which lock the statement takes, how long it holds it, what happens on timeout, and how to undo it. Everything below produces evidence for those four checks.



