PostgreSQL is extensible because its operation  is  
    catalog-driven.   If  you  are familiar with standard 
    relational systems, you know that  they  store  information
    about  databases,  tables,  columns,  etc., in what are
    commonly known as system catalogs.  (Some systems  call
    this  the data dictionary).  The catalogs appear to the
    user as tables like any other, but  the  DBMS  stores
    its  internal  bookkeeping in them.  One key difference
    between PostgreSQL and  standard  relational  systems  is
    that PostgreSQL stores much more information in its 
    catalogs -- not only information about tables and  columns,
    but also information about its types, functions, access
    methods, and so on.  These tables can be  modified  by
    the  user, and since PostgreSQL bases its internal operation 
    on these tables, this means that PostgreSQL can  be
    extended   by   users.    By  comparison,  conventional
    database systems can only be extended by changing hardcoded  
    procedures within the DBMS or by loading modules
    specially written by the DBMS vendor.
   
    PostgreSQL is also unlike most  other  data  managers  in
    that  the server can incorporate user-written code into
    itself through dynamic loading.  That is, the user  can
    specify  an  object code file (e.g., a shared library) that implements a new type or  function 
    and PostgreSQL will load it as required.  Code written 
    in SQL is even more trivial to add to the  server.
    This ability to modify its operation "on the fly" makes
    PostgreSQL uniquely suited for rapid prototyping  of  new
    applications and storage structures.