]> granicus.if.org Git - postgresql/blob - doc/src/FAQ/FAQ.html
Update FAQ with current release version.
[postgresql] / doc / src / FAQ / FAQ.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2 <HTML>
3   <HEAD>
4     <META name="generator" content="HTML Tidy, see www.w3.org">
5     <META http-equiv="Content-Type" content="text/html; charset=US-ASCII">
6     <TITLE>PostgreSQL FAQ</TITLE>
7   </HEAD>
8
9   <BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000"
10   alink="#0000ff">
11     <H1>Frequently Asked Questions (FAQ) for PostgreSQL</H1>
12
13     <P>Last updated: Fri Mar 12 08:51:11 EST 2004</P>
14
15     <P>Current maintainer: Bruce Momjian (<A href=
16     "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
17     </P>
18
19     <P>The most recent version of this document can be viewed at <A href=
20     "http://www.PostgreSQL.org/docs/faqs/FAQ.html">http://www.PostgreSQL.org/docs/faqs/FAQ.html</A>.</P>
21
22     <P>Platform-specific questions are answered at <A href=
23     "http://www.PostgreSQL.org/docs/index.html">http://www.PostgreSQL.org/docs/index.html</A>.</P>
24     <HR>
25
26     <H2 align="center">General Questions</H2>
27     <A href="#1.1">1.1</A>) What is PostgreSQL? How is it pronounced?<BR>
28      <A href="#1.2">1.2</A>) What is the copyright on PostgreSQL?<BR>
29      <A href="#1.3">1.3</A>) What Unix platforms does PostgreSQL run
30     on?<BR>
31      <A href="#1.4">1.4</A>) What non-Unix ports are available?<BR>
32      <A href="#1.5">1.5</A>) Where can I get PostgreSQL?<BR>
33      <A href="#1.6">1.6</A>) Where can I get support?<BR>
34      <A href="#1.7">1.7</A>) What is the latest release?<BR>
35      <A href="#1.8">1.8</A>) What documentation is available?<BR>
36      <A href="#1.9">1.9</A>) How do I find out about known bugs or
37     missing features?<BR>
38      <A href="#1.10">1.10</A>) How can I learn <SMALL>SQL</SMALL>?<BR>
39      <A href="#1.11">1.11</A>) Is PostgreSQL Y2K compliant?<BR>
40      <A href="#1.12">1.12</A>) How do I join the development team?<BR>
41      <A href="#1.13">1.13</A>) How do I submit a bug report?<BR>
42      <A href="#1.14">1.14</A>) How does PostgreSQL compare to other
43     <SMALL>DBMS</SMALL>s?<BR>
44      <A href="#1.15">1.15</A>) How can I financially assist
45     PostgreSQL?<BR>
46      
47
48     <H2 align="center">User Client Questions</H2>
49     <A href="#2.1">2.1</A>) Are there <SMALL>ODBC</SMALL> drivers for
50     PostgreSQL?<BR>
51      <A href="#2.2">2.2</A>) What tools are available for using
52     PostgreSQL with Web pages?<BR>
53      <A href="#2.3">2.3</A>) Does PostgreSQL have a graphical user
54     interface?<BR>
55      <A href="#2.4">2.4</A>) What languages are available to
56     communicate with PostgreSQL?<BR>
57      
58
59     <H2 align="center">Administrative Questions</H2>
60     <A href="#3.1">3.1</A>) How do I install PostgreSQL somewhere other
61     than <I>/usr/local/pgsql</I>?<BR>
62      <A href="#3.2">3.2</A>) When I start <I>postmaster</I>, I get a
63     <I>Bad System Call</I> or core dumped message. Why?<BR>
64      <A href="#3.3">3.3</A>) When I try to start <I>postmaster</I>, I
65     get <I>IpcMemoryCreate</I> errors. Why?<BR>
66      <A href="#3.4">3.4</A>) When I try to start <I>postmaster</I>, I
67     get <I>IpcSemaphoreCreate</I> errors. Why?<BR>
68      <A href="#3.5">3.5</A>) How do I control connections from other
69     hosts?<BR>
70      <A href="#3.6">3.6</A>) How do I tune the database engine for
71     better performance?<BR>
72      <A href="#3.7">3.7</A>) What debugging features are available?<BR>
73      <A href="#3.8">3.8</A>) Why do I get <I>"Sorry, too many
74     clients"</I> when trying to connect?<BR>
75      <A href="#3.9">3.9</A>) What is in the  <I>pgsql_tmp</I>
76     directory?<BR>
77      <A href="#3.10">3.10</A>) Why do I need to do a dump and restore
78     to upgrade PostgreSQL releases?<BR>
79
80
81     <H2 align="center">Operational Questions</H2>
82     <A href="#4.1">4.1</A>) What is the difference between binary
83     cursors and normal cursors?<BR>
84      <A href="#4.2">4.2</A>) How do I <SMALL>SELECT</SMALL> only the
85     first few rows of a query?  A random row?<BR>
86      <A href="#4.3">4.3</A>) How do I get a list of tables or other
87     things I can see in <I>psql</I>?<BR>
88      <A href="#4.4">4.4</A>) How do you remove a column from a
89     table, or change it's data type?<BR>
90      <A href="#4.5">4.5</A>) What is the maximum size for a row, a
91     table, and a database?<BR>
92      <A href="#4.6">4.6</A>) How much database disk space is required
93     to store data from a typical text file?<BR>
94      <A href="#4.7">4.7</A>) How do I find out what tables, indexes,
95     databases, and users are defined?<BR>
96      <A href="#4.8">4.8</A>) My queries are slow or don't make use of
97     the indexes. Why?<BR>
98      <A href="#4.9">4.9</A>) How do I see how the query optimizer is
99     evaluating my query?<BR>
100      <A href="#4.10">4.10</A>) What is an R-tree index?<BR>
101      <A href="#4.11">4.11</A>) What is the Genetic Query Optimizer?<BR>
102      <A href="#4.12">4.12</A>) How do I perform regular expression
103     searches and case-insensitive regular expression searches? How do I
104     use an index for case-insensitive searches?<BR>
105      <A href="#4.13">4.13</A>) In a query, how do I detect if a field
106     is <SMALL>NULL</SMALL>?<BR>
107      <A href="#4.14">4.14</A>) What is the difference between the
108     various character types?<BR>
109      <A href="#4.15.1">4.15.1</A>) How do I create a
110     serial/auto-incrementing field?<BR>
111      <A href="#4.15.2">4.15.2</A>) How do I get the value of a
112     <SMALL>SERIAL</SMALL> insert?<BR>
113      <A href="#4.15.3">4.15.3</A>) Don't <I>currval()</I> and
114     <I>nextval()</I> lead to a race condition with other users?<BR>
115      <A href="#4.15.4">4.15.4</A>) Why aren't my sequence numbers
116     reused on transaction abort? Why are there gaps in the numbering of
117     my sequence/SERIAL column?<BR>
118      <A href="#4.16">4.16</A>) What is an <SMALL>OID</SMALL>? What is a
119     <SMALL>TID</SMALL>?<BR>
120      <A href="#4.17">4.17</A>) What is the meaning of some of the terms
121     used in PostgreSQL?<BR>
122      <A href="#4.18">4.18</A>) Why do I get the error <I>"ERROR: Memory
123     exhausted in AllocSetAlloc()"</I>?<BR>
124      <A href="#4.19">4.19</A>) How do I tell what PostgreSQL version I
125     am running?<BR>
126      <A href="#4.20">4.20</A>) Why does my large-object operations get
127     <I>"invalid large obj descriptor"</I>?<BR>
128      <A href="#4.21">4.21</A>) How do I create a column that will
129     default to the current time?<BR>
130      <A href="#4.22">4.22</A>) Why are my subqueries using
131     <CODE><SMALL>IN</SMALL></CODE> so slow?<BR>
132      <A href="#4.23">4.23</A>) How do I perform an outer join?<BR>
133      <A href="#4.24">4.24</A>) How do I perform queries using multiple
134     databases?<BR>
135      <A href="#4.25">4.25</A>) How do I return multiple rows or columns
136     from a function?<BR>
137      <A href="#4.26">4.26</A>) Why can't I reliably create/drop
138     temporary tables in PL/PgSQL functions?<BR>
139      <A href="#4.27">4.27</A>) What replication options are available?<BR>
140      <A href="#4.28">4.28</A>) What encryption options are available?<BR>
141      
142
143     <H2 align="center">Extending PostgreSQL</H2>
144     <A href="#5.1">5.1</A>) I wrote a user-defined function. When I run
145     it in <I>psql</I>, why does it dump core?<BR>
146      <A href="#5.2">5.2</A>) How can I contribute some nifty new types
147     and functions to PostgreSQL?<BR>
148      <A href="#5.3">5.3</A>) How do I write a C function to return a
149     tuple?<BR>
150      <A href="#5.4">5.4</A>) I have changed a source file. Why does the
151     recompile not see the change?<BR>
152      
153     <HR>
154
155     <H2 align="center">General Questions</H2>
156
157     <H4><A name="1.1">1.1</A>) What is PostgreSQL? How is it pronounced?</H4>
158
159     <P>PostgreSQL is pronounced <I>Post-Gres-Q-L</I>.  The name "Postgres" is
160     also used in conversation.</P>
161
162     <P>PostgreSQL is an enhancement of the POSTGRES database management
163     system, a next-generation <SMALL>DBMS</SMALL> research prototype.
164     While PostgreSQL retains the powerful data model and rich data
165     types of POSTGRES, it replaces the PostQuel query language with an
166     extended subset of <SMALL>SQL</SMALL>. PostgreSQL is free and the
167     complete source is available.</P>
168
169     <P>PostgreSQL development is performed by a team of
170     developers who all subscribe to the PostgreSQL development mailing
171     list. The current coordinator is Marc G. Fournier (<A href=
172     "mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A>). (See
173     section <a href="#1.6">1.6</a> on how to join). This team is now
174     responsible for all development of PostgreSQL.  It is a community
175     project and is not controlled by any company.  To get involved, see
176     the developer's FAQ,<A href=
177     "http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html">http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html</A>
178     </P>
179
180     <P>The authors of PostgreSQL 1.01 were Andrew Yu and Jolly Chen.
181     Many others have contributed to the porting, testing, debugging,
182     and enhancement of the code. The original Postgres code, from which
183     PostgreSQL is derived, was the effort of many graduate students,
184     undergraduate students, and staff programmers working under the
185     direction of Professor Michael Stonebraker at the University of
186     California, Berkeley.</P>
187
188     <P>The original name of the software at Berkeley was Postgres. When
189     <SMALL>SQL</SMALL> functionality was added in 1995, its name was
190     changed to Postgres95. The name was changed at the end of 1996 to
191     PostgreSQL.</P>
192
193     <H4><A name="1.2">1.2</A>) What is the copyright on
194     PostgreSQL?</H4>
195
196     <P>PostgreSQL is subject to the following COPYRIGHT:</P>
197
198     <P>PostgreSQL Data Base Management System</P>
199
200     <P>Portions copyright (c) 1996-2002, PostgreSQL Global Development
201     Group Portions Copyright (c) 1994-6 Regents of the University of
202     California</P>
203
204     <P>Permission to use, copy, modify, and distribute this software
205     and its documentation for any purpose, without fee, and without a
206     written agreement is hereby granted, provided that the above
207     copyright notice and this paragraph and the following two
208     paragraphs appear in all copies.</P>
209
210     <P>IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY
211     PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
212     DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS
213     SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
214     CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</P>
215
216     <P>THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
217     WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
218     OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
219     SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE
220     UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE,
221     SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.</P>
222
223     <P>The above is the BSD license, the classic open-source license.
224     It has no restrictions on how the source code may be used. We like
225     it and have no intention of changing it.</P>
226
227     <H4><A name="1.3">1.3</A>) What Unix platforms does PostgreSQL run
228     on?</H4>
229
230     <P>In general, a modern Unix-compatible platform should be able to
231     run PostgreSQL. The platforms that had received explicit testing at
232     the time of release are listed in the installation
233     instructions.</P>
234
235     <H4><A name="1.4">1.4</A>) What non-Unix ports are available?</H4>
236
237     <P><STRONG>Client</STRONG></P>
238
239     <P>It is possible to compile the <I>libpq</I> C library, psql, and
240     other interfaces and client applications to run on MS Windows platforms.
241     In this case, the client is running on MS Windows, and communicates
242     via TCP/IP to a server running on one of our supported Unix
243     platforms. A file <I>win32.mak</I> is included in the distribution
244     for making a Win32 <I>libpq</I> library and <I>psql</I>. PostgreSQL
245     also communicates with <SMALL>ODBC</SMALL> clients.</P>
246
247     <P><STRONG>Server</STRONG></P>
248
249     <P>The database server can run on Windows NT and Win2k using
250     Cygwin, the Cygnus Unix/NT porting library. See
251     <I>pgsql/doc/FAQ_MSWIN</I> in the distribution or the MS Windows FAQ
252     at <A href="http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN">
253     http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN</A>.</P>
254
255     <p>A native port to MS Win NT/2000/XP is currently being worked
256     on. For more details on the current status of PostgreSQL on Windows see
257     <a href="http://techdocs.postgresql.org/guides/Windows">
258     http://techdocs.postgresql.org/guides/Windows</a> and
259     <a href="http://momjian.postgresql.org/main/writings/pgsql/win32.html">
260     http://momjian.postgresql.org/main/writings/pgsql/win32.html</a>.</p>
261
262     <p>There is also a Novell Netware 6 port at
263     <a href="http://forge.novell.com">http://forge.novell.com</a>.</p>
264
265     <H4><A name="1.5">1.5</A>) Where can I get PostgreSQL?</H4>
266
267     <P>The primary anonymous ftp site for PostgreSQL is <A href=
268     "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>.
269     For mirror sites, see our main web site.</P>
270
271     <H4><A name="1.6">1.6</A>) Where can I get support?</H4>
272
273     <P>The main mailing list is: <A href=
274     "mailto:pgsql-general@PostgreSQL.org">pgsql-general@PostgreSQL.org</A>.
275     It is available for discussion of matters pertaining to PostgreSQL.
276     To subscribe, send mail with the following lines in the body (not
277     the subject line):</P>
278 <PRE>
279     subscribe
280     end
281 </PRE>
282
283     <P>to <A href=
284     "mailto:pgsql-general-request@PostgreSQL.org">pgsql-general-request@PostgreSQL.org</A>.</P>
285
286     <P>There is also a digest list available. To subscribe to this
287     list, send email to: <A href=
288     "mailto:pgsql-general-digest-request@PostgreSQL.org">pgsql-general-digest-request@PostgreSQL.org</A>
289     with a body of:</P>
290 <PRE>
291     subscribe
292     end
293 </PRE>
294
295     Digests are sent out to members of this list whenever the main list
296     has received around 30k of messages. 
297
298     <P>The bugs mailing list is available. To subscribe to this list,
299     send email to <A href=
300     "mailto:pgsql-bugs-request@PostgreSQL.org">pgsql-bugs-request@PostgreSQL.org</A>
301     with a body of:</P>
302 <PRE>
303     subscribe
304     end
305 </PRE>
306
307     There is also a developers discussion mailing list available. To
308     subscribe to this list, send email to <A href=
309     "mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</A>
310     with a body of: 
311 <PRE>
312     subscribe
313     end
314 </PRE>
315
316     <P>Additional mailing lists and information about PostgreSQL can be
317     found via the PostgreSQL WWW home page at:</P>
318
319     <BLOCKQUOTE>
320       <A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A>
321     </BLOCKQUOTE>
322
323     <P>There is also an IRC channel on Freenode and EFNet,
324     channel <I>#PostgreSQL</I>. You can use the Unix command <CODE>irc -c
325     '#PostgreSQL' "$USER" irc.phoenix.net.</CODE> or <CODE>irc -c
326     '#PostgreSQL' "$USER" irc.freenode.net.</CODE></P>
327
328     <P>A list of commercial support companies is available at <A href=
329     "http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</A>.</P>
330
331     <H4><A name="1.7">1.7</A>) What is the latest release?</H4>
332
333     <P>The latest release of PostgreSQL is version 7.4.2.</P>
334
335     <P>We plan to have major releases every six to eight months.</P>
336
337     <H4><A name="1.8">1.8</A>) What documentation is available?</H4>
338
339     <P>Several manuals, manual pages, and some small test examples are
340     included in the distribution. See the <I>/doc</I> directory. You
341     can also browse the manuals online at <A href=
342     "http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</A>.</P>
343
344     <P>There are two PostgreSQL books available online at <A href=
345     "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
346     and <A href=
347     "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>.
348     There is a list of PostgreSQL books available for purchase at <A
349     href=
350     "http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A>.
351     There is also a collection of PostgreSQL technical articles at <A
352     href=
353     "http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</A>.</P>
354
355     <P><I>psql</I> has some nice \d commands to show information about
356     types, operators, functions, aggregates, etc.</P>
357
358     <P>Our web site contains even more documentation.</P>
359
360     <H4><A name="1.9">1.9</A>) How do I find out about known bugs or
361     missing features?</H4>
362
363     <P>PostgreSQL supports an extended subset of <SMALL>SQL</SMALL>-92.
364     See our <A href="http://developer.PostgreSQL.org/todo.php">TODO</A>
365     list for known bugs, missing features, and future plans.</P>
366
367     <H4><A name="1.10">1.10</A>) How can I learn
368     <SMALL>SQL</SMALL>?</H4>
369
370     <P>The PostgreSQL book at <A href=
371     "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
372     teaches <SMALL>SQL</SMALL>. There is another PostgreSQL book at <A
373     href=
374     "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook.</A>
375     There is a nice tutorial at <A href=
376     "http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A>
377     at <A href=
378     "http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">
379     http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,</A>
380     and at <A href=
381     "http://sqlcourse.com/">http://sqlcourse.com.</A></P>
382
383     <P>Another one is "Teach Yourself SQL in 21 Days, Second Edition"
384     at <A href=
385     "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A></P>
386
387     <P>Many of our users like <I>The Practical SQL Handbook</I>,
388     Bowman, Judith S., et al., Addison-Wesley. Others like <I>The
389     Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>
390
391     <H4><A name="1.11">1.11</A>) Is PostgreSQL Y2K compliant?</H4>
392
393     <P>Yes, we easily handle dates past the year 2000 AD, and before
394     2000 BC.</P>
395
396     <H4><A name="1.12">1.12</A>) How do I join the development
397     team?</H4>
398
399     <P>First, download the latest source and read the PostgreSQL
400     Developers documentation on our web site, or in the distribution.
401     Second, subscribe to the <I>pgsql-hackers</I> and
402     <I>pgsql-patches</I> mailing lists. Third, submit high quality
403     patches to pgsql-patches.</P>
404
405     <P>There are about a dozen people who have commit privileges to the
406     PostgreSQL <SMALL>CVS</SMALL> archive. They each have submitted so
407     many high-quality patches that it was impossible for the existing
408     committers to keep up, and we had confidence that patches they
409     committed were of high quality.</P>
410
411     <H4><A name="1.13">1.13</A>) How do I submit a bug report?</H4>
412
413     <P>Please visit the PostgreSQL BugTool page at <A href=
414     "http://www.PostgreSQL.org/bugs/bugs.php">http://www.PostgreSQL.org/bugs/bugs.php</A>,
415     which gives guidelines and directions on how to submit a
416     bug report.</P>
417
418     <P>Also check out our ftp site <A href=
419     "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A> to
420     see if there is a more recent PostgreSQL version or patches.</P>
421
422     <H4><A name="1.14">1.14</A>) How does PostgreSQL compare to other
423     <SMALL>DBMS</SMALL>s?</H4>
424
425     <P>There are several ways of measuring software: features,
426     performance, reliability, support, and price.</P>
427
428     <DL>
429       <DT><B>Features</B></DT>
430
431       <DD>PostgreSQL has most features present in large commercial
432       <SMALL>DBMS</SMALL>s, like transactions, subselects, triggers,
433       views, foreign key referential integrity, and sophisticated
434       locking. We have some features they do not have, like
435       user-defined types, inheritance, rules, and multi-version
436       concurrency control to reduce lock contention.<BR>
437       <BR>
438       </DD>
439
440       <DT><B>Performance</B></DT>
441
442       <DD>PostgreSQL has performance similar to other commercial and
443       open source databases. it is faster for some things, slower for
444       others. In comparison to MySQL or leaner database systems, we are
445       faster for multiple users, complex queries, and a read/write query
446       load.  MySQL is faster for simple SELECT queries done by a few users.
447       Of course, MySQL does not have most of the features mentioned in the
448       <I>Features</I> section above. We are built for reliability and
449       features, and we continue to improve performance in every
450       release. There is an interesting Web page comparing PostgreSQL to
451       MySQL at <A href="http://openacs.org/philosophy/why-not-mysql.html">
452       http://openacs.org/philosophy/why-not-mysql.html</A>  Also, MySQL is
453       is a company that distributes its products via open source, and requires
454       a commercial license for close-source software, not an
455       open source development community like PostgreSQL.<BR>
456
457       <BR>
458       </DD>
459
460       <DT><B>Reliability</B></DT>
461
462       <DD>We realize that a <SMALL>DBMS</SMALL> must be reliable, or it
463       is worthless. We strive to release well-tested, stable code that
464       has a minimum of bugs. Each release has at least one month of
465       beta testing, and our release history shows that we can provide
466       stable, solid releases that are ready for production use. We
467       believe we compare favorably to other database software in this
468       area.<BR>
469       <BR>
470       </DD>
471
472       <DT><B>Support</B></DT>
473
474       <DD>Our mailing lists provide contact with a large group of developers
475       and users to help resolve any problems encountered. While we cannot
476       guarantee a fix, commercial <SMALL>DBMS</SMALL>s do not always
477       supply a fix either. Direct access to developers, the user
478       community, manuals, and the source code often make PostgreSQL
479       support superior to other <SMALL>DBMS</SMALL>s. There is
480       commercial per-incident support available for those who need it.
481       (See <A href="#1.6">FAQ section 1.6</A>.)<BR>
482       <BR>
483       </DD>
484
485       <DT><B>Price</B></DT>
486
487       <DD>We are free for all use, both commercial and non-commercial.
488       You can add our code to your product with no limitations, except
489       those outlined in our BSD-style license stated above.<BR>
490       <BR>
491       </DD>
492     </DL>
493
494     <H4><A name="1.15">1.15</A>) How can I financially assist
495     PostgreSQL?</H4>
496
497     <P>PostgreSQL has had a first-class infrastructure since we started
498     in 1996. This is all thanks to Marc Fournier, who has created
499     and managed this infrastructure over the years.</P>
500
501     <P>Quality infrastructure is very important to an open-source
502     project. It prevents disruptions that can greatly delay forward
503     movement of the project.</P>
504
505     <P>Of course, this infrastructure is not cheap. There are a variety
506     of monthly and one-time expenses that are required to keep it
507     going. If you or your company has money it can donate to help fund
508     this effort, please go to <A href="http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</A>
509     and make a donation.</P>
510
511     <P>Although the web page mentions PostgreSQL, Inc, the
512     "contributions" item is solely to support the PostgreSQL project
513     and does not fund any specific company. If you prefer, you can also
514     send a check to the contact address.</P>
515     <HR>
516
517     <P>Also, if you have a success story about PostgreSQL, please submit
518     it to our advocacy site at <a href="http://advocacy.postgresql.org">
519     http://advocacy.postgresql.org</a>.</P>
520
521
522     <H2 align="center">User Client Questions</H2>
523
524     <H4><A name="2.1">2.1</A>) Are there <SMALL>ODBC</SMALL> drivers
525     for PostgreSQL?</H4>
526
527     <P>There are two <SMALL>ODBC</SMALL> drivers available, PsqlODBC
528     and OpenLink <SMALL>ODBC</SMALL>.</P>
529
530     <P>You can download PsqlODBC from <A href=
531     "http://gborg.postgresql.org/project/psqlodbc/projdisplay.php">
532     http://gborg.postgresql.org/project/psqlodbc/projdisplay.php</A>.</P>
533
534     <P>OpenLink <SMALL>ODBC</SMALL> can be gotten from <A href=
535     "http://www.openlinksw.com/">http://www.openlinksw.com</A>. It
536     works with their standard <SMALL>ODBC</SMALL> client software so
537     you'll have PostgreSQL <SMALL>ODBC</SMALL> available on every
538     client platform they support (Win, Mac, Unix, VMS).</P>
539
540     <P>They will probably be selling this product to people who need
541     commercial-quality support, but a freeware version will always be
542     available. Please send questions to <A href=
543     "mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>.</P>
544
545     <H4><A name="2.2">2.2</A>) What tools are available for using
546     PostgreSQL with Web pages?</H4>
547
548     <P>A nice introduction to Database-backed Web pages can be seen at:
549     <A href="http://www.webreview.com">http://www.webreview.com</A></P>
550
551     <P>For Web integration, PHP is an excellent interface. It is at <A
552     href="http://www.php.net">http://www.php.net</A>.</P>
553
554     <P>For complex cases, many use the Perl interface and CGI.pm or mod_perl.</P>
555
556     <H4><A name="2.3">2.3</A>) Does PostgreSQL have a graphical user
557     interface?</H4>
558
559     <P>Yes, there are several graphical interfaces to PostgreSQL available.
560     These include PgAccess <a href="http://www.pgaccess.org">
561     http://www.pgaccess.org</a>), PgAdmin III (<a
562     href="http://www.pgadmin.org">http://www.pgadmin.org</a>, RHDB Admin (<a
563     href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/
564     </a>) and Rekall (<a href="http://www.thekompany.com/products/rekall/">
565     http://www.thekompany.com/products/rekall/</a>, proprietary). There is 
566     also PHPPgAdmin (<a href="http://phppgadmin.sourceforge.net/">
567     http://phppgadmin.sourceforge.net/ </a>), a web-based interface to 
568     PostgreSQL.</P>
569
570     <P>See <a href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</a> for a more detailed list.</P>
571
572     <H4><A name="2.4">2.4</A>) What languages are able to communicate with 
573     PostgreSQL?</H4>
574
575     <P>Most popular programming languages contain an interface to
576     PostgreSQL. Check your programming language's list of extension
577     modules.</P>
578
579     <P>The following interfaces are included in the PostgreSQL
580     distribution:</P>
581
582     <UL>
583       <LI>C (libpq)</LI>
584
585       <LI>Embedded C (ecpg)</LI>
586
587       <LI>Java (jdbc)</LI>
588
589       <LI>Python (PyGreSQL)</LI>
590
591       <LI>TCL (libpgtcl)</LI>
592
593     </UL>
594     <P>Additional interfaces are available at 
595     <a href="http://gborg.postgresql.org">http://gborg.postgresql.org</A>
596     in the <I>Drivers/Interfaces</I> section.
597     </P>
598     <HR>
599
600     <H2 align="center">Administrative Questions</H2>
601
602     <H4><A name="3.1">3.1</A>) How do I install PostgreSQL somewhere
603     other than <I>/usr/local/pgsql</I>?</H4>
604
605     <P>Specify the <I>--prefix</I> option when running
606     <I>configure</I>.</P>
607
608     <H4><A name="3.2">3.2</A>) When I start <I>postmaster</I>, I get a
609     <I>Bad System Call</I> or core dumped message. Why?</H4>
610
611     <P>It could be a variety of problems, but first check to see that
612     you have System V extensions installed in your kernel. PostgreSQL
613     requires kernel support for shared memory and semaphores.</P>
614
615     <H4><A name="3.3">3.3</A>) When I try to start <I>postmaster</I>, I
616     get <I>IpcMemoryCreate</I> errors. Why?</H4>
617
618     <P>You either do not have shared memory configured properly in your
619     kernel or you need to enlarge the shared memory available in the
620     kernel. The exact amount you need depends on your architecture and
621     how many buffers and backend processes you configure for
622     <I>postmaster</I>. For most systems, with default numbers of
623     buffers and processes, you need a minimum of ~1 MB. See the <A
624     href=
625     "http://www.PostgreSQL.org/docs/view.php?version=current&amp;idoc=1&amp;file=kernel-resources.html">PostgreSQL
626     Administrator's Guide</A> for more detailed information about
627     shared memory and semaphores.</P>
628
629     <H4><A name="3.4">3.4</A>) When I try to start <I>postmaster</I>, I
630     get <I>IpcSemaphoreCreate</I> errors. Why?</H4>
631
632     <P>If the error message is <I>IpcSemaphoreCreate: semget failed (No
633     space left on device)</I> then your kernel is not configured with
634     enough semaphores. Postgres needs one semaphore per potential
635     backend process. A temporary solution is to start <I>postmaster</I>
636     with a smaller limit on the number of backend processes. Use
637     <I>-N</I> with a parameter less than the default of 32. A more
638     permanent solution is to increase your kernel's
639     <SMALL>SEMMNS</SMALL> and <SMALL>SEMMNI</SMALL> parameters.</P>
640
641     <P>Inoperative semaphores can also cause crashes during heavy
642     database access.</P>
643
644     <P>If the error message is something else, you might not have
645     semaphore support configured in your kernel at all. See the
646     PostgreSQL Administrator's Guide for more detailed information
647     about shared memory and semaphores.</P>
648
649     <H4><A name="3.5">3.5</A>) How do I control connections from other
650     hosts?</H4>
651
652     <P>By default, PostgreSQL only allows connections from the local
653     machine using Unix domain sockets. Other machines will not be able
654     to connect unless you add the <I>-i</I> flag to <I>postmaster</I>,
655     <B>and</B> enable host-based authentication by modifying the file
656     <I>$PGDATA/pg_hba.conf</I> accordingly. This will allow TCP/IP
657     connections.</P>
658
659     <H4><A name="3.6">3.6</A>) How do I tune the database engine for
660     better performance?</H4>
661
662     <P>Certainly, indexes can speed up queries. The
663     <SMALL>EXPLAIN</SMALL> command allows you to see how PostgreSQL is
664     interpreting your query, and which indexes are being used.</P>
665
666     <P>If you are doing many <SMALL>INSERTs</SMALL>, consider doing
667     them in a large batch using the <SMALL>COPY</SMALL> command. This
668     is much faster than individual <SMALL>INSERTS</SMALL>. Second,
669     statements not in a <SMALL>BEGIN WORK/COMMIT</SMALL> transaction
670     block are considered to be in their own transaction. Consider
671     performing several statements in a single transaction block. This
672     reduces the transaction overhead. Also, consider dropping and
673     recreating indexes when making large data changes.</P>
674
675     <P>There are several tuning options. You can disable <I>fsync()</I>
676     by starting <I>postmaster</I> with a <I>-o -F</I> option. This will
677     prevent <I>fsync()</I>s from flushing to disk after every
678     transaction.</P>
679
680     <P>You can also use the <I>postmaster</I> <I>-B</I> option to
681     increase the number of shared memory buffers used by the backend
682     processes. If you make this parameter too high, the
683     <I>postmaster</I> may not start because you have exceeded your
684     kernel's limit on shared memory space. Each buffer is 8K and the
685     default is 64 buffers.</P>
686
687     <P>You can also use the backend <I>-S</I> option to increase the
688     maximum amount of memory used by the backend process for temporary
689     sorts. The <I>-S</I> value is measured in kilobytes, and the
690     default is 512 (i.e. 512K).</P>
691
692     <P>You can also use the <SMALL>CLUSTER</SMALL> command to group
693     data in tables to match an index. See the <SMALL>CLUSTER</SMALL>
694     manual page for more details.</P>
695
696     <H4><A name="3.7">3.7</A>) What debugging features are
697     available?</H4>
698
699     <P>PostgreSQL has several features that report status information
700     that can be valuable for debugging purposes.</P>
701
702     <P>First, by running <I>configure</I> with the --enable-cassert
703     option, many <I>assert()</I>s monitor the progress of the backend
704     and halt the program when something unexpected occurs.</P>
705
706     <P>Both <I>postmaster</I> and <I>postgres</I> have several debug
707     options available. First, whenever you start <I>postmaster</I>,
708     make sure you send the standard output and error to a log file,
709     like:</P>
710 <PRE>
711     cd /usr/local/pgsql
712     ./bin/postmaster &gt;server.log 2&gt;&amp;1 &amp;
713 </PRE>
714
715     <P>This will put a server.log file in the top-level PostgreSQL
716     directory. This file contains useful information about problems or
717     errors encountered by the server. <I>Postmaster</I> has a <I>-d</I>
718     option that allows even more detailed information to be reported.
719     The <I>-d</I> option takes a number that specifies the debug level.
720     Be warned that high debug level values generate large log
721     files.</P>
722
723     <P>If <I>postmaster</I> is not running, you can actually run the
724     <I>postgres</I> backend from the command line, and type your
725     <SMALL>SQL</SMALL> statement directly. This is recommended
726     <B>only</B> for debugging purposes. Note that a newline terminates
727     the query, not a semicolon. If you have compiled with debugging
728     symbols, you can use a debugger to see what is happening. Because
729     the backend was not started from <I>postmaster</I>, it is not
730     running in an identical environment and locking/backend interaction
731     problems may not be duplicated.</P>
732
733     <P>If <I>postmaster</I> is running, start <I>psql</I> in one
734     window, then find the <SMALL>PID</SMALL> of the <I>postgres</I>
735     process used by <I>psql</I>. Use a debugger to attach to the
736     <I>postgres</I> <SMALL>PID</SMALL>. You can set breakpoints in the
737     debugger and issue queries from <I>psql</I>. If you are debugging
738     <I>postgres</I> startup, you can set PGOPTIONS="-W n", then start
739     <I>psql</I>. This will cause startup to delay for <I>n</I> seconds
740     so you can attach to the process with the debugger, set any
741     breakpoints, and continue through the startup sequence.</P>
742
743     <P>The <I>postgres</I> program has <I>-s, -A</I>, and <I>-t</I>
744     options that can be very useful for debugging and performance
745     measurements.</P>
746
747     <P>You can also compile with profiling to see what functions are
748     taking execution time. The backend profile files will be deposited
749     in the <I>pgsql/data/base/dbname</I> directory. The client profile
750     file will be put in the client's current directory. Linux requires
751     a compile with <I>-DLINUX_PROFILE</I> for proper profiling.</P>
752
753     <H4><A name="3.8">3.8</A>) Why do I get <I>"Sorry, too many
754     clients"</I> when trying to connect?</H4>
755
756     <P>You need to increase <I>postmaster</I>'s limit on how many
757     concurrent backend processes it can start.</P>
758
759     <P>The default limit is 32 processes. You can increase it by
760     restarting <I>postmaster</I> with a suitable <I>-N</I> value or
761     modifying <I>postgresql.conf</I>.</P>
762
763     <P>Note that if you make <I>-N</I> larger than 32, you must also
764     increase <I>-B</I> beyond its default of 64; <I>-B</I> must be at
765     least twice <I>-N</I>, and probably should be more than that for
766     best performance. For large numbers of backend processes, you are
767     also likely to find that you need to increase various Unix kernel
768     configuration parameters. Things to check include the maximum size
769     of shared memory blocks, <SMALL>SHMMAX;</SMALL> the maximum number
770     of semaphores, <SMALL>SEMMNS</SMALL> and <SMALL>SEMMNI;</SMALL> the
771     maximum number of processes, <SMALL>NPROC;</SMALL> the maximum
772     number of processes per user, <SMALL>MAXUPRC;</SMALL> and the
773     maximum number of open files, <SMALL>NFILE</SMALL> and
774     <SMALL>NINODE</SMALL>. The reason that PostgreSQL has a limit on
775     the number of allowed backend processes is so your system won't run
776     out of resources.</P>
777
778     <H4><A name="3.9">3.9</A>) What is in the <I>pgsql_tmp</I> directory?</H4>
779
780     <P>This directory contains temporary files generated by the query 
781     executor. For example, if a sort needs to be done to satisfy an 
782     <SMALL>ORDER BY</SMALL> and the sort requires more space than the
783     backend's <I>-S</I> parameter allows, then temporary files are created
784     here to hold the extra data.</P>
785
786     <P>The temporary files are usually deleted automatically, but might
787     remain if a backend crashes during a sort. A stop and restart of the
788     <I>postmaster</I> will remove files from those directories.</P>
789
790     <H4><A name="3.10">3.10</A>) Why do I need to do a dump and restore
791     to upgrade between major PostgreSQL releases?</H4>
792
793     <P>The PostgreSQL team makes only small changes between minor releases,
794     so upgrading from 7.2 to 7.2.1 does not require a dump and restore.
795     However, major releases (e.g. from 7.2 to 7.3) often change the internal
796     format of system tables and data files. These changes are often complex,
797     so we don't maintain backward compatability for data files. A dump outputs
798     data in a generic format that can then be loaded in using the new internal
799     format.</P>
800
801     <P>In releases where the on-disk format does not change, the
802     <I>pg_upgrade</I> script can be used to upgrade without a dump/restore.
803     The release notes mention whether <I>pg_upgrade</I> is available for the
804     release.</P>
805
806     <HR>
807
808     <H2 align="center">Operational Questions</H2>
809
810     <H4><A name="4.1">4.1</A>) What is the difference between binary
811     cursors and normal cursors?</H4>
812
813     <P>See the <SMALL>DECLARE</SMALL> manual page for a
814     description.</P>
815
816     <H4><A name="4.2">4.2</A>) How do I <SMALL>SELECT</SMALL> only the
817     first few rows of a query?  A random row?</H4>
818
819     <P>See the <SMALL>FETCH</SMALL> manual page, or use
820     <SMALL>SELECT</SMALL> ... <SMALL>LIMIT</SMALL>....</P>
821
822     <P>The entire query may have to be evaluated, even if you only want
823     the first few rows. Consider using a query that has an <SMALL>ORDER
824     BY</SMALL>. If there is an index that matches the <SMALL>ORDER
825     BY</SMALL>, PostgreSQL may be able to evaluate only the first few
826     records requested, or the entire query may have to be evaluated
827     until the desired rows have been generated.</P>
828
829     <P>To <SMALL>SELECT</SMALL> a random row, use:
830 <PRE>
831     SELECT col
832     FROM tab
833     ORDER BY random()
834     LIMIT 1;
835 </PRE>
836
837     <H4><A name="4.3">4.3</A>) How do I get a list of tables or other
838     things I can see in <I>psql</I>?</H4>
839
840     <P>You can read the source code for <I>psql</I> in file
841     <I>pgsql/src/bin/psql/describe.c</I>. It contains
842     <SMALL>SQL</SMALL> commands that generate the output for psql's
843     backslash commands. You can also start <I>psql</I> with the
844     <I>-E</I> option so it will print out the queries it uses to
845     execute the commands you give.</P>
846
847     <H4><A name="4.4">4.4</A>) How do you remove a column from a
848     table, or change its data type?</H4>
849
850     <P><SMALL>DROP COLUMN</SMALL> functionality was added in release 7.3 with
851     <SMALL>ALTER TABLE DROP COLUMN</SMALL>.  In earlier versions,
852     you can do this:</P>
853 <PRE>
854     BEGIN;
855     LOCK TABLE old_table;
856     SELECT ...  -- select all columns but the one you want to remove
857     INTO TABLE new_table
858     FROM old_table;
859     DROP TABLE old_table;
860     ALTER TABLE new_table RENAME TO old_table;
861     COMMIT;
862 </PRE>
863
864     <P>To change the data type of a column, do this:</P>
865 <PRE>
866     BEGIN;
867     ALTER TABLE tab ADD COLUMN new_col <i>new_data_type</i>;
868     UPDATE tab SET new_col = CAST(old_col AS <i>new_data_type</i>);
869     ALTER TABLE tab DROP COLUMN old_col;
870     COMMIT;
871 </PRE>
872     <P>You might then want to do <I>VACUUM FULL tab</I> to reclaim the
873     disk space used by the expired rows.</P>
874     
875     <H4><A name="4.5">4.5</A>) What is the maximum size for a row, a
876     table, and a database?</H4>
877
878     <P>These are the limits:</P>
879 <PRE>
880     Maximum size for a database?             unlimited (32 TB databases exist)
881     Maximum size for a table?                32 TB
882     Maximum size for a row?                  1.6TB
883     Maximum size for a field?                1 GB
884     Maximum number of rows in a table?       unlimited
885     Maximum number of columns in a table?    250-1600 depending on column types
886     Maximum number of indexes on a table?    unlimited
887 </PRE>
888
889     Of course, these are not actually unlimited, but limited to
890     available disk space and memory/swap space. Performance may suffer
891     when these values get unusually large. 
892
893     <P>The maximum table size of 32 TB does not require large file
894     support from the operating system. Large tables are stored as
895     multiple 1 GB files so file system size limits are not
896     important.</P>
897
898     <P>The maximum table size and maximum number of columns can be
899     quadrupled by increasing the default block size to 32k.</P>
900
901     <H4><A name="4.6">4.6</A>) How much database disk space is required
902     to store data from a typical text file?</H4>
903
904     <P>A PostgreSQL database may require up to five times the disk
905     space to store data from a text file.</P>
906
907     <P>As an example, consider a file of 100,000 lines with an integer
908     and text description on each line. Suppose the text string
909     avergages twenty bytes in length. The flat file would be 2.8 MB.
910     The size of the PostgreSQL database file containing this data can
911     be estimated as 6.4 MB:</P>
912 <PRE>
913     36 bytes: each row header (approximate)
914     24 bytes: one int field and one text field
915    + 4 bytes: pointer on page to tuple
916    ----------------------------------------
917     64 bytes per row
918
919    The data page size in PostgreSQL is 8192 bytes (8 KB), so:
920
921    8192 bytes per page
922    -------------------   =  128 rows per database page (rounded down)
923      64 bytes per row
924
925    100000 data rows
926    --------------------  =  782 database pages (rounded up)
927       128 rows per page
928
929 782 database pages * 8192 bytes per page  =  6,406,144 bytes (6.4 MB)
930 </PRE>
931
932     <P>Indexes do not require as much overhead, but do contain the data
933     that is being indexed, so they can be large also.</P>
934
935     <P><SMALL>NULL</SMALL>s are stored as bitmaps, so they
936     use very little space.</P>
937     
938     <H4><A name="4.7">4.7</A>) How do I find out what tables, indexes,
939     databases, and users are defined?</H4>
940
941     <P><I>psql</I> has a variety of backslash commands to show such
942     information. Use \? to see them. There are also system tables
943     beginning with <I>pg_</I> that describe these too. Also, <I>psql
944     -l</I> will list all databases.</P>
945
946     <P>Also try the file <I>pgsql/src/tutorial/syscat.source</I>. It
947     illustrates many of the <SMALL>SELECT</SMALL>s needed to get
948     information from the database system tables.</P>
949
950     <H4><A name="4.8">4.8</A>) My queries are slow or don't make use of
951     the indexes. Why?</H4>
952     Indexes are not automatically used by every query. Indexes are only
953     used if the table is larger than a minimum size, and the query
954     selects only a small percentage of the rows in the table. This is
955     because the random disk access caused by an index scan can be
956     slower than a straight read through the table, or sequential scan. 
957
958     <P>To determine if an index should be used, PostgreSQL must have
959     statistics about the table. These statistics are collected using
960     <SMALL>VACUUM ANALYZE</SMALL>, or simply <SMALL>ANALYZE</SMALL>.
961     Using statistics, the optimizer knows how many rows are in the
962     table, and can better determine if indexes should be used.
963     Statistics are also valuable in determining optimal join order and
964     join methods. Statistics collection should be performed
965     periodically as the contents of the table change.</P>
966
967     <P>Indexes are normally not used for <SMALL>ORDER BY</SMALL> or to
968     perform joins. A sequential scan followed by an explicit sort is
969     usually faster than an index scan of a large table.</P>
970     However, <SMALL>LIMIT</SMALL> combined with <SMALL>ORDER BY</SMALL>
971     often will use an index because only a small portion of the table
972     is returned.  In fact, though MAX() and MIN() don't use indexes,
973     it is possible to retrieve such values using an index with ORDER BY
974     and LIMIT:
975 <PRE>
976     SELECT col
977     FROM tab
978     ORDER BY col [ DESC ]
979     LIMIT 1;
980 </PRE>
981
982     <P>If you believe the optimizer is incorrect in choosing a
983     sequential scan, use <CODE>SET enable_seqscan TO 'off'</CODE> and
984     run tests to see if an index scan is indeed faster.</P>
985
986     <P>When using wild-card operators such as <SMALL>LIKE</SMALL> or
987     <I>~</I>, indexes can only be used in certain circumstances:</P>
988     <UL>
989     <LI>The beginning of the search string must be anchored to the start
990     of the string, i.e.
991     <UL>
992     <LI><SMALL>LIKE</SMALL> patterns must not start with <I>%</I>.</LI>
993     <LI><I>~</I> (regular expression) patterns must start with
994     <I>^</I>.</LI>
995     </UL></LI>
996     <LI>The search string can not start with a character class,
997     e.g. [a-e].</LI>
998     <LI>Case-insensitive searches such as <SMALL>ILIKE</SMALL> and
999     <I>~*</I> do not utilise indexes. Instead, use functional
1000     indexes, which are described in section <a href="#4.12">4.12</a>.</LI>
1001     <LI>The default <I>C</I> locale must be used during
1002     <i>initdb</i>.</LI>
1003     </UL>
1004     <P>
1005
1006     <H4><A name="4.9">4.9</A>) How do I see how the query optimizer is
1007     evaluating my query?</H4>
1008
1009     <P>See the <SMALL>EXPLAIN</SMALL> manual page.</P>
1010
1011     <H4><A name="4.10">4.10</A>) What is an R-tree index?</H4>
1012
1013     <P>An R-tree index is used for indexing spatial data. A hash index
1014     can't handle range searches. A B-tree index only handles range
1015     searches in a single dimension. R-trees can handle
1016     multi-dimensional data. For example, if an R-tree index can be
1017     built on an attribute of type <I>point</I>, the system can more
1018     efficiently answer queries such as "select all points within a
1019     bounding rectangle."</P>
1020
1021     <P>The canonical paper that describes the original R-tree design
1022     is:</P>
1023
1024     <P>Guttman, A. "R-trees: A Dynamic Index Structure for Spatial
1025     Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt
1026     of Data, 45-57.</P>
1027
1028     <P>You can also find this paper in Stonebraker's "Readings in
1029     Database Systems".</P>
1030
1031     <P>Built-in R-trees can handle polygons and boxes. In theory,
1032     R-trees can be extended to handle higher number of dimensions. In
1033     practice, extending R-trees requires a bit of work and we don't
1034     currently have any documentation on how to do it.</P>
1035
1036     <H4><A name="4.11">4.11</A>) What is the Genetic Query
1037     Optimizer?</H4>
1038
1039     <P>The <SMALL>GEQO</SMALL> module speeds query optimization when
1040     joining many tables by means of a Genetic Algorithm (GA). It allows
1041     the handling of large join queries through nonexhaustive
1042     search.</P>
1043
1044     <H4><A name="4.12">4.12</A>) How do I perform regular expression
1045     searches and case-insensitive regular expression searches? How do I
1046     use an index for case-insensitive searches?</H4>
1047
1048     <P>The <I>~</I> operator does regular expression matching, and
1049     <I>~*</I> does case-insensitive regular expression matching. The
1050     case-insensitive variant of <SMALL>LIKE</SMALL> is called
1051     <SMALL>ILIKE</SMALL>.</P>
1052
1053     <P>Case-insensitive equality comparisons are normally expressed
1054     as:</P>
1055 <PRE>
1056     SELECT *
1057     FROM tab
1058     WHERE lower(col) = 'abc';
1059 </PRE>
1060
1061     This will not use an standard index. However, if you create a
1062     functional index, it will be used: 
1063 <PRE>
1064     CREATE INDEX tabindex ON tab (lower(col));
1065 </PRE>
1066
1067     <H4><A name="4.13">4.13</A>) In a query, how do I detect if a field
1068     is <SMALL>NULL</SMALL>?</H4>
1069
1070     <P>You test the column with <SMALL>IS NULL</SMALL> and <SMALL>IS
1071     NOT NULL</SMALL>.</P>
1072
1073     <H4><A name="4.14">4.14</A>) What is the difference between the
1074     various character types?</H4>
1075 <PRE>
1076 Type            Internal Name   Notes
1077 --------------------------------------------------
1078 VARCHAR(n)      varchar         size specifies maximum length, no padding
1079 CHAR(n)         bpchar          blank padded to the specified fixed length
1080 TEXT            text            no specific upper limit on length
1081 BYTEA           bytea           variable-length byte array (null-byte safe)
1082 "char"          char            one character
1083 </PRE>
1084
1085     <P>You will see the internal name when examining system catalogs
1086     and in some error messages.</P>
1087
1088     <P>The first four types above are "varlena" types (i.e., the first
1089     four bytes on disk are the length, followed by the data). Thus the
1090     actual space used is slightly greater than the declared size.
1091     However, these data types are also subject to compression or being
1092     stored out-of-line by <SMALL>TOAST</SMALL>, so the space on disk
1093     might also be less than expected.</P>
1094
1095     <SMALL>VARCHAR(n)</SMALL> is best when storing variable-length
1096     strings and it limits how long a string can be. <SMALL>TEXT</SMALL>
1097     is for strings of unlimited length, with a maximum of one gigabyte.
1098     <P><SMALL>CHAR(n)</SMALL> is for storing strings that are all the
1099     same length. <SMALL>CHAR(n)</SMALL> pads with blanks to the specified
1100     length, while <SMALL>VARCHAR(n)</SMALL> only stores the characters
1101     supplied.  <SMALL>BYTEA</SMALL> is for storing binary data,
1102     particularly values that include <SMALL>NULL</SMALL> bytes. All the
1103     types described here have similar performance characteristics.</P>
1104
1105     <H4><A name="4.15.1">4.15.1</A>) How do I create a
1106     serial/auto-incrementing field?</H4>
1107
1108     <P>PostgreSQL supports a <SMALL>SERIAL</SMALL> data type. It
1109     auto-creates a sequence.  For example,
1110     this:</P>
1111 <PRE>
1112     CREATE TABLE person ( 
1113         id   SERIAL, 
1114         name TEXT 
1115     );
1116 </PRE>
1117
1118     is automatically translated into this: 
1119 <PRE>
1120     CREATE SEQUENCE person_id_seq;
1121     CREATE TABLE person ( 
1122         id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
1123         name TEXT 
1124     );
1125 </PRE>
1126
1127     See the <I>create_sequence</I> manual page for more information
1128     about sequences. You can also use each row's <I>OID</I> field as a
1129     unique value. However, if you need to dump and reload the database,
1130     you need to use <I>pg_dump</I>'s <I>-o</I> option or <SMALL>COPY
1131     WITH OIDS</SMALL> option to preserve the <SMALL>OID</SMALL>s. 
1132
1133     <H4><A name="4.15.2">4.15.2</A>) How do I get the value of a
1134     <SMALL>SERIAL</SMALL> insert?</H4>
1135
1136     <P>One approach is to retrieve the next <SMALL>SERIAL</SMALL> value
1137     from the sequence object with the <I>nextval()</I> function
1138     <I>before</I> inserting and then insert it explicitly. Using the
1139     example table in <A href="#4.15.1">4.15.1</A>, an example in a
1140     pseudo-language would look like this:</P>
1141 <PRE>
1142     new_id = execute("SELECT nextval('person_id_seq')");
1143     execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
1144 </PRE>
1145
1146     You would then also have the new value stored in
1147     <CODE>new_id</CODE> for use in other queries (e.g., as a foreign
1148     key to the <CODE>person</CODE> table). Note that the name of the
1149     automatically created <SMALL>SEQUENCE</SMALL> object will be named
1150     &lt;<I>table</I>&gt;_&lt;<I>serialcolumn</I>&gt;_<I>seq</I>, where
1151     <I>table</I> and <I>serialcolumn</I> are the names of your table
1152     and your <SMALL>SERIAL</SMALL> column, respectively.
1153
1154     <P>Alternatively, you could retrieve the assigned
1155     <SMALL>SERIAL</SMALL> value with the <I>currval()</I> function
1156     <I>after</I> it was inserted by default, e.g.,</P>
1157 <PRE>
1158     execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
1159     new_id = execute("SELECT currval('person_id_seq')");
1160 </PRE>
1161
1162     Finally, you could use the <A href="#4.16"><SMALL>OID</SMALL></A>
1163     returned from the <SMALL>INSERT</SMALL> statement to look up the
1164     default value, though this is probably the least portable approach,
1165     and the oid value will wrap around when it reaches 4 billion.
1166     In Perl, using DBI with Edmund Mergl's DBD::Pg module, the oid
1167     value is made available via <I>$sth-&gt;{pg_oid_status}</I> after
1168     <I>$sth-&gt;execute()</I>.
1169
1170     <H4><A name="4.15.3">4.15.3</A>) Don't <I>currval()</I> and
1171     <I>nextval()</I> lead to a race condition with other users?</H4>
1172
1173     <P>No. <I>currval()</I> returns the current value assigned by your
1174     backend, not by all users.</P>
1175
1176     <H4><A name="4.15.4">4.15.4</A>) Why aren't my sequence numbers
1177     reused on transaction abort? Why are there gaps in the numbering of
1178     my sequence/SERIAL column?</H4>
1179
1180     <P>To improve concurrency, sequence values are given out to running
1181     transactions as needed and are not locked until the transaction
1182     completes. This causes gaps in numbering from aborted
1183     transactions.</P>
1184
1185     <H4><A name="4.16">4.16</A>) What is an <SMALL>OID</SMALL>? What is
1186     a <SMALL>TID</SMALL>?</H4>
1187
1188     <P><SMALL>OID</SMALL>s are PostgreSQL's answer to unique row ids.
1189     Every row that is created in PostgreSQL gets a unique
1190     <SMALL>OID</SMALL>. All <SMALL>OID</SMALL>s generated during
1191     <I>initdb</I> are less than 16384 (from
1192     <I>include/access/transam.h</I>). All user-created
1193     <SMALL>OID</SMALL>s are equal to or greater than this. By default,
1194     all these <SMALL>OID</SMALL>s are unique not only within a table or
1195     database, but unique within the entire PostgreSQL installation.</P>
1196
1197     <P>PostgreSQL uses <SMALL>OID</SMALL>s in its internal system
1198     tables to link rows between tables. These <SMALL>OID</SMALL>s can
1199     be used to identify specific user rows and used in joins. It is
1200     recommended you use column type <SMALL>OID</SMALL> to store
1201     <SMALL>OID</SMALL> values. You can create an index on the
1202     <SMALL>OID</SMALL> field for faster access.</P>
1203
1204     <P>O<SMALL>ID</SMALL>s are assigned to all new rows from a central
1205     area that is used by all databases. If you want to change the
1206     <SMALL>OID</SMALL> to something else, or if you want to make a copy
1207     of the table, with the original <SMALL>OID</SMALL>s, there is no
1208     reason you can't do it:</P>
1209 <PRE>
1210         CREATE TABLE new_table(old_oid oid, mycol int);
1211         SELECT old_oid, mycol INTO new FROM old;
1212         COPY new TO '/tmp/pgtable';
1213         DELETE FROM new;
1214         COPY new WITH OIDS FROM '/tmp/pgtable';
1215 </PRE>
1216 <!--
1217     CREATE TABLE new_table (mycol int);
1218     INSERT INTO new_table (oid, mycol) SELECT oid, mycol FROM old_table;
1219 -->
1220     <P>O<SMALL>ID</SMALL>s are stored as 4-byte integers, and will
1221     overflow at 4 billion. No one has reported this ever happening, and
1222     we plan to have the limit removed before anyone does.</P>
1223
1224     <P>T<SMALL>ID</SMALL>s are used to identify specific physical rows
1225     with block and offset values. T<SMALL>ID</SMALL>s change after rows
1226     are modified or reloaded. They are used by index entries to point
1227     to physical rows.</P>
1228
1229     <H4><A name="4.17">4.17</A>) What is the meaning of some of the
1230     terms used in PostgreSQL?</H4>
1231
1232     <P>Some of the source code and older documentation use terms that
1233     have more common usage. Here are some:</P>
1234
1235     <UL>
1236       <LI>table, relation, class</LI>
1237
1238       <LI>row, record, tuple</LI>
1239
1240       <LI>column, field, attribute</LI>
1241
1242       <LI>retrieve, select</LI>
1243
1244       <LI>replace, update</LI>
1245
1246       <LI>append, insert</LI>
1247
1248       <LI><SMALL>OID</SMALL>, serial value</LI>
1249
1250       <LI>portal, cursor</LI>
1251
1252       <LI>range variable, table name, table alias</LI>
1253     </UL>
1254
1255     <P>A list of general database terms can be found at: <A href=
1256     "http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</A></P>
1257
1258     <H4><A name="4.18">4.18</A>) Why do I get the error <I>"ERROR:
1259     Memory exhausted in AllocSetAlloc()"</I>?</H4>
1260
1261     <P>You probably have run out of virtual memory on your system,
1262     or your kernel has a low limit for certain resources. Try this
1263     before starting <I>postmaster</I>:</P>
1264 <PRE>
1265     ulimit -d 262144
1266     limit datasize 256m
1267 </PRE>
1268
1269     Depending on your shell, only one of these may succeed, but it will
1270     set your process data segment limit much higher and perhaps allow
1271     the query to complete. This command applies to the current process,
1272     and all subprocesses created after the command is run. If you are
1273     having a problem with the <SMALL>SQL</SMALL> client because the
1274     backend is returning too much data, try it before starting the
1275     client.
1276
1277     <H4><A name="4.19">4.19</A>) How do I tell what PostgreSQL version
1278     I am running?</H4>
1279
1280     <P>From <I>psql</I>, type <CODE>SELECT version();</CODE></P>
1281
1282     <H4><A name="4.20">4.20</A>) Why does my large-object operations
1283     get <I>"invalid large obj descriptor"</I>?</H4>
1284
1285     <P>You need to put <CODE>BEGIN WORK</CODE> and <CODE>COMMIT</CODE>
1286     around any use of a large object handle, that is, surrounding
1287     <CODE>lo_open</CODE> ... <CODE>lo_close.</CODE></P>
1288
1289     <P>Currently PostgreSQL enforces the rule by closing large object
1290     handles at transaction commit. So the first attempt to do anything
1291     with the handle will draw <I>invalid large obj descriptor</I>. So
1292     code that used to work (at least most of the time) will now
1293     generate that error message if you fail to use a transaction.</P>
1294
1295     <P>If you are using a client interface like <SMALL>ODBC</SMALL> you
1296     may need to set <CODE>auto-commit off.</CODE></P>
1297
1298     <H4><A name="4.21">4.21</A>) How do I create a column that will
1299     default to the current time?</H4>
1300
1301     <P>Use <I>CURRENT_TIMESTAMP</I>:</P>
1302 <PRE>
1303 <CODE>CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
1304 </CODE>
1305 </PRE>
1306
1307     <H4><A name="4.22">4.22</A>) Why are my subqueries using
1308     <CODE><SMALL>IN</SMALL></CODE> so slow?</H4>
1309
1310     <P>In versions prior to 7.4, subqueries were joined to outer queries
1311     by sequentially scanning the result of the subquery for each row of
1312     the outer query. If the subquery returns only a few rows and the outer
1313     query returns many rows, <CODE><SMALL>IN</SMALL></CODE> is fastest.  To
1314     speed up other queries, replace <CODE>IN</CODE> with
1315     <CODE>EXISTS</CODE>:</P>
1316 <PRE>    SELECT *
1317     FROM tab
1318     WHERE col IN (SELECT subcol FROM subtab);
1319 </PRE>
1320     to:
1321 <PRE>    SELECT *
1322     FROM tab
1323     WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
1324 </PRE>
1325
1326     For this to be fast, <CODE>subcol</CODE> should be an indexed column.
1327     <P>In version 7.4 and later,  <CODE>IN</CODE> actually uses the same
1328     sophisticated join techniques as normal queries, and is prefered
1329     to using <CODE>EXISTS</CODE>.
1330
1331     <H4><A name="4.23">4.23</A>) How do I perform an outer join?</H4>
1332
1333     <P>PostgreSQL supports outer joins using the SQL standard syntax.
1334     Here are two examples:</P>
1335 <PRE>
1336     SELECT *
1337     FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
1338 </PRE>
1339     or 
1340 <PRE>
1341     SELECT *
1342     FROM t1 LEFT OUTER JOIN t2 USING (col);
1343 </PRE>
1344
1345     <P>These identical queries join t1.col to t2.col, and also return
1346     any unjoined rows in t1 (those with no match in t2). A
1347     <SMALL>RIGHT</SMALL> join would add unjoined rows of t2. A
1348     <SMALL>FULL</SMALL> join would return the matched rows plus all
1349     unjoined rows from t1 and t2. The word <SMALL>OUTER</SMALL> is
1350     optional and is assumed in <SMALL>LEFT</SMALL>,
1351     <SMALL>RIGHT</SMALL>, and <SMALL>FULL</SMALL> joins. Ordinary joins
1352     are called <SMALL>INNER</SMALL> joins.</P>
1353
1354     <P>In previous releases, outer joins can be simulated using
1355     <SMALL>UNION</SMALL> and <SMALL>NOT IN</SMALL>. For example, when
1356     joining <I>tab1</I> and <I>tab2</I>, the following query does an
1357     <I>outer</I> join of the two tables:<BR>
1358     <BR>
1359     </P>
1360 <PRE>
1361     SELECT tab1.col1, tab2.col2
1362     FROM tab1, tab2
1363     WHERE tab1.col1 = tab2.col1
1364     UNION ALL
1365     SELECT tab1.col1, NULL
1366     FROM tab1
1367     WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
1368     ORDER BY col1
1369 </PRE>
1370
1371     <H4><A name="4.24">4.24</A>) How do I perform queries using
1372     multiple databases?</H4>
1373
1374     <P>There is no way to query a database other than the current one.
1375     Because PostgreSQL loads database-specific system catalogs, it is
1376     uncertain how a cross-database query should even behave.</P>
1377
1378     <P><I>contrib/dblink</I> allows cross-database queries using
1379     function calls. Of course, a client can make simultaneous
1380     connections to different databases and merge the results on the
1381     client side.</P>
1382
1383     <H4><A name="4.25">4.25</A>) How do I return multiple rows or
1384     columns from a function?</H4>
1385
1386     <P>In 7.3, you can easily return multiple rows or columns from a
1387     function,
1388     <a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">
1389     http://techdocs.postgresql.org/guides/SetReturningFunctions</a>.
1390
1391     <H4><A name="4.26">4.26</A>) Why can't I reliably create/drop
1392     temporary tables in PL/PgSQL functions?</H4>
1393     <P>PL/PgSQL caches function contents, and an unfortunate side effect
1394     is that if a PL/PgSQL function accesses a temporary table, and that
1395     table is later dropped and recreated, and the function called
1396     again, the function will fail because the cached function contents
1397     still point to the old temporary table. The solution is to use
1398     <SMALL>EXECUTE</SMALL> for temporary table access in PL/PgSQL. This
1399     will cause the query to be reparsed every time.</P>
1400
1401     <H4><A name="4.27">4.27</A>) What replication options are available?
1402     </H4>
1403     <P>There are several master/slave replication options available.
1404     These allow only the master to make database changes and the slave
1405     can only do database reads. The bottom of <a
1406     href="http://gborg.PostgreSQL.org/genpage?replication_research">
1407     http://gborg.PostgreSQL.org/genpage?replication_research</a> lists
1408     them. A multi-master replication solution is being worked on at <a
1409     href="http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php">http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php</a>.</P>
1410
1411     <H4><A name="4.28">4.28</A>) What encryption options are available?
1412     </H4>
1413     <UL>
1414     <LI><I>contrib/pgcrypto</I> contains many encryption functions for
1415     use in <SMALL>SQL</SMALL> queries.</LI>
1416     <LI>To encrypt transmission from the client to the server, the server
1417     must have the <I>ssl</I> option set to <I>true</I> in <I>postgresql.conf,
1418     </I> and an applicable <I>host</I> or <I>hostssl</I> record must exist in
1419     <I>pg_hba.conf</I>, and the client <I>sslmode</I> must not be
1420     <I>disable.</I> (Note that it is also possible to use a third-party
1421     encrypted transport, such as stunnel or ssh, rather than PostgreSQL's
1422     native SSL connections.)
1423     <LI>Database user passwords are automatically encrypted when stored in
1424     version 7.3. In previous versions, you must enable the option
1425     <I>PASSWORD_ENCRYPTION</I> in <I>postgresql.conf</I>.</LI>
1426     <LI>The server can run using an encrypted file system.</LI>
1427     </UL>
1428
1429     <HR>
1430
1431     <H2 align="center">Extending PostgreSQL</H2>
1432
1433     <H4><A name="5.1">5.1</A>) I wrote a user-defined function. When I
1434     run it in <I>psql</I>, why does it dump core?</H4>
1435
1436     <P>The problem could be a number of things. Try testing your
1437     user-defined function in a stand-alone test program first.</P>
1438
1439     <H4><A name="5.2">5.2</A>) How can I contribute some nifty new
1440     types and functions to PostgreSQL?</H4>
1441
1442     <P>Send your extensions to the <I>pgsql-hackers</I> mailing list,
1443     and they will eventually end up in the <I>contrib/</I>
1444     subdirectory.</P>
1445
1446     <H4><A name="5.3">5.3</A>) How do I write a C function to return a
1447     tuple?</H4>
1448
1449     <P>In versions of PostgreSQL beginning with 7.3, table-returning
1450     functions are fully supported in C, PL/PgSQL, and SQL. See the
1451     Programmer's Guide for more information. An example of a
1452     table-returning function defined in C can be found in
1453     <I>contrib/tablefunc</I>.</P>
1454
1455     <H4><A name="5.4">5.4</A>) I have changed a source file. Why does
1456     the recompile not see the change?</H4>
1457
1458     <P>The <I>Makefiles</I> do not have the proper dependencies for
1459     include files. You have to do a <I>make clean</I> and then another
1460     <I>make</I>. If you are using <SMALL>GCC</SMALL> you can use the
1461     <I>--enable-depend</I> option of <I>configure</I> to have the
1462     compiler compute the dependencies automatically.</P>
1463   </BODY>
1464 </HTML>
1465