Supported Versions: Current (17) / 16 / 15 / 14 / 13
Development Versions: devel
Unsupported versions: 12 / 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 35. Extending SQL

Table of Contents
35.1. How Extensibility Works
35.2. The PostgreSQL Type System
35.2.1. Base Types
35.2.2. Composite Types
35.2.3. Domains
35.2.4. Pseudo-Types
35.2.5. Polymorphic Types
35.3. User-defined Functions
35.4. Query Language (SQL) Functions
35.4.1. Arguments for SQL Functions
35.4.2. SQL Functions on Base Types
35.4.3. SQL Functions on Composite Types
35.4.4. SQL Functions with Output Parameters
35.4.5. SQL Functions with Variable Numbers of Arguments
35.4.6. SQL Functions with Default Values for Arguments
35.4.7. SQL Functions as Table Sources
35.4.8. SQL Functions Returning Sets
35.4.9. SQL Functions Returning TABLE
35.4.10. Polymorphic SQL Functions
35.4.11. SQL Functions with Collations
35.5. Function Overloading
35.6. Function Volatility Categories
35.7. Procedural Language Functions
35.8. Internal Functions
35.9. C-Language Functions
35.9.1. Dynamic Loading
35.9.2. Base Types in C-Language Functions
35.9.3. Version 0 Calling Conventions
35.9.4. Version 1 Calling Conventions
35.9.5. Writing Code
35.9.6. Compiling and Linking Dynamically-loaded Functions
35.9.7. Composite-type Arguments
35.9.8. Returning Rows (Composite Types)
35.9.9. Returning Sets
35.9.10. Polymorphic Arguments and Return Types
35.9.11. Transform Functions
35.9.12. Shared Memory and LWLocks
35.9.13. Using C++ for Extensibility
35.10. User-defined Aggregates
35.10.1. Moving-Aggregate Mode
35.10.2. Polymorphic and Variadic Aggregates
35.10.3. Ordered-Set Aggregates
35.10.4. Support Functions for Aggregates
35.11. User-defined Types
35.12. User-defined Operators
35.13. Operator Optimization Information
35.13.1. COMMUTATOR
35.13.2. NEGATOR
35.13.3. RESTRICT
35.13.4. JOIN
35.13.5. HASHES
35.13.6. MERGES
35.14. Interfacing Extensions To Indexes
35.14.1. Index Methods and Operator Classes
35.14.2. Index Method Strategies
35.14.3. Index Method Support Routines
35.14.4. An Example
35.14.5. Operator Classes and Operator Families
35.14.6. System Dependencies on Operator Classes
35.14.7. Ordering Operators
35.14.8. Special Features of Operator Classes
35.15. Packaging Related Objects into an Extension
35.15.1. Extension Files
35.15.2. Extension Relocatability
35.15.3. Extension Configuration Tables
35.15.4. Extension Updates
35.15.5. Security Considerations for Extensions
35.15.6. Extension Example
35.16. Extension Building Infrastructure

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