PostgreSQL Part VII. Internals Prev Up PostgreSQL 11.22 Documentation Home Next Part VII. Internals This part contains assorted information that might be of use to PostgreSQL developers. Table of Contents 51. Overview of PostgreSQL Internals 51.1. The Path of a Query 51.2. How Connections are Established 51.3. The Parser Stage 51.4. The PostgreSQL Rule System 51.5. Planner/Optimizer 51.6. Executor 52. System Catalogs 52.1. Overview 52.2. pg_aggregate 52.3. pg_am 52.4. pg_amop 52.5. pg_amproc 52.6. pg_attrdef 52.7. pg_attribute 52.8. pg_authid 52.9. pg_auth_members 52.10. pg_cast 52.11. pg_class 52.12. pg_collation 52.13. pg_constraint 52.14. pg_conversion 52.15. pg_database 52.16. pg_db_role_setting 52.17. pg_default_acl 52.18. pg_depend 52.19. pg_description 52.20. pg_enum 52.21. pg_event_trigger 52.22. pg_extension 52.23. pg_foreign_data_wrapper 52.24. pg_foreign_server 52.25. pg_foreign_table 52.26. pg_index 52.27. pg_inherits 52.28. pg_init_privs 52.29. pg_language 52.30. pg_largeobject 52.31. pg_largeobject_metadata 52.32. pg_namespace 52.33. pg_opclass 52.34. pg_operator 52.35. pg_opfamily 52.36. pg_partitioned_table 52.37. pg_pltemplate 52.38. pg_policy 52.39. pg_proc 52.40. pg_publication 52.41. pg_publication_rel 52.42. pg_range 52.43. pg_replication_origin 52.44. pg_rewrite 52.45. pg_seclabel 52.46. pg_sequence 52.47. pg_shdepend 52.48. pg_shdescription 52.49. pg_shseclabel 52.50. pg_statistic 52.51. pg_statistic_ext 52.52. pg_subscription 52.53. pg_subscription_rel 52.54. pg_tablespace 52.55. pg_transform 52.56. pg_trigger 52.57. pg_ts_config 52.58. pg_ts_config_map 52.59. pg_ts_dict 52.60. pg_ts_parser 52.61. pg_ts_template 52.62. pg_type 52.63. pg_user_mapping 52.64. System Views 52.65. pg_available_extensions 52.66. pg_available_extension_versions 52.67. pg_config 52.68. pg_cursors 52.69. pg_file_settings 52.70. pg_group 52.71. pg_hba_file_rules 52.72. pg_indexes 52.73. pg_locks 52.74. pg_matviews 52.75. pg_policies 52.76. pg_prepared_statements 52.77. pg_prepared_xacts 52.78. pg_publication_tables 52.79. pg_replication_origin_status 52.80. pg_replication_slots 52.81. pg_roles 52.82. pg_rules 52.83. pg_seclabels 52.84. pg_sequences 52.85. pg_settings 52.86. pg_shadow 52.87. pg_stats 52.88. pg_tables 52.89. pg_timezone_abbrevs 52.90. pg_timezone_names 52.91. pg_user 52.92. pg_user_mappings 52.93. pg_views 53. Frontend/Backend Protocol 53.1. Overview 53.2. Message Flow 53.3. SASL Authentication 53.4. Streaming Replication Protocol 53.5. Logical Streaming Replication Protocol 53.6. Message Data Types 53.7. Message Formats 53.8. Error and Notice Message Fields 53.9. Logical Replication Message Formats 53.10. Summary of Changes since Protocol 2.0 54. PostgreSQL Coding Conventions 54.1. Formatting 54.2. Reporting Errors Within the Server 54.3. Error Message Style Guide 54.4. Miscellaneous Coding Conventions 55. Native Language Support 55.1. For the Translator 55.2. For the Programmer 56. Writing A Procedural Language Handler 57. Writing A Foreign Data Wrapper 57.1. Foreign Data Wrapper Functions 57.2. Foreign Data Wrapper Callback Routines 57.3. Foreign Data Wrapper Helper Functions 57.4. Foreign Data Wrapper Query Planning 57.5. Row Locking in Foreign Data Wrappers 58. Writing A Table Sampling Method 58.1. Sampling Method Support Functions 59. Writing A Custom Scan Provider 59.1. Creating Custom Scan Paths 59.2. Creating Custom Scan Plans 59.3. Executing Custom Scans 60. Genetic Query Optimizer 60.1. Query Handling as a Complex Optimization Problem 60.2. Genetic Algorithms 60.3. Genetic Query Optimization (GEQO) in PostgreSQL 60.4. Further Reading 61. Index Access Method Interface Definition 61.1. Basic API Structure for Indexes 61.2. Index Access Method Functions 61.3. Index Scanning 61.4. Index Locking Considerations 61.5. Index Uniqueness Checks 61.6. Index Cost Estimation Functions 62. Generic WAL Records 63. B-Tree Indexes 63.1. Introduction 63.2. Behavior of B-Tree Operator Classes 63.3. B-Tree Support Functions 63.4. Implementation 64. GiST Indexes 64.1. Introduction 64.2. Built-in Operator Classes 64.3. Extensibility 64.4. Implementation 64.5. Examples 65. SP-GiST Indexes 65.1. Introduction 65.2. Built-in Operator Classes 65.3. Extensibility 65.4. Implementation 65.5. Examples 66. GIN Indexes 66.1. Introduction 66.2. Built-in Operator Classes 66.3. Extensibility 66.4. Implementation 66.5. GIN Tips and Tricks 66.6. Limitations 66.7. Examples 67. BRIN Indexes 67.1. Introduction 67.2. Built-in Operator Classes 67.3. Extensibility 68. Hash Indexes 68.1. Overview 68.2. Implementation 69. Database Physical Storage 69.1. Database File Layout 69.2. TOAST 69.3. Free Space Map 69.4. Visibility Map 69.5. The Initialization Fork 69.6. Database Page Layout 69.7. Heap-Only Tuples (HOT) 70. System Catalog Declarations and Initial Contents 70.1. System Catalog Declaration Rules 70.2. System Catalog Initial Data 70.3. BKI File Format 70.4. BKI Commands 70.5. Structure of the Bootstrap BKI File 70.6. BKI Example 71. How the Planner Uses Statistics 71.1. Row Estimation Examples 71.2. Multivariate Statistics Examples 71.3. Planner Statistics and Security Prev Up Next postmaster Home Chapter 51. Overview of PostgreSQL Internals Privacy Policy | Code of Conduct | About PostgreSQL | Contact Copyright © 1996-2023 The PostgreSQL Global Development Group