This page consolidates all operational limits, quotas, and safety boundaries across DB9. Most limits are fixed. Where a limit is configurable by the platform operator (not the end user), it is marked accordingly.
Configurable by operator. Lower it per session with SET statement_timeout; for a role that is not a superuser, SET statement_timeout to 0 or above 12 hours fails with 42501. Over the HTTP SQL API a request returns Error 504 after about 15 seconds whatever the setting
Idle-in-transaction timeout
300 seconds
Configurable by operator; SHOW idle_in_transaction_session_timeout reports the live value
Not applied: a table or column name longer than 63 bytes is stored and must be referenced in full, where PostgreSQL truncates it to 63 bytes. SHOW max_identifier_length still reports 63
Max recursive CTE iterations
1,000
Max view expansion depth
64
Max generate_series rows
1,000,000
Max NUMERIC precision
1,000 in a column definition (CREATE TABLE or ADD COLUMN with NUMERIC(1001) fails with XX000 internal error; a cast such as ::numeric(1001) is accepted). A stored value holds at most 28–29 significant digits whatever the declaration — see Data types
Max NUMERIC display scale
28
Max string output
~1 GB
Sort memory (db9.max_sort_bytes)
128 MB default (configurable via GUC; work_mem is accepted but has no effect)
DML table scan max rows
10,000 default (configurable via GUC). Caps each auxiliary source of an UPDATE ... FROM / DELETE ... USINGand their combined cross-product
Index / primary key entry size
~6,963 bytes per encoded key. A longer value can be stored but not indexed — see CREATE INDEX