Extending the Database: C Functions

* You have to be a database superuser to insert C functions into the database.

* C functions are written in C and compiled into a shared library.

* You can use the Server Programming Interface (SPI) to access database data from within those routines.

* Example:

postgres:/home/postgres/lib# cat double.c
#include <stdio.h>

extern int double_me(int a)
{
    return a*2;
}
postgres:/home/postgres/lib# gcc -shared -Wl,-soname,libpgdouble.so.1 \
>                                  -o libpgdouble.so double.c
postgres:/home/postgres/lib# psql test
Welcome to the POSTGRESQL interactive sql monitor:
  Please read the file COPYRIGHT for copyright terms of POSTGRESQL
[PostgreSQL 6.5.2 on i686-pc-linux-gnu, compiled by gcc egcs-2.91.66]

   type \? for help on slash commands
   type \q to quit
   type \g or terminate with semicolon to execute query
 You are currently connected to the database: test

test=> CREATE FUNCTION double_me(int4)
test-> RETURNS int4
test-> AS '/home/postgres/lib/libpgdouble.so'
test-> LANGUAGE 'c' \g
CREATE
test=> SELECT double_me(5) \g
double_me
---------
       10
(1 row)

test=>