## Chapter 50. System Catalogs

The system catalogs are the place where a relational database management system stores schema metadata, such as information about tables and columns, and internal bookkeeping information. PostgreSQL's system catalogs are regular tables. You can drop and recreate the tables, add columns, insert and update values, and severely mess up your system that way. Normally, one should not change the system catalogs by hand, there are normally SQL commands to do that. (For example, `CREATE DATABASE` inserts a row into the `pg_database` catalog — and actually creates the database on disk.) There are some exceptions for particularly esoteric operations, but many of those have been made available as SQL commands over time, and so the need for direct manipulation of the system catalogs is ever decreasing.

## 50.1. Overview

Table 50.1 lists the system catalogs. More detailed documentation of each catalog follows below.

Most system catalogs are copied from the template database during database creation and are thereafter database-specific. A few catalogs are physically shared across all databases in a cluster; these are noted in the descriptions of the individual catalogs.

Table 50.1. System Catalogs

Catalog Name | Purpose
--- | ---
`pg_aggregate` | aggregate functions
`pg_am` | index access methods
`pg_amop` | access method operators
`pg_amproc` | access method support procedures
`pg_attrdef` | column default values
`pg_attribute` | table columns (“attributes”)
`pg_authid` | authorization identifiers (roles)
`pg_auth_members` | authorization identifier membership relationships
`pg_cast` | casts (data type conversions)
`pg_class` | tables, indexes, sequences, views (“relations”)
`pg_collation` | collations (locale information)
`pg_constraint` | check constraints, unique constraints, primary key constraints, foreign key constraints
`pg_conversion` | encoding conversion information
`pg_database` | databases within this database cluster
`pg_db_role_setting` | per-role and per-database settings
`pg_default_acl` | default privileges for object types
`pg_depend` | dependencies between database objects
`pg_description` | descriptions or comments on database objects
`pg_enum` | enum label and value definitions
`pg_event_trigger` | event triggers
`pg_extension` | installed extensions
`pg_foreign_data_wrapper` | foreign-data wrapper definitions
`pg_foreign_server` | foreign server definitions
`pg_foreign_table` | additional foreign table information
`pg_index` | additional index information
`pg_inherits` | table inheritance hierarchy
`pg_init_privs` | object initial privileges
`pg_language` | languages for writing functions
`pg_largeobject` | data pages for large objects
`pg_largeobject_metadata` | metadata for large objects
`pg_namespace` | schemas
`pg_opclass` | access method operator classes
`pg_operator` | operators
`pg_opfamily` | access method operator families
`pg_pltemplate` | template data for procedural languages
`pg_policy` | row-security policies
`pg_proc` | functions and procedures
`pg_range` | information about range types
`pg_replication_origin` | registered replication origins
`pg_rewrite` | query rewrite rules
`pg_seclabel` | security labels on database objects
`pg_shdepend` | dependencies on shared objects
`pg_shdescription` | comments on shared objects
`pg_shseclabel` | security labels on shared database objects
`pg_statistic` | planner statistics
`pg_tablespace` | tablespaces within this database cluster
`pg_transform` | transforms (data type to procedural language conversions)
`pg_trigger` | triggers
`pg_ts_config` | text search configurations
`pg_ts_config_map` | text search configurations' token mappings
`pg_ts_dict` | text search dictionaries
`pg_ts_parser` | text search parsers
`pg_ts_template` | text search templates
`pg_type` | data types
`pg_user_mapping` | mappings of users to foreign servers