<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >Extending SQL</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REV="MADE" HREF="mailto:pgsql-docs@postgresql.org"><LINK REL="HOME" TITLE="PostgreSQL 8.3.1 Documentation" HREF="index.html"><LINK REL="UP" TITLE="Server Programming" HREF="server-programming.html"><LINK REL="PREVIOUS" TITLE="Server Programming" HREF="server-programming.html"><LINK REL="NEXT" TITLE="How Extensibility Works" HREF="extend-how.html"><LINK REL="STYLESHEET" TYPE="text/css" HREF="stylesheet.css"><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1"><META NAME="creation" CONTENT="2008-03-15T03:19:10"></HEAD ><BODY CLASS="CHAPTER" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="5" ALIGN="center" VALIGN="bottom" >PostgreSQL 8.3.1 Documentation</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="top" ><A HREF="server-programming.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="10%" ALIGN="left" VALIGN="top" ><A HREF="server-programming.html#AEN40015" >Fast Backward</A ></TD ><TD WIDTH="60%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="top" ><A HREF="triggers.html" >Fast Forward</A ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="top" ><A HREF="extend-how.html" ACCESSKEY="N" >Next</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="CHAPTER" ><H1 ><A NAME="EXTEND" ></A >Chapter 34. Extending <ACRONYM CLASS="ACRONYM" >SQL</ACRONYM ></H1 ><DIV CLASS="TOC" ><DL ><DT ><B >Table of Contents</B ></DT ><DT >34.1. <A HREF="extend-how.html" >How Extensibility Works</A ></DT ><DT >34.2. <A HREF="extend-type-system.html" >The <SPAN CLASS="PRODUCTNAME" >PostgreSQL</SPAN > Type System</A ></DT ><DD ><DL ><DT >34.2.1. <A HREF="extend-type-system.html#AEN40075" >Base Types</A ></DT ><DT >34.2.2. <A HREF="extend-type-system.html#AEN40081" >Composite Types</A ></DT ><DT >34.2.3. <A HREF="extend-type-system.html#AEN40088" >Domains</A ></DT ><DT >34.2.4. <A HREF="extend-type-system.html#AEN40094" >Pseudo-Types</A ></DT ><DT >34.2.5. <A HREF="extend-type-system.html#EXTEND-TYPES-POLYMORPHIC" >Polymorphic Types</A ></DT ></DL ></DD ><DT >34.3. <A HREF="xfunc.html" >User-Defined Functions</A ></DT ><DT >34.4. <A HREF="xfunc-sql.html" >Query Language (<ACRONYM CLASS="ACRONYM" >SQL</ACRONYM >) Functions</A ></DT ><DD ><DL ><DT >34.4.1. <A HREF="xfunc-sql.html#XFUNC-SQL-BASE-FUNCTIONS" ><ACRONYM CLASS="ACRONYM" >SQL</ACRONYM > Functions on Base Types</A ></DT ><DT >34.4.2. <A HREF="xfunc-sql.html#AEN40245" ><ACRONYM CLASS="ACRONYM" >SQL</ACRONYM > Functions on Composite Types</A ></DT ><DT >34.4.3. <A HREF="xfunc-sql.html#XFUNC-OUTPUT-PARAMETERS" >Functions with Output Parameters</A ></DT ><DT >34.4.4. <A HREF="xfunc-sql.html#XFUNC-SQL-TABLE-FUNCTIONS" ><ACRONYM CLASS="ACRONYM" >SQL</ACRONYM > Functions as Table Sources</A ></DT ><DT >34.4.5. <A HREF="xfunc-sql.html#AEN40331" ><ACRONYM CLASS="ACRONYM" >SQL</ACRONYM > Functions Returning Sets</A ></DT ><DT >34.4.6. <A HREF="xfunc-sql.html#AEN40353" >Polymorphic <ACRONYM CLASS="ACRONYM" >SQL</ACRONYM > Functions</A ></DT ></DL ></DD ><DT >34.5. <A HREF="xfunc-overload.html" >Function Overloading</A ></DT ><DT >34.6. <A HREF="xfunc-volatility.html" >Function Volatility Categories</A ></DT ><DT >34.7. <A HREF="xfunc-pl.html" >Procedural Language Functions</A ></DT ><DT >34.8. <A HREF="xfunc-internal.html" >Internal Functions</A ></DT ><DT >34.9. <A HREF="xfunc-c.html" >C-Language Functions</A ></DT ><DD ><DL ><DT >34.9.1. <A HREF="xfunc-c.html#XFUNC-C-DYNLOAD" >Dynamic Loading</A ></DT ><DT >34.9.2. <A HREF="xfunc-c.html#XFUNC-C-BASETYPE" >Base Types in C-Language Functions</A ></DT ><DT >34.9.3. <A HREF="xfunc-c.html#AEN40852" >Version 0 Calling Conventions</A ></DT ><DT >34.9.4. <A HREF="xfunc-c.html#AEN40879" >Version 1 Calling Conventions</A ></DT ><DT >34.9.5. <A HREF="xfunc-c.html#AEN40937" >Writing Code</A ></DT ><DT >34.9.6. <A HREF="xfunc-c.html#DFUNC" >Compiling and Linking Dynamically-Loaded Functions</A ></DT ><DT >34.9.7. <A HREF="xfunc-c.html#XFUNC-C-PGXS" >Extension Building Infrastructure</A ></DT ><DT >34.9.8. <A HREF="xfunc-c.html#AEN41315" >Composite-Type Arguments</A ></DT ><DT >34.9.9. <A HREF="xfunc-c.html#AEN41339" >Returning Rows (Composite Types)</A ></DT ><DT >34.9.10. <A HREF="xfunc-c.html#XFUNC-C-RETURN-SET" >Returning Sets</A ></DT ><DT >34.9.11. <A HREF="xfunc-c.html#AEN41462" >Polymorphic Arguments and Return Types</A ></DT ><DT >34.9.12. <A HREF="xfunc-c.html#AEN41485" >Shared Memory and LWLocks</A ></DT ></DL ></DD ><DT >34.10. <A HREF="xaggr.html" >User-Defined Aggregates</A ></DT ><DT >34.11. <A HREF="xtypes.html" >User-Defined Types</A ></DT ><DT >34.12. <A HREF="xoper.html" >User-Defined Operators</A ></DT ><DT >34.13. <A HREF="xoper-optimization.html" >Operator Optimization Information</A ></DT ><DD ><DL ><DT >34.13.1. <A HREF="xoper-optimization.html#AEN41667" ><TT CLASS="LITERAL" >COMMUTATOR</TT ></A ></DT ><DT >34.13.2. <A HREF="xoper-optimization.html#AEN41702" ><TT CLASS="LITERAL" >NEGATOR</TT ></A ></DT ><DT >34.13.3. <A HREF="xoper-optimization.html#AEN41718" ><TT CLASS="LITERAL" >RESTRICT</TT ></A ></DT ><DT >34.13.4. <A HREF="xoper-optimization.html#AEN41768" ><TT CLASS="LITERAL" >JOIN</TT ></A ></DT ><DT >34.13.5. <A HREF="xoper-optimization.html#AEN41800" ><TT CLASS="LITERAL" >HASHES</TT ></A ></DT ><DT >34.13.6. <A HREF="xoper-optimization.html#AEN41822" ><TT CLASS="LITERAL" >MERGES</TT ></A ></DT ></DL ></DD ><DT >34.14. <A HREF="xindex.html" >Interfacing Extensions To Indexes</A ></DT ><DD ><DL ><DT >34.14.1. <A HREF="xindex.html#XINDEX-OPCLASS" >Index Methods and Operator Classes</A ></DT ><DT >34.14.2. <A HREF="xindex.html#XINDEX-STRATEGIES" >Index Method Strategies</A ></DT ><DT >34.14.3. <A HREF="xindex.html#XINDEX-SUPPORT" >Index Method Support Routines</A ></DT ><DT >34.14.4. <A HREF="xindex.html#XINDEX-EXAMPLE" >An Example</A ></DT ><DT >34.14.5. <A HREF="xindex.html#XINDEX-OPFAMILY" >Operator Classes and Operator Families</A ></DT ><DT >34.14.6. <A HREF="xindex.html#XINDEX-OPCLASS-DEPENDENCIES" >System Dependencies on Operator Classes</A ></DT ><DT >34.14.7. <A HREF="xindex.html#XINDEX-OPCLASS-FEATURES" >Special Features of Operator Classes</A ></DT ></DL ></DD ></DL ></DIV ><A NAME="AEN40023" ></A ><P > In the sections that follow, we will discuss how you can extend the <SPAN CLASS="PRODUCTNAME" >PostgreSQL</SPAN > <ACRONYM CLASS="ACRONYM" >SQL</ACRONYM > query language by adding: <P ></P ></P><UL COMPACT="COMPACT" ><LI STYLE="list-style-type: disc" ><P > functions (starting in <A HREF="xfunc.html" >Section 34.3</A >) </P ></LI ><LI STYLE="list-style-type: disc" ><P > aggregates (starting in <A HREF="xaggr.html" >Section 34.10</A >) </P ></LI ><LI STYLE="list-style-type: disc" ><P > data types (starting in <A HREF="xtypes.html" >Section 34.11</A >) </P ></LI ><LI STYLE="list-style-type: disc" ><P > operators (starting in <A HREF="xoper.html" >Section 34.12</A >) </P ></LI ><LI STYLE="list-style-type: disc" ><P > operator classes for indexes (starting in <A HREF="xindex.html" >Section 34.14</A >) </P ></LI ></UL ><P> </P ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="server-programming.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="extend-how.html" ACCESSKEY="N" >Next</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Server Programming</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="server-programming.html" ACCESSKEY="U" >Up</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >How Extensibility Works</TD ></TR ></TABLE ></DIV ></BODY ></HTML >