Quick answer
PostgreSQL does not publish one simple maximum row value. A table can have up to 1,600 columns, an individual field is capped at 1 GB, and the in-page tuple must still fit the heap-page rules.
Verified Aug 22, 2026Official source
Current limits
| Constraint | Current value | Scope | Verified source |
|---|---|---|---|
| Field sizeVariable-length values can be stored out of line with TOAST; practical limits may be lower. | 1 GB | PostgreSQL 18 | PostgreSQL Global Development GroupAug 22, 2026 |
| Columns per tableFurther limited by the requirement that the stored tuple fit on a single heap page; dropped columns still count. | 1,600 | PostgreSQL 18 | PostgreSQL Global Development GroupAug 22, 2026 |
| Identifier lengthCan be changed only by recompiling PostgreSQL. | 63 bytes | PostgreSQL 18 | PostgreSQL Global Development GroupAug 22, 2026 |
Why does this limit matter?
Large variable-length values can move to TOAST storage, leaving a pointer in the heap tuple; fixed-width column layouts cannot rely on that behavior.
Dropped columns continue to count toward the column limit because their positions remain in the table's physical history.
What should you check?
- Confirm the server major version.
- Inspect fixed-width versus variable-length column types.
- Measure actual tuple and TOAST behavior on representative data rather than designing to the theoretical ceiling.
Important caveats
- These are PostgreSQL 18 engine limits; build options can change some compiled ceilings.
- Practical performance and disk constraints usually arrive before theoretical maxima.
HyperObserve reports the documented platform constraint. Your application, SDK, gateway, provider, region, or account can impose a lower effective limit.
Related