Supported Versions: Current (17) / 16 / 15 / 14 / 13
Development Versions: devel
Unsupported versions: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4
This documentation is for an unsupported version of PostgreSQL.
You may want to view the same page for the current version, or one of the other supported versions listed above instead.

VII. Internals

This part contains assorted information that might be of use to PostgreSQL developers.

Table of Contents
44. Overview of PostgreSQL Internals
44.1. The Path of a Query
44.2. How Connections are Established
44.3. The Parser Stage
44.4. The PostgreSQL Rule System
44.5. Planner/Optimizer
44.6. Executor
45. System Catalogs
45.1. Overview
45.2. pg_aggregate
45.3. pg_am
45.4. pg_amop
45.5. pg_amproc
45.6. pg_attrdef
45.7. pg_attribute
45.8. pg_authid
45.9. pg_auth_members
45.10. pg_cast
45.11. pg_class
45.12. pg_constraint
45.13. pg_collation
45.14. pg_conversion
45.15. pg_database
45.16. pg_db_role_setting
45.17. pg_default_acl
45.18. pg_depend
45.19. pg_description
45.20. pg_enum
45.21. pg_extension
45.22. pg_foreign_data_wrapper
45.23. pg_foreign_server
45.24. pg_foreign_table
45.25. pg_index
45.26. pg_inherits
45.27. pg_language
45.28. pg_largeobject
45.29. pg_largeobject_metadata
45.30. pg_namespace
45.31. pg_opclass
45.32. pg_operator
45.33. pg_opfamily
45.34. pg_pltemplate
45.35. pg_proc
45.36. pg_range
45.37. pg_rewrite
45.38. pg_seclabel
45.39. pg_shdepend
45.40. pg_shdescription
45.41. pg_shseclabel
45.42. pg_statistic
45.43. pg_tablespace
45.44. pg_trigger
45.45. pg_ts_config
45.46. pg_ts_config_map
45.47. pg_ts_dict
45.48. pg_ts_parser
45.49. pg_ts_template
45.50. pg_type
45.51. pg_user_mapping
45.52. System Views
45.53. pg_available_extensions
45.54. pg_available_extension_versions
45.55. pg_cursors
45.56. pg_group
45.57. pg_indexes
45.58. pg_locks
45.59. pg_prepared_statements
45.60. pg_prepared_xacts
45.61. pg_roles
45.62. pg_rules
45.63. pg_seclabels
45.64. pg_settings
45.65. pg_shadow
45.66. pg_stats
45.67. pg_tables
45.68. pg_timezone_abbrevs
45.69. pg_timezone_names
45.70. pg_user
45.71. pg_user_mappings
45.72. pg_views
46. Frontend/Backend Protocol
46.1. Overview
46.2. Message Flow
46.3. Streaming Replication Protocol
46.4. Message Data Types
46.5. Message Formats
46.6. Error and Notice Message Fields
46.7. Summary of Changes since Protocol 2.0
47. PostgreSQL Coding Conventions
47.1. Formatting
47.2. Reporting Errors Within the Server
47.3. Error Message Style Guide
48. Native Language Support
48.1. For the Translator
48.2. For the Programmer
49. Writing A Procedural Language Handler
50. Writing A Foreign Data Wrapper
50.1. Foreign Data Wrapper Functions
50.2. Foreign Data Wrapper Callback Routines
50.3. Foreign Data Wrapper Helper Functions
50.4. Foreign Data Wrapper Query Planning
51. Genetic Query Optimizer
51.1. Query Handling as a Complex Optimization Problem
51.2. Genetic Algorithms
51.3. Genetic Query Optimization (GEQO) in PostgreSQL
51.4. Further Reading
52. Index Access Method Interface Definition
52.1. Catalog Entries for Indexes
52.2. Index Access Method Functions
52.3. Index Scanning
52.4. Index Locking Considerations
52.5. Index Uniqueness Checks
52.6. Index Cost Estimation Functions
53. GiST Indexes
53.1. Introduction
53.2. Extensibility
53.3. Implementation
53.4. Examples
54. SP-GiST Indexes
54.1. Introduction
54.2. Extensibility
54.3. Implementation
54.4. Examples
55. GIN Indexes
55.1. Introduction
55.2. Extensibility
55.3. Implementation
55.4. GIN Tips and Tricks
55.5. Limitations
55.6. Examples
56. Database Physical Storage
56.1. Database File Layout
56.2. TOAST
56.3. Free Space Map
56.4. Visibility Map
56.5. The Initialization Fork
56.6. Database Page Layout
57. BKI Backend Interface
57.1. BKI File Format
57.2. BKI Commands
57.3. Structure of the Bootstrap BKI File
57.4. Example
58. How the Planner Uses Statistics
58.1. Row Estimation Examples
58.2. Planner Statistics and Security