<!-- $PostgreSQL: pgsql/doc/src/sgml/external-projects.sgml,v 1.18 2007/10/16 19:04:34 mha Exp $ -->

 <appendix id="external-projects">
  <title>External Projects</title>

  <para>
   <productname>PostgreSQL</productname> is a complex software project,
   and managing the project is difficult. We have found that many
   enhancements to <productname>PostgreSQL</productname> can be more
   efficiently developed separately from the core project.
  </para>

  <para>
   To help our community with the development of their external projects, we
   have created <ulink url="http://www.pgfoundry.org/">PgFoundry</ulink>, a
   website that provides hosting for <productname>PostgreSQL</>-related
   projects that are maintained outside the core <productname>PostgreSQL</>
   distribution. PgFoundry is built using the GForge software project and is
   similar to <ulink url="http://sourceforge.net">SourceForge.net</> in its
   feature set, providing mailing lists, forums, bug tracking, CVS, and web
   hosting. If you have a <productname>PostgreSQL</>-related open source
   project that you would like to have hosted at PgFoundy, please feel free
   to create a new project.
  </para>

  <note>
   <para>
    Many <productname>PostgreSQL</productname>-related projects are still
    hosted at <ulink url="http://gborg.postgresql.org/">GBorg</>.  GBorg is
    the original external community developer site, and while it is
    currently closed to new projects in favor of PgFoundry, it still
    contains many active and relevant projects. Other popular
    <productname>PostgreSQL</productname>-related projects are hosted
    independently, or on other project-hosting sites such as <ulink
    url="http://sourceforge.net/">SourceForge.net</ulink>. You should search
    the web if you don't find the project you are looking for.
   </para>
  </note>

 <sect1 id="external-interfaces">
  <title>Client Interfaces</title>

  <indexterm>
   <primary>interfaces</primary>
   <secondary>externally maintained</secondary>
  </indexterm>

  <para>
   There are only two client interfaces included in the base
   <productname>PostgreSQL</productname> distribution:
   <itemizedlist>
    <listitem>
     <para>
      <link linkend="libpq">libpq</link> is included because it is the
      primary C language interface, and because many other client interfaces
      are built on top of it.
     </para>
    </listitem>

    <listitem>
     <para>
      <link linkend="ecpg">ecpg</link> is included because it depends on the
      server-side SQL grammar, and is therefore sensitive to changes in
      <productname>PostgreSQL</productname> itself.
     </para>
    </listitem>
   </itemizedlist>

   All other language interfaces are external projects and are distributed
   separately. <xref linkend="language-interface-table"> includes a list of
   some of these projects. Note that some of these packages might not be
   released under the same license as <productname>PostgreSQL</>. For more
   information on each language interface, including licensing terms, refer to
   its website and documentation.
  </para>

  <table id="language-interface-table">
   <title>Externally Maintained Client Interfaces</>

   <tgroup cols="4">
    <thead>
     <row>
      <entry>Name</entry>
      <entry>Language</entry>
      <entry>Comments</entry>
      <entry>Website</entry>
     </row>
    </thead>

    <tbody>
     <row>
      <entry>DBD::Pg</entry>
      <entry>Perl</entry>
      <entry>Perl DBI driver</entry>
      <entry><ulink url="http://search.cpan.org/dist/DBD-Pg/">http://search.cpan.org/dist/DBD-Pg/</ulink></entry>
     </row>

     <row>
      <entry>JDBC</entry>
      <entry>JDBC</entry>
      <entry>Type 4 JDBC driver</entry>
      <entry><ulink url="http://jdbc.postgresql.org/">http://jdbc.postgresql.org/</ulink></entry>
     </row>

     <row>
      <entry>libpqxx</entry>
      <entry>C++</entry>
      <entry>New-style C++ interface</entry>
      <entry><ulink url="http://pqxx.org/">http://pqxx.org/</ulink></entry>
     </row>

     <row>
      <entry>libpq++</entry>
      <entry>C++</entry>
      <entry>Old-style C++ interface</entry>
      <entry><ulink url="http://gborg.postgresql.org/project/libpqpp/">http://gborg.postgresql.org/project/libpqpp/</ulink></entry>
     </row>

     <row>
      <entry>Npgsql</entry>
      <entry>.NET</entry>
      <entry>.NET data provider</entry>
      <entry><ulink url="http://npgsql.projects.postgresql.org/">http://npgsql.projects.postgresql.org/</ulink></entry>
     </row>

     <row>
      <entry>ODBCng</entry>
      <entry>ODBC</entry>
      <entry>An alternative ODBC driver</entry>
      <entry><ulink url="http://projects.commandprompt.com/public/odbcng/">http://projects.commandprompt.com/public/odbcng/</ulink></entry>
     </row>

     <row>
      <entry>pgtclng</entry>
      <entry>Tcl</entry>
      <entry></entry>
      <entry><ulink url="http://pgfoundry.org/projects/pgtclng/">http://pgfoundry.org/projects/pgtclng/</ulink></entry>
     </row>

     <row>
      <entry>psqlODBC</entry>
      <entry>ODBC</entry>
      <entry>The most commonly-used ODBC driver</entry>
      <entry><ulink url="http://psqlodbc.projects.postgresql.org/">http://psqlodbc.projects.postgresql.org/</ulink></entry>
     </row>

     <row>
      <entry>psycopg</entry>
      <entry>Python</entry>
      <entry>DB API 2.0-compliant</entry>
      <entry><ulink url="http://www.initd.org/">http://www.initd.org/</ulink></entry>
     </row>
    </tbody>
   </tgroup>
  </table>
 </sect1>

 <sect1 id="external-pl">
  <title>Procedural Languages</title>

  <indexterm>
   <primary>procedural language</primary>
   <secondary>externally maintained</secondary>
  </indexterm>

  <para>
   <productname>PostgreSQL</productname> includes several procedural
   languages with the base distribution: <link
   linkend="plpgsql">PL/PgSQL</link>, <link linkend="pltcl">PL/Tcl</link>,
   <link linkend="plperl">PL/Perl</link>, and <link
   linkend="plpython">PL/Python</link>.
  </para>

  <para>
   In addition, there are a number of procedural languages that are developed
   and maintained outside the core <productname>PostgreSQL</productname>
   distribution. <xref linkend="pl-language-table"> lists some of these
   packages. Note that some of these projects might not be released under the same
   license as <productname>PostgreSQL</>. For more information on each
   procedural language, including licensing information, refer to its website
   and documentation.
  </para>

  <table id="pl-language-table">
   <title>Externally Maintained Procedural Languages</title>

   <tgroup cols="3">
    <thead>
     <row>
      <entry>Name</entry>
      <entry>Language</entry>
      <entry>Website</entry>
     </row>
    </thead>

    <tbody>
     <row>
      <entry>PL/Java</entry>
      <entry>Java</entry>
      <entry><ulink url="http://pljava.projects.postgresql.org/">http://pljava.projects.postgresql.org/</ulink></entry>
     </row>

     <row>
      <entry>PL/PHP</entry>
      <entry>PHP</entry>
      <entry><ulink url="http://www.commandprompt.com/community/plphp/">http://www.commandprompt.com/community/plphp/</ulink></entry>
     </row>

     <row>
      <entry>PL/Py</entry>
      <entry>Python</entry>
      <entry><ulink url="http://python.projects.postgresql.org/">http://python.projects.postgresql.org/</ulink></entry>
     </row>

     <row>
      <entry>PL/R</entry>
      <entry>R</entry>
      <entry><ulink url="http://www.joeconway.com/plr/">http://www.joeconway.com/plr/</ulink></entry>
     </row>

     <row>
      <entry>PL/Ruby</entry>
      <entry>Ruby</entry>
      <entry><ulink url="http://raa.ruby-lang.org/project/pl-ruby/">http://raa.ruby-lang.org/project/pl-ruby/</ulink></entry>
     </row>

     <row>
      <entry>PL/Scheme</entry>
      <entry>Scheme</entry>
      <entry><ulink url="http://plscheme.projects.postgresql.org/">http://plscheme.projects.postgresql.org/</ulink></entry>
     </row>

     <row>
      <entry>PL/sh</entry>
      <entry>Unix shell</entry>
      <entry><ulink url="http://plsh.projects.postgresql.org/">http://plsh.projects.postgresql.org/</ulink></entry>
     </row>
    </tbody>
   </tgroup>
  </table>
 </sect1>
 
 <sect1 id="external-extensions">
 <title>Extensions</title>

  <indexterm>
   <primary>extensions</primary>
  </indexterm>

  <para>
   <productname>PostgreSQL</> is designed to be easily extensible. For
   this reason, extensions loaded into the database can function just
   like features that are packaged with the database. The
   <filename>contrib/</> directory shipped with the source code
   contains a large number of extensions. The <filename>README</> file
   in that directory contains a summary. They include conversion
   tools, full-text indexing, <acronym>XML</> tools, and additional
   data types and indexing methods. Other extensions are developed
   independently, like <application><ulink
   url="http://www.postgis.org/">PostGIS</ulink></>.  Even
   <productname>PostgreSQL</> replication solutions are developed
   externally. For example, <application> <ulink
   url="http://www.slony.info">Slony-I</ulink></> is a popular
   master/slave replication solution that is developed independently
   from the core project.
  </para>

  <para>
   There are several administration tools available for
   <productname>PostgreSQL</>. The most popular is
   <application><ulink url="http://www.pgadmin.org/">pgAdmin III</ulink></>, 
   and there are several commercially available ones as well.
  </para>
 </sect1>
</appendix>
