1<!-- doc/src/sgml/external-projects.sgml -->
2
3 <appendix id="external-projects">
4  <title>External Projects</title>
5
6  <para>
7   <productname>PostgreSQL</productname> is a complex software project,
8   and managing the project is difficult. We have found that many
9   enhancements to <productname>PostgreSQL</productname> can be more
10   efficiently developed separately from the core project.
11  </para>
12
13 <sect1 id="external-interfaces">
14  <title>Client Interfaces</title>
15
16  <indexterm>
17   <primary>interfaces</primary>
18   <secondary>externally maintained</secondary>
19  </indexterm>
20
21  <para>
22   There are only two client interfaces included in the base
23   <productname>PostgreSQL</productname> distribution:
24   <itemizedlist>
25    <listitem>
26     <para>
27      <link linkend="libpq">libpq</link> is included because it is the
28      primary C language interface, and because many other client interfaces
29      are built on top of it.
30     </para>
31    </listitem>
32
33    <listitem>
34     <para>
35      <link linkend="ecpg">ECPG</link> is included because it depends on the
36      server-side SQL grammar, and is therefore sensitive to changes in
37      <productname>PostgreSQL</productname> itself.
38     </para>
39    </listitem>
40   </itemizedlist>
41
42   All other language interfaces are external projects and are distributed
43   separately. <xref linkend="language-interface-table"/> includes a list of
44   some of these projects. Note that some of these packages might not be
45   released under the same license as <productname>PostgreSQL</productname>. For more
46   information on each language interface, including licensing terms, refer to
47   its website and documentation.
48  </para>
49
50  <table id="language-interface-table">
51   <title>Externally Maintained Client Interfaces</title>
52
53   <tgroup cols="4">
54    <thead>
55     <row>
56      <entry>Name</entry>
57      <entry>Language</entry>
58      <entry>Comments</entry>
59      <entry>Website</entry>
60     </row>
61    </thead>
62
63    <tbody>
64     <row>
65      <entry>DBD::Pg</entry>
66      <entry>Perl</entry>
67      <entry>Perl DBI driver</entry>
68      <entry><ulink url="https://metacpan.org/release/DBD-Pg"></ulink></entry>
69     </row>
70
71     <row>
72      <entry>JDBC</entry>
73      <entry>Java</entry>
74      <entry>Type 4 JDBC driver</entry>
75      <entry><ulink url="https://jdbc.postgresql.org/"></ulink></entry>
76     </row>
77
78     <row>
79      <entry>libpqxx</entry>
80      <entry>C++</entry>
81      <entry>C++ interface</entry>
82      <entry><ulink url="https://pqxx.org/"></ulink></entry>
83     </row>
84
85     <row>
86      <entry>node-postgres</entry>
87      <entry>JavaScript</entry>
88      <entry>Node.js driver</entry>
89      <entry><ulink url="https://node-postgres.com/"></ulink></entry>
90     </row>
91
92     <row>
93      <entry>Npgsql</entry>
94      <entry>.NET</entry>
95      <entry>.NET data provider</entry>
96      <entry><ulink url="https://www.npgsql.org/"></ulink></entry>
97     </row>
98
99     <row>
100      <entry>pgtcl</entry>
101      <entry>Tcl</entry>
102      <entry></entry>
103      <entry><ulink url="https://github.com/flightaware/Pgtcl"></ulink></entry>
104     </row>
105
106     <row>
107      <entry>pgtclng</entry>
108      <entry>Tcl</entry>
109      <entry></entry>
110      <entry><ulink url="https://sourceforge.net/projects/pgtclng/"></ulink></entry>
111     </row>
112
113     <row>
114      <entry>pq</entry>
115      <entry>Go</entry>
116      <entry>Pure Go driver for Go's database/sql</entry>
117      <entry><ulink url="https://github.com/lib/pq"></ulink></entry>
118     </row>
119
120     <row>
121      <entry>psqlODBC</entry>
122      <entry>ODBC</entry>
123      <entry>ODBC driver</entry>
124      <entry><ulink url="https://odbc.postgresql.org/"></ulink></entry>
125     </row>
126
127     <row>
128      <entry>psycopg</entry>
129      <entry>Python</entry>
130      <entry>DB API 2.0-compliant</entry>
131      <entry><ulink url="https://www.psycopg.org/"></ulink></entry>
132     </row>
133    </tbody>
134   </tgroup>
135  </table>
136 </sect1>
137
138 <sect1 id="external-admin-tools">
139 <title>Administration Tools</title>
140
141  <indexterm>
142   <primary>administration tools</primary>
143   <secondary>externally maintained</secondary>
144  </indexterm>
145
146  <para>
147   There are several administration tools available for
148   <productname>PostgreSQL</productname>. The most popular is
149   <application><ulink url="https://www.pgadmin.org/">pgAdmin</ulink></application>,
150   and there are several commercially available ones as well.
151  </para>
152 </sect1>
153
154 <sect1 id="external-pl">
155  <title>Procedural Languages</title>
156
157  <indexterm>
158   <primary>procedural language</primary>
159   <secondary>externally maintained</secondary>
160  </indexterm>
161
162  <para>
163   <productname>PostgreSQL</productname> includes several procedural
164   languages with the base distribution: <link
165   linkend="plpgsql">PL/pgSQL</link>, <link linkend="pltcl">PL/Tcl</link>,
166   <link linkend="plperl">PL/Perl</link>, and <link
167   linkend="plpython">PL/Python</link>.
168  </para>
169
170  <para>
171   In addition, there are a number of procedural languages that are developed
172   and maintained outside the core <productname>PostgreSQL</productname>
173   distribution. <xref linkend="pl-language-table"/> lists some of these
174   packages. Note that some of these projects might not be released under the same
175   license as <productname>PostgreSQL</productname>. For more information on each
176   procedural language, including licensing information, refer to its website
177   and documentation.
178  </para>
179
180  <table id="pl-language-table">
181   <title>Externally Maintained Procedural Languages</title>
182
183   <tgroup cols="3">
184    <thead>
185     <row>
186      <entry>Name</entry>
187      <entry>Language</entry>
188      <entry>Website</entry>
189     </row>
190    </thead>
191
192    <tbody>
193     <row>
194      <entry>PL/Java</entry>
195      <entry>Java</entry>
196      <entry><ulink url="https://tada.github.io/pljava/"></ulink></entry>
197     </row>
198
199     <row>
200      <entry>PL/Lua</entry>
201      <entry>Lua</entry>
202      <entry><ulink url="https://github.com/pllua/pllua-ng"></ulink></entry>
203     </row>
204
205     <row>
206      <entry>PL/R</entry>
207      <entry>R</entry>
208      <entry><ulink url="https://github.com/postgres-plr/plr"></ulink></entry>
209     </row>
210
211     <row>
212      <entry>PL/sh</entry>
213      <entry>Unix shell</entry>
214      <entry><ulink url="https://github.com/petere/plsh"></ulink></entry>
215     </row>
216
217     <row>
218      <entry>PL/v8</entry>
219      <entry>JavaScript</entry>
220      <entry><ulink url="https://github.com/plv8/plv8"></ulink></entry>
221     </row>
222    </tbody>
223   </tgroup>
224  </table>
225 </sect1>
226
227 <sect1 id="external-extensions">
228 <title>Extensions</title>
229
230  <indexterm>
231   <primary>extension</primary>
232   <secondary>externally maintained</secondary>
233  </indexterm>
234
235  <para>
236   <productname>PostgreSQL</productname> is designed to be easily extensible. For
237   this reason, extensions loaded into the database can function
238   just like features that are built in. The
239   <filename>contrib/</filename> directory shipped with the source code
240   contains several extensions, which are described in
241   <xref linkend="contrib"/>.  Other extensions are developed
242   independently, like <application><ulink
243   url="https://postgis.net/">PostGIS</ulink></application>.  Even
244   <productname>PostgreSQL</productname> replication solutions can be developed
245   externally. For example, <application> <ulink
246   url="https://www.slony.info">Slony-I</ulink></application> is a popular
247   master/standby replication solution that is developed independently
248   from the core project.
249  </para>
250 </sect1>
251</appendix>
252