Supported Versions: Current (16) / 15 / 14 / 13 / 12
Development Versions: devel
Unsupported versions: 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
43. Overview of PostgreSQL Internals
43.1. The Path of a Query
43.2. How Connections are Established
43.3. The Parser Stage
43.4. The PostgreSQL Rule System
43.5. Planner/Optimizer
43.6. Executor
44. System Catalogs
44.1. Overview
44.2. pg_aggregate
44.3. pg_am
44.4. pg_amop
44.5. pg_amproc
44.6. pg_attrdef
44.7. pg_attribute
44.8. pg_authid
44.9. pg_auth_members
44.10. pg_cast
44.11. pg_class
44.12. pg_constraint
44.13. pg_conversion
44.14. pg_database
44.15. pg_depend
44.16. pg_description
44.17. pg_enum
44.18. pg_foreign_data_wrapper
44.19. pg_foreign_server
44.20. pg_index
44.21. pg_inherits
44.22. pg_language
44.23. pg_largeobject
44.24. pg_listener
44.25. pg_namespace
44.26. pg_opclass
44.27. pg_operator
44.28. pg_opfamily
44.29. pg_pltemplate
44.30. pg_proc
44.31. pg_rewrite
44.32. pg_shdepend
44.33. pg_shdescription
44.34. pg_statistic
44.35. pg_tablespace
44.36. pg_trigger
44.37. pg_ts_config
44.38. pg_ts_config_map
44.39. pg_ts_dict
44.40. pg_ts_parser
44.41. pg_ts_template
44.42. pg_type
44.43. pg_user_mapping
44.44. System Views
44.45. pg_cursors
44.46. pg_group
44.47. pg_indexes
44.48. pg_locks
44.49. pg_prepared_statements
44.50. pg_prepared_xacts
44.51. pg_roles
44.52. pg_rules
44.53. pg_settings
44.54. pg_shadow
44.55. pg_stats
44.56. pg_tables
44.57. pg_timezone_abbrevs
44.58. pg_timezone_names
44.59. pg_user
44.60. pg_user_mappings
44.61. pg_views
45. Frontend/Backend Protocol
45.1. Overview
45.2. Message Flow
45.3. Message Data Types
45.4. Message Formats
45.5. Error and Notice Message Fields
45.6. Summary of Changes since Protocol 2.0
46. PostgreSQL Coding Conventions
46.1. Formatting
46.2. Reporting Errors Within the Server
46.3. Error Message Style Guide
47. Native Language Support
47.1. For the Translator
47.2. For the Programmer
48. Writing A Procedural Language Handler
49. Genetic Query Optimizer
49.1. Query Handling as a Complex Optimization Problem
49.2. Genetic Algorithms
49.3. Genetic Query Optimization (GEQO) in PostgreSQL
49.4. Further Reading
50. Index Access Method Interface Definition
50.1. Catalog Entries for Indexes
50.2. Index Access Method Functions
50.3. Index Scanning
50.4. Index Locking Considerations
50.5. Index Uniqueness Checks
50.6. Index Cost Estimation Functions
51. GiST Indexes
51.1. Introduction
51.2. Extensibility
51.3. Implementation
51.4. Examples
51.5. Crash Recovery
52. GIN Indexes
52.1. Introduction
52.2. Extensibility
52.3. Implementation
52.4. GIN tips and tricks
52.5. Limitations
52.6. Examples
53. Database Physical Storage
53.1. Database File Layout
53.2. TOAST
53.3. Free Space Map
53.4. Visibility Map
53.5. Database Page Layout
54. BKI Backend Interface
54.1. BKI File Format
54.2. BKI Commands
54.3. Structure of the Bootstrap BKI File
54.4. Example
55. How the Planner Uses Statistics
55.1. Row Estimation Examples