requireIdleInTransactionTimeout¶
Group safety · Migrations only · Since 0.25.0
Diagnostic lint/requireIdleInTransactionTimeout
Sources: inspired by pgfence/missing-idle-timeout
Description¶
Dangerous lock statements should be preceded by SET idle_in_transaction_session_timeout.
A transaction holding dangerous locks that goes idle (e.g., due to application errors)
will block other operations indefinitely. Setting idle_in_transaction_session_timeout
ensures the session is terminated if it sits idle too long.
Examples¶
Invalid¶
ALTER TABLE users ADD COLUMN email TEXT;
code-block.sql:1:1 lint/requireIdleInTransactionTimeout ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
! Statement takes a dangerous lock without idle_in_transaction_session_timeout set.
> 1 │ ALTER TABLE users ADD COLUMN email TEXT;
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2 │
i Run SET idle_in_transaction_session_timeout = '...' before this statement to prevent idle transactions from holding locks.
Valid¶
CREATE INDEX CONCURRENTLY users_email_idx ON users(email);
How to configure¶
{
"linter": {
"rules": {
"requireIdleInTransactionTimeout": "error"
}
}
}
How to suppress¶
Suppress this diagnostic with a comment:
-- pgls-ignore requireIdleInTransactionTimeout