# 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_policy

52.38. pg_proc

52.39. pg_publication

52.40. pg_publication_rel

52.41. pg_range

52.42. pg_replication_origin

52.43. pg_rewrite

52.44. pg_seclabel

52.45. pg_sequence

52.46. pg_shdepend

52.47. pg_shdescription

52.48. pg_shseclabel

52.49. pg_statistic

52.50. pg_statistic_ext

52.51. pg_statistic_ext_data

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_backend_memory_contexts

52.68. pg_config

52.69. pg_cursors

52.70. pg_file_settings

52.71. pg_group

52.72. pg_hba_file_rules

52.73. pg_indexes

52.74. pg_locks

52.75. pg_matviews

52.76. pg_policies

52.77. pg_prepared_statements

52.78. pg_prepared_xacts

52.79. pg_publication_tables

52.80. pg_replication_origin_status

52.81. pg_replication_slots

52.82. pg_roles

52.83. pg_rules

52.84. pg_seclabels

52.85. pg_sequences

52.86. pg_settings

52.87. pg_shadow

52.88. pg_shmem_allocations

52.89. pg_stats

52.90. pg_stats_ext

52.91. pg_stats_ext_exprs

52.92. pg_tables

52.93. pg_timezone_abbrevs

52.94. pg_timezone_names

52.95. pg_user

52.96. pg_user_mappings

52.97. 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. Table Access Method Interface Definition

62. Index Access Method Interface Definition

62.1. Basic API Structure for Indexes

62.2. Index Access Method Functions

62.3. Index Scanning

62.4. Index Locking Considerations

62.5. Index Uniqueness Checks

62.6. Index Cost Estimation Functions

63. Generic WAL Records

64. B-Tree Indexes

64.1. Introduction

64.2. Behavior of B-Tree Operator Classes

64.3. B-Tree Support Functions

64.4. Implementation

65. GiST Indexes

65.1. Introduction

65.2. Built-in Operator Classes

65.3. Extensibility

65.4. Implementation

65.5. Examples

66. SP-GiST Indexes

66.1. Introduction

66.2. Built-in Operator Classes

66.3. Extensibility

66.4. Implementation

66.5. Examples

67. GIN Indexes

67.1. Introduction

67.2. Built-in Operator Classes

67.3. Extensibility

67.4. Implementation

67.5. GIN Tips and Tricks

67.6. Limitations

67.7. Examples

68. BRIN Indexes

68.1. Introduction

68.2. Built-in Operator Classes

68.3. Extensibility

69. Hash Indexes

69.1. Overview

69.2. Implementation

70. Database Physical Storage

70.1. Database File Layout

70.2. TOAST

70.3. Free Space Map

70.4. Visibility Map

70.5. The Initialization Fork

70.6. Database Page Layout

71. System Catalog Declarations and Initial Contents

71.1. System Catalog Declaration Rules

71.2. System Catalog Initial Data

71.3. BKI File Format

71.4. BKI Commands

71.5. Structure of the Bootstrap BKI File

71.6. BKI Example

72. How the Planner Uses Statistics

72.1. Row Estimation Examples

72.2. Multivariate Statistics Examples

72.3. Planner Statistics and Security

73. Backup Manifest Format

73.1. Backup Manifest Top-level Object

73.2. Backup Manifest File Object

73.3. Backup Manifest WAL Range Object