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
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.

V. Server Programming

This part is about extending the server functionality with user-defined functions, data types, triggers, etc. These are advanced topics which should probably be approached only after all the other user documentation about PostgreSQL has been understood. Later chapters in this part describe the server-side programming languages available in the PostgreSQL distribution as well as general issues concerning server-side programming languages. It is essential to read at least the earlier sections of Chapter 31 (covering functions) before diving into the material about server-side programming languages.

Table of Contents
31. Extending SQL
31.1. How Extensibility Works
31.2. The PostgreSQL Type System
31.3. User-Defined Functions
31.4. Query Language (SQL) Functions
31.5. Function Overloading
31.6. Function Volatility Categories
31.7. Procedural Language Functions
31.8. Internal Functions
31.9. C-Language Functions
31.10. User-Defined Aggregates
31.11. User-Defined Types
31.12. User-Defined Operators
31.13. Operator Optimization Information
31.14. Interfacing Extensions To Indexes
32. Triggers
32.1. Overview of Trigger Behavior
32.2. Visibility of Data Changes
32.3. Writing Trigger Functions in C
32.4. A Complete Example
33. The Rule System
33.1. The Query Tree
33.2. Views and the Rule System
33.3. Rules on INSERT, UPDATE, and DELETE
33.4. Rules and Privileges
33.5. Rules and Command Status
33.6. Rules versus Triggers
34. Procedural Languages
34.1. Installing Procedural Languages
35. PL/pgSQL - SQL Procedural Language
35.1. Overview
35.2. Tips for Developing in PL/pgSQL
35.3. Structure of PL/pgSQL
35.4. Declarations
35.5. Expressions
35.6. Basic Statements
35.7. Control Structures
35.8. Cursors
35.9. Errors and Messages
35.10. Trigger Procedures
35.11. Porting from Oracle PL/SQL
36. PL/Tcl - Tcl Procedural Language
36.1. Overview
36.2. PL/Tcl Functions and Arguments
36.3. Data Values in PL/Tcl
36.4. Global Data in PL/Tcl
36.5. Database Access from PL/Tcl
36.6. Trigger Procedures in PL/Tcl
36.7. Modules and the unknown command
36.8. Tcl Procedure Names
37. PL/Perl - Perl Procedural Language
37.1. PL/Perl Functions and Arguments
37.2. Database Access from PL/Perl
37.3. Data Values in PL/Perl
37.4. Global Values in PL/Perl
37.5. Trusted and Untrusted PL/Perl
37.6. PL/Perl Triggers
37.7. Limitations and Missing Features
38. PL/Python - Python Procedural Language
38.1. PL/Python Functions
38.2. Trigger Functions
38.3. Database Access
39. Server Programming Interface
39.1. Interface Functions
39.2. Interface Support Functions
39.3. Memory Management
39.4. Visibility of Data Changes
39.5. Examples