PostgreSQL 19 ← 18
SYSTEM CATALOG · System catalog
pg_database
The catalog pg_database stores information about the available databases. Databases are created with the CREATE DATABASE command. Consult Chapter 22 for details about the meaning of some of the parameters. Unlike most system catalogs, pg_database is shared across all databases of a cluster: there is only one copy of pg_database per cluster, not one per database.
Checked column by column against a PostgreSQL 18.6 instance · Raw measurement record ↗
Columns PostgreSQL 18
pg_database| COLUMN | TYPE | DESCRIPTION |
|---|---|---|
oid |
oidNOT NULL |
Row identifier |
datname |
nameNOT NULL |
Database name |
datdba |
oidNOT NULL |
Owner of the database, usually the user who created itReferences:pg_authid.oid |
encoding |
integerNOT NULLDocumented as:int4 |
Character encoding for this database (pg_encoding_to_char() can translate this number to the encoding name) |
datlocprovider |
"char"NOT NULLDocumented as:char |
Locale provider for this database: b = builtin, c = libc, i = icu |
datistemplate |
booleanNOT NULLDocumented as:bool |
If true, then this database can be cloned by any user with CREATEDB privileges; if false, then only superusers or the owner of the database can clone it. |
datallowconn |
booleanNOT NULLDocumented as:bool |
If false then no one can connect to this database. This is used to protect the template0 database from being altered. |
dathasloginevt |
booleanNOT NULLDocumented as:bool |
Indicates that there are login event triggers defined for this database. This flag is used to avoid extra lookups on the pg_event_trigger table during each backend startup. This flag is used internally by PostgreSQL and should not be manually altered or read for monitoring purposes. |
datconnlimit |
integerNOT NULLDocumented as:int4 |
Sets maximum number of concurrent connections that can be made to this database. -1 means no limit, -2 indicates the database is invalid. |
datfrozenxid |
xidNOT NULL |
All transaction IDs before this one have been replaced with a permanent (“frozen”) transaction ID in this database. This is used to track whether the database needs to be vacuumed in order to prevent transaction ID wraparound or to allow pg_xact to be shrunk. It is the minimum of the per-table pg_class.relfrozenxid values. |
datminmxid |
xidNOT NULL |
All multixact IDs before this one have been replaced with a transaction ID in this database. This is used to track whether the database needs to be vacuumed in order to prevent multixact ID wraparound or to allow pg_multixact to be shrunk. It is the minimum of the per-table pg_class.relminmxid values. |
dattablespace |
oidNOT NULL |
The default tablespace for the database. Within this database, all tables for which pg_class.reltablespace is zero will be stored in this tablespace; in particular, all the non-shared system catalogs will be there.References:pg_tablespace.oid |
datcollate |
textNOT NULL |
LC_COLLATE for this database |
datctype |
textNOT NULL |
LC_CTYPE for this database |
datlocale |
text |
Collation provider locale name for this database. If the provider is libc, datlocale is NULL; datcollate and datctype are used instead. |
daticurules |
text |
ICU collation rules for this database |
datcollversion |
text |
Provider-specific version of the collation. This is recorded when the database is created and then checked when it is used, to detect changes in the collation definition that could lead to data corruption. |
datacl |
aclitem[] |
Access privileges; see Section 5.8 for details |
Columns marked "implicit" are not included in SELECT *; some early statistics views are completed from same-version source, and the extra provenance is shown in the column description.
Common system columns 6
System attributes PostgreSQL provides, normally not expanded by SELECT *. Kept separately so they are not mixed in with ordinary columns.
| Columns | Type | attnum |
|---|---|---|
tableoid | oid | -6 |
cmax | cid | -5 |
xmax | xid | -4 |
cmin | cid | -3 |
xmin | xid | -2 |
ctid | tid | -1 |
Column evolution matrix
Hover a cell for the column type9.0 is the coverage baseline; a column already present in the baseline is not marked as added. The matrix aligns columns by name, so a rename appears as the old column removed and a new column added.
Evolution timeline
Changes between adjacent majorsPostgreSQL 17 ← 16
PostgreSQL 16 ← 15
PostgreSQL 15 ← 14
PostgreSQL 14 ← 13
PostgreSQL 12 ← 11
PostgreSQL 11 ← 10
PostgreSQL 10 ← 9.6
PostgreSQL 9.6 ← 9.5
PostgreSQL 9.4 ← 9.3
PostgreSQL 9.3 ← 9.2
Compare any two versions
Pick two versions to see added, removed, and retyped columns. The interactive comparison needs JavaScript; the evolution timeline reads fine without it.