The following table describes the limits of PostgreSQL
Table B.1. PostgreSQL limitations
| Item | Limit | Comment | 
|---|---|---|
| Maximum Database Size | Unlimited | |
| Maximum Number of Databases | Unlimited | |
| Maximum Relation Size | 32 TB | Limited to 2^32 - 1 pages per relation. | 
| Maximum Columns per Table | 1600 | Further limited by tuple size fitting on a single page. See note below | 
| Maximum Field Size | 1 GB | |
| Maximum Identifier Length | 63 characters | Can be increased by recompiling PostgreSQL | 
| Maximum Rows per Table | Unlimited | |
| Maximum Indexes per Table | Unlimited | |
| Maximum Indexed Columns | 32 | Can be increased by recompiling PostgreSQL. Limit includes
      any INCLUDE columns | 
| Maximum Partition Keys | 32 | Can be increased by recompiling PostgreSQL | 
| Maximum Relations per Database | Unlimited | |
| Maximum Partitions per Partitioned Relations | 268,435,456 | May be increased by using sub-partitioning | 
     The maximum number of columns for a table is further reduced as the tuple
     being stored must fit on a single heap page.  Variable length fields such
     as TEXT, VARCHAR and
     CHAR can have their values stored out of line in the
     table's TOAST table when the values are large enough to require it.  Only
     an 18 byte pointer must remain inside the tuple in the table's heap.  For
     shorter length variable length fields either a 4 byte or 1 byte field
     header is used, and the value is stored inside the heap tuple.  Often this
     can mean the actual maximum number of columns that you can store inside a
     table is further reduced as the tuple can become too large to fit inside a
     single 8192 byte heap page.  For example, excluding the tuple header, a
     tuple made up of 1600 INT columns would consume 6400 bytes and could be
     stored in a heap page, but a tuple of 1600 BIGINT columns would consume
     12800 bytes, therefore not fit inside a heap page.
    
Columns which have been dropped from the table also contribute to the maximum column limit, although the dropped column values for newly created tuples are internally marked as NULL in the tuples null bitmap, which does occupy space.