]> begriffs open source - ai-pg/blob - full-docs/src/sgml/html/limits.html
WIP: toc builder
[ai-pg] / full-docs / src / sgml / html / limits.html
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix K. PostgreSQL Limits</title><link rel="stylesheet" type="text/css" href="stylesheet.css" /><link rev="made" href="pgsql-docs@lists.postgresql.org" /><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><link rel="prev" href="docguide-style.html" title="J.6. Style Guide" /><link rel="next" href="acronyms.html" title="Appendix L. Acronyms" /></head><body id="docContent" class="container-fluid col-10"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="5" align="center">Appendix K. <span class="productname">PostgreSQL</span> Limits</th></tr><tr><td width="10%" align="left"><a accesskey="p" href="docguide-style.html" title="J.6. Style Guide">Prev</a> </td><td width="10%" align="left"><a accesskey="u" href="appendixes.html" title="Part VIII. Appendixes">Up</a></td><th width="60%" align="center">Part VIII. Appendixes</th><td width="10%" align="right"><a accesskey="h" href="index.html" title="PostgreSQL 18.0 Documentation">Home</a></td><td width="10%" align="right"> <a accesskey="n" href="acronyms.html" title="Appendix L. Acronyms">Next</a></td></tr></table><hr /></div><div class="appendix" id="LIMITS"><div class="titlepage"><div><div><h2 class="title">Appendix K. <span class="productname">PostgreSQL</span> Limits</h2></div></div></div><p>
3   <a class="xref" href="limits.html#LIMITS-TABLE" title="Table K.1. PostgreSQL Limitations">Table K.1</a> describes various hard limits of
4   <span class="productname">PostgreSQL</span>.  However, practical limits, such as
5   performance limitations or available disk space may apply before absolute
6   hard limits are reached.
7  </p><div class="table" id="LIMITS-TABLE"><p class="title"><strong>Table K.1. <span class="productname">PostgreSQL</span> Limitations</strong></p><div class="table-contents"><table class="table" summary="PostgreSQL Limitations" border="1"><colgroup><col /><col /><col /></colgroup><thead><tr><th>Item</th><th>Upper Limit</th><th>Comment</th></tr></thead><tbody><tr><td>database size</td><td>unlimited</td><td> </td></tr><tr><td>number of databases</td><td>4,294,950,911</td><td> </td></tr><tr><td>relations per database</td><td>1,431,650,303</td><td> </td></tr><tr><td>relation size</td><td>32 TB</td><td>with the default <code class="symbol">BLCKSZ</code> of 8192 bytes</td></tr><tr><td>rows per table</td><td>limited by the number of tuples that can fit onto 4,294,967,295 pages</td><td> </td></tr><tr><td>columns per table</td><td>1,600</td><td>further limited by tuple size fitting on a single page; see note
8      below</td></tr><tr><td>columns in a result set</td><td>1,664</td><td> </td></tr><tr><td>field size</td><td>1 GB</td><td> </td></tr><tr><td>indexes per table</td><td>unlimited</td><td>constrained by maximum relations per database</td></tr><tr><td>columns per index</td><td>32</td><td>can be increased by recompiling <span class="productname">PostgreSQL</span></td></tr><tr><td>partition keys</td><td>32</td><td>can be increased by recompiling <span class="productname">PostgreSQL</span></td></tr><tr><td>identifier length</td><td>63 bytes</td><td>can be increased by recompiling <span class="productname">PostgreSQL</span></td></tr><tr><td>function arguments</td><td>100</td><td>can be increased by recompiling <span class="productname">PostgreSQL</span></td></tr><tr><td>query parameters</td><td>65,535</td><td> </td></tr></tbody></table></div></div><br class="table-break" /><p>
9   The maximum number of columns for a table is further reduced as the tuple
10   being stored must fit in a single 8192-byte heap page.  For example,
11   excluding the tuple header, a tuple made up of 1,600 <code class="type">int</code> columns
12   would consume 6400 bytes and could be stored in a heap page, but a tuple of
13   1,600 <code class="type">bigint</code> columns would consume 12800 bytes and would
14   therefore not fit inside a heap page.
15   Variable-length fields of
16   types such as <code class="type">text</code>, <code class="type">varchar</code>, and <code class="type">char</code>
17   can have their values stored out of line in the table's TOAST table when the
18   values are large enough to require it.  Only an 18-byte pointer must remain
19   inside the tuple in the table's heap.  For shorter length variable-length
20   fields, either a 4-byte or 1-byte field header is used and the value is
21   stored inside the heap tuple.
22  </p><p>
23   Columns that have been dropped from the table also contribute to the maximum
24   column limit.  Moreover, although the dropped column values for newly
25   created tuples are internally marked as null in the tuple's null bitmap, the
26   null bitmap also occupies space.
27  </p><p>
28   Each table can store a theoretical maximum of 2^32 out-of-line values; see
29   <a class="xref" href="storage-toast.html" title="66.2. TOAST">Section 66.2</a> for a detailed discussion of out-of-line
30   storage. This limit arises from the use of a 32-bit OID to identify each
31   such value. The practical limit is significantly less than the theoretical
32   limit, because as the OID space fills up, finding an OID that is still free
33   can become expensive, in turn slowing down INSERT/UPDATE statements.
34   Typically, this is only an issue for tables containing many terabytes
35   of data; partitioning is a possible workaround.
36  </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="docguide-style.html" title="J.6. Style Guide">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendixes.html" title="Part VIII. Appendixes">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="acronyms.html" title="Appendix L. Acronyms">Next</a></td></tr><tr><td width="40%" align="left" valign="top">J.6. Style Guide </td><td width="20%" align="center"><a accesskey="h" href="index.html" title="PostgreSQL 18.0 Documentation">Home</a></td><td width="40%" align="right" valign="top"> Appendix L. Acronyms</td></tr></table></div></body></html>