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