Skip to content
← Catalog atlas / pg_database

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.

First seen PG 9.0Last seen PG 19Columns 18

Checked column by column against a PostgreSQL 18.6 instance · Raw measurement record ↗

Columns PostgreSQL 18

pg_database
COLUMNTYPEDESCRIPTION
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.

ColumnsTypeattnum
tableoidoid-6
cmaxcid-5
xmaxxid-4
cmincid-3
xminxid-2
ctidtid-1

Column evolution matrix

Hover a cell for the column type
PresentAdded / type or attribute changeRemoved
COLUMN9.09.19.29.39.49.59.610111213141516171819
oid
datname
datdba
encoding
datcollate
datctype
datistemplate
datallowconn
datconnlimit
datlastsysoid
datfrozenxid
dattablespace
datacl
datminmxid
datlocprovider
daticulocale
datcollversion
daticurules
dathasloginevt
datlocale

9.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 majors

PostgreSQL 19 ← 18

2 column description updates

PostgreSQL 17 ← 16

+ dathasloginevt+ datlocale− daticulocale2 column description updatesCatalog description updated

PostgreSQL 16 ← 15

+ daticurules

PostgreSQL 15 ← 14

+ datlocprovider+ daticulocale+ datcollversion− datlastsysoid~ datcollate: name → text~ datctype: name → text↕ Column order changed

PostgreSQL 14 ← 13

Catalog description updated

PostgreSQL 12 ← 11

~ oid: implicit → ordinary2 column description updates

PostgreSQL 11 ← 10

1 column description updates

PostgreSQL 10 ← 9.6

1 column description updates

PostgreSQL 9.6 ← 9.5

Catalog description updated

PostgreSQL 9.4 ← 9.3

1 column description updates

PostgreSQL 9.3 ← 9.2

+ datminmxid1 column description updates

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.