September 26, 2024: PostgreSQL 17 Released!
Supported Versions: Current (17) / 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 / 7.3 / 7.2 / 7.1
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.

Chapter 38. Extending SQL

Table of Contents

38.1. How Extensibility Works
38.2. The PostgreSQL Type System
38.2.1. Base Types
38.2.2. Container Types
38.2.3. Domains
38.2.4. Pseudo-Types
38.2.5. Polymorphic Types
38.3. User-defined Functions
38.4. User-defined Procedures
38.5. Query Language (SQL) Functions
38.5.1. Arguments for SQL Functions
38.5.2. SQL Functions on Base Types
38.5.3. SQL Functions on Composite Types
38.5.4. SQL Functions with Output Parameters
38.5.5. SQL Functions with Variable Numbers of Arguments
38.5.6. SQL Functions with Default Values for Arguments
38.5.7. SQL Functions as Table Sources
38.5.8. SQL Functions Returning Sets
38.5.9. SQL Functions Returning TABLE
38.5.10. Polymorphic SQL Functions
38.5.11. SQL Functions with Collations
38.6. Function Overloading
38.7. Function Volatility Categories
38.8. Procedural Language Functions
38.9. Internal Functions
38.10. C-Language Functions
38.10.1. Dynamic Loading
38.10.2. Base Types in C-Language Functions
38.10.3. Version 1 Calling Conventions
38.10.4. Writing Code
38.10.5. Compiling and Linking Dynamically-loaded Functions
38.10.6. Composite-type Arguments
38.10.7. Returning Rows (Composite Types)
38.10.8. Returning Sets
38.10.9. Polymorphic Arguments and Return Types
38.10.10. Transform Functions
38.10.11. Shared Memory and LWLocks
38.10.12. Using C++ for Extensibility
38.11. User-defined Aggregates
38.11.1. Moving-Aggregate Mode
38.11.2. Polymorphic and Variadic Aggregates
38.11.3. Ordered-Set Aggregates
38.11.4. Partial Aggregation
38.11.5. Support Functions for Aggregates
38.12. User-defined Types
38.12.1. TOAST Considerations
38.13. User-defined Operators
38.14. Operator Optimization Information
38.14.1. COMMUTATOR
38.14.2. NEGATOR
38.14.3. RESTRICT
38.14.4. JOIN
38.14.5. HASHES
38.14.6. MERGES
38.15. Interfacing Extensions To Indexes
38.15.1. Index Methods and Operator Classes
38.15.2. Index Method Strategies
38.15.3. Index Method Support Routines
38.15.4. An Example
38.15.5. Operator Classes and Operator Families
38.15.6. System Dependencies on Operator Classes
38.15.7. Ordering Operators
38.15.8. Special Features of Operator Classes
38.16. Packaging Related Objects into an Extension
38.16.1. Extension Files
38.16.2. Extension Relocatability
38.16.3. Extension Configuration Tables
38.16.4. Extension Updates
38.16.5. Installing Extensions using Update Scripts
38.16.6. Security Considerations for Extensions
38.16.7. Extension Example
38.17. Extension Building Infrastructure

In the sections that follow, we will discuss how you can extend the PostgreSQL SQL query language by adding: