Part VII. Internals

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

Table of Contents

49. Overview of Postgres Pro Internals
49.1. The Path of a Query
49.2. How Connections Are Established
49.3. The Parser Stage
49.4. The Postgres Pro Rule System
49.5. Planner/Optimizer
49.6. Executor
50. System Catalogs
50.1. Overview
50.2. pg_aggregate
50.3. pg_am
50.4. pg_amop
50.5. pg_amproc
50.6. pg_attrdef
50.7. pg_attribute
50.8. pg_authid
50.9. pg_auth_members
50.10. pg_cast
50.11. pg_class
50.12. pg_collation
50.13. pg_constraint
50.14. pg_conversion
50.15. pg_database
50.16. pg_db_role_setting
50.17. pg_default_acl
50.18. pg_depend
50.19. pg_description
50.20. pg_enum
50.21. pg_event_trigger
50.22. pg_extension
50.23. pg_foreign_data_wrapper
50.24. pg_foreign_server
50.25. pg_foreign_table
50.26. pg_index
50.27. pg_inherits
50.28. pg_init_privs
50.29. pg_language
50.30. pg_largeobject
50.31. pg_largeobject_metadata
50.32. pg_namespace
50.33. pg_opclass
50.34. pg_operator
50.35. pg_opfamily
50.36. pg_partitioned_table
50.37. pg_policy
50.38. pg_proc
50.39. pg_publication
50.40. pg_publication_rel
50.41. pg_range
50.42. pg_replication_origin
50.43. pg_rewrite
50.44. pg_seclabel
50.45. pg_sequence
50.46. pg_shdepend
50.47. pg_shdescription
50.48. pg_shseclabel
50.49. pg_statistic
50.50. pg_statistic_ext
50.51. pg_statistic_ext_data
50.52. pg_subscription
50.53. pg_subscription_rel
50.54. pg_tablespace
50.55. pg_transform
50.56. pg_trigger
50.57. pg_ts_config
50.58. pg_ts_config_map
50.59. pg_ts_dict
50.60. pg_ts_parser
50.61. pg_ts_template
50.62. pg_type
50.63. pg_user_mapping
50.64. System Views
50.65. pg_available_extensions
50.66. pg_available_extension_versions
50.67. pg_config
50.68. pg_cursors
50.69. pg_file_settings
50.70. pg_group
50.71. pg_hba_file_rules
50.72. pg_indexes
50.73. pg_locks
50.74. pg_matviews
50.75. pg_policies
50.76. pg_prepared_statements
50.77. pg_prepared_xacts
50.78. pg_publication_tables
50.79. pg_replication_origin_status
50.80. pg_replication_slots
50.81. pg_roles
50.82. pg_rules
50.83. pg_seclabels
50.84. pg_sequences
50.85. pg_settings
50.86. pg_shadow
50.87. pg_shmem_allocations
50.88. pg_stats
50.89. pg_stats_ext
50.90. pg_tables
50.91. pg_timezone_abbrevs
50.92. pg_timezone_names
50.93. pg_user
50.94. pg_user_mappings
50.95. pg_views
51. Frontend/Backend Protocol
51.1. Overview
51.2. Message Flow
51.3. SASL Authentication
51.4. Streaming Replication Protocol
51.5. Logical Streaming Replication Protocol
51.6. Message Data Types
51.7. Message Formats
51.8. Error and Notice Message Fields
51.9. Logical Replication Message Formats
51.10. Summary of Changes since Protocol 2.0
52. Writing a Procedural Language Handler
53. Writing a Foreign Data Wrapper
53.1. Foreign Data Wrapper Functions
53.2. Foreign Data Wrapper Callback Routines
53.3. Foreign Data Wrapper Helper Functions
53.4. Foreign Data Wrapper Query Planning
53.5. Row Locking in Foreign Data Wrappers
54. Writing a Table Sampling Method
54.1. Sampling Method Support Functions
55. Writing a Custom Scan Provider
55.1. Creating Custom Scan Paths
55.2. Creating Custom Scan Plans
55.3. Executing Custom Scans
56. Genetic Query Optimizer
56.1. Query Handling as a Complex Optimization Problem
56.2. Genetic Algorithms
56.3. Genetic Query Optimization (GEQO) in Postgres Pro
56.4. Further Reading
57. Table Access Method Interface Definition
58. Index Access Method Interface Definition
58.1. Basic API Structure for Indexes
58.2. Index Access Method Functions
58.3. Index Scanning
58.4. Index Locking Considerations
58.5. Index Uniqueness Checks
58.6. Index Cost Estimation Functions
59. Generic WAL Records
60. B-Tree Indexes
60.1. Introduction
60.2. Behavior of B-Tree Operator Classes
60.3. B-Tree Support Functions
60.4. Implementation
61. GiST Indexes
61.1. Introduction
61.2. Built-in Operator Classes
61.3. Extensibility
61.4. Implementation
61.5. Examples
62. SP-GiST Indexes
62.1. Introduction
62.2. Built-in Operator Classes
62.3. Extensibility
62.4. Implementation
63. GIN Indexes
63.1. Introduction
63.2. Built-in Operator Classes
63.3. Extensibility
63.4. Implementation
63.5. GIN Tips and Tricks
63.6. Limitations
63.7. Examples
64. BRIN Indexes
64.1. Introduction
64.2. Built-in Operator Classes
64.3. Extensibility
65. Hash Indexes
65.1. Overview
65.2. Implementation
66. Database Physical Storage
66.1. Database File Layout
66.2. TOAST
66.3. Free Space Map
66.4. Visibility Map
66.5. The Initialization Fork
66.6. Database Page Layout
66.7. Heap-Only Tuples (HOT)
67. How the Planner Uses Statistics
67.1. Row Estimation Examples
67.2. Multivariate Statistics Examples
67.3. Planner Statistics and Security
68. Backup Manifest Format
68.1. Backup Manifest Top-level Object
68.2. Backup Manifest File Object
68.3. Backup Manifest WAL Range Object