Add primary keys and unique constraints to system catalogs

Peter Eisentraut <peter@eisentraut.org>

Commit: dfb75e478cacb33d277432e0df5e2f9a2a2b52d9
Author: Peter Eisentraut <peter@eisentraut.org>
Date: 2021-01-30T18:44:29Z
Releases: 14.0
Add primary keys and unique constraints to system catalogs

For those system catalogs that have a unique indexes, make a primary
key and unique constraint, using ALTER TABLE ... PRIMARY KEY/UNIQUE
USING INDEX.

This can be helpful for GUI tools that look for a primary key, and it
might in the future allow declaring foreign keys, for making schema
diagrams.

The constraint creation statements are automatically created by
genbki.pl from DECLARE_UNIQUE_INDEX directives.  To specify which one
of the available unique indexes is the primary key, use the new
directive DECLARE_UNIQUE_INDEX_PKEY instead.  By convention, we
usually make a catalog's OID column its primary key, if it has one.

Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://www.postgresql.org/message-id/flat/dc5f44d9-5ec1-a596-0251-dadadcdede98@2ndquadrant.com

Files

PathChange+/−
src/backend/catalog/Catalog.pm modified +6 −5
src/backend/catalog/genbki.pl modified +23 −0
src/backend/catalog/.gitignore modified +1 −0
src/backend/catalog/Makefile modified +5 −4
src/bin/initdb/initdb.c modified +14 −46
src/include/catalog/genbki.h modified +8 −4
src/include/catalog/pg_aggregate.h modified +1 −1
src/include/catalog/pg_am.h modified +1 −1
src/include/catalog/pg_amop.h modified +1 −1
src/include/catalog/pg_amproc.h modified +1 −1
src/include/catalog/pg_attrdef.h modified +1 −1
src/include/catalog/pg_attribute.h modified +1 −1
src/include/catalog/pg_authid.h modified +1 −1
src/include/catalog/pg_auth_members.h modified +1 −1
src/include/catalog/pg_cast.h modified +1 −1
src/include/catalog/pg_class.h modified +1 −1
src/include/catalog/pg_collation.h modified +1 −1
src/include/catalog/pg_constraint.h modified +1 −1
src/include/catalog/pg_conversion.h modified +1 −1
src/include/catalog/pg_database.h modified +1 −1
src/include/catalog/pg_db_role_setting.h modified +1 −1
src/include/catalog/pg_default_acl.h modified +1 −1
src/include/catalog/pg_description.h modified +1 −1
src/include/catalog/pg_enum.h modified +1 −1
src/include/catalog/pg_event_trigger.h modified +1 −1
src/include/catalog/pg_extension.h modified +1 −1
src/include/catalog/pg_foreign_data_wrapper.h modified +1 −1
src/include/catalog/pg_foreign_server.h modified +1 −1
src/include/catalog/pg_foreign_table.h modified +1 −1
src/include/catalog/pg_index.h modified +1 −1
src/include/catalog/pg_inherits.h modified +1 −1
src/include/catalog/pg_init_privs.h modified +1 −1
src/include/catalog/pg_language.h modified +1 −1
src/include/catalog/pg_largeobject.h modified +1 −1
src/include/catalog/pg_largeobject_metadata.h modified +1 −1
src/include/catalog/pg_namespace.h modified +1 −1
src/include/catalog/pg_opclass.h modified +1 −1
src/include/catalog/pg_operator.h modified +1 −1
src/include/catalog/pg_opfamily.h modified +1 −1
src/include/catalog/pg_partitioned_table.h modified +1 −1
src/include/catalog/pg_policy.h modified +1 −1
src/include/catalog/pg_proc.h modified +1 −1
src/include/catalog/pg_publication.h modified +1 −1
src/include/catalog/pg_publication_rel.h modified +1 −1
src/include/catalog/pg_range.h modified +1 −1
src/include/catalog/pg_replication_origin.h modified +1 −1
src/include/catalog/pg_rewrite.h modified +1 −1
src/include/catalog/pg_seclabel.h modified +1 −1
src/include/catalog/pg_sequence.h modified +1 −1
src/include/catalog/pg_shdescription.h modified +1 −1
src/include/catalog/pg_shseclabel.h modified +1 −1
src/include/catalog/pg_statistic_ext_data.h modified +1 −1
src/include/catalog/pg_statistic_ext.h modified +1 −1
src/include/catalog/pg_statistic.h modified +1 −1
src/include/catalog/pg_subscription.h modified +1 −1
src/include/catalog/pg_subscription_rel.h modified +1 −1
src/include/catalog/pg_tablespace.h modified +1 −1
src/include/catalog/pg_transform.h modified +1 −1
src/include/catalog/pg_trigger.h modified +1 −1
src/include/catalog/pg_ts_config.h modified +1 −1
src/include/catalog/pg_ts_config_map.h modified +1 −1
src/include/catalog/pg_ts_dict.h modified +1 −1
src/include/catalog/pg_ts_parser.h modified +1 −1
src/include/catalog/pg_ts_template.h modified +1 −1
src/include/catalog/pg_type.h modified +1 −1
src/include/catalog/pg_user_mapping.h modified +1 −1
src/test/modules/unsafe_tests/expected/alter_system_table.out modified +3 −3
src/test/modules/unsafe_tests/sql/alter_system_table.sql modified +2 −3
src/test/regress/expected/misc_sanity.out modified +30 −1
src/test/regress/sql/misc_sanity.sql modified +24 −0
src/tools/msvc/clean.bat modified +1 −0

Discussion