mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +03:00
Backpatch FAQ's to 8.0.X for release.
This commit is contained in:
@@ -10,7 +10,7 @@
|
||||
alink="#0000ff">
|
||||
<H1>Frequently Asked Questions (FAQ) for PostgreSQL</H1>
|
||||
|
||||
<P>Last updated: Tue Mar 15 17:38:18 EST 2005</P>
|
||||
<P>Last updated: Mon May 9 13:15:04 EDT 2005</P>
|
||||
|
||||
<P>Current maintainer: Bruce Momjian (<A href=
|
||||
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)
|
||||
@@ -40,6 +40,7 @@
|
||||
<A href="#1.11">1.11</A>) How do I join the development team?<BR>
|
||||
<A href="#1.12">1.12</A>) How does PostgreSQL compare to other
|
||||
<SMALL>DBMS</SMALL>s?<BR>
|
||||
<A href="#1.13">1.13</A>) Who controls PostgreSQL?<BR>
|
||||
|
||||
|
||||
<H2 align="center">User Client Questions</H2>
|
||||
@@ -99,41 +100,29 @@
|
||||
reused on transaction abort? Why are there gaps in the numbering of
|
||||
my sequence/SERIAL column?<BR>
|
||||
<A href="#4.12">4.12</A>) What is an <SMALL>OID</SMALL>? What is a
|
||||
<SMALL>TID</SMALL>?<BR>
|
||||
<A href="#4.12">4.13</A>) Why do I get the error <I>"ERROR: Memory
|
||||
<SMALL>CTID</SMALL>?<BR>
|
||||
<A href="#4.13">4.13</A>) Why do I get the error <I>"ERROR: Memory
|
||||
exhausted in AllocSetAlloc()"</I>?<BR>
|
||||
<A href="#4.14">4.14</A>) How do I tell what PostgreSQL version I
|
||||
am running?<BR>
|
||||
<A href="#4.15">4.15</A>) Why does my large-object operations get
|
||||
<I>"invalid large obj descriptor"</I>?<BR>
|
||||
<A href="#4.16">4.16</A>) How do I create a column that will
|
||||
<A href="#4.15">4.15</A>) How do I create a column that will
|
||||
default to the current time?<BR>
|
||||
<A href="#4.17">4.17</A>) How do I perform an outer join?<BR>
|
||||
<A href="#4.18">4.18</A>) How do I perform queries using multiple
|
||||
<A href="#4.16">4.16</A>) How do I perform an outer join?<BR>
|
||||
<A href="#4.17">4.17</A>) How do I perform queries using multiple
|
||||
databases?<BR>
|
||||
<A href="#4.19">4.19</A>) How do I return multiple rows or columns
|
||||
<A href="#4.18">4.18</A>) How do I return multiple rows or columns
|
||||
from a function?<BR>
|
||||
<A href="#4.20">4.20</A>) Why do I get "relation with OID #####
|
||||
<A href="#4.19">4.19</A>) Why do I get "relation with OID #####
|
||||
does not exist" errors when accessing temporary tables in PL/PgSQL
|
||||
functions?<BR>
|
||||
<A href="#4.21">4.21</A>) What encryption options are available?<BR>
|
||||
<A href="#4.20">4.20</A>) What replication solutions are available?<BR>
|
||||
|
||||
|
||||
<H2 align="center">Extending PostgreSQL</H2>
|
||||
<A href="#5.1">5.1</A>) I wrote a user-defined function. When I run
|
||||
it in <I>psql</I>, why does it dump core?<BR>
|
||||
<A href="#5.2">5.2</A>) How can I contribute some nifty new types
|
||||
and functions to PostgreSQL?<BR>
|
||||
<A href="#5.3">5.3</A>) How do I write a C function to return a
|
||||
tuple?<BR>
|
||||
<A href="#5.4">5.4</A>) I have changed a source file. Why does the
|
||||
recompile not see the change?<BR>
|
||||
|
||||
<HR>
|
||||
|
||||
<H2 align="center">General Questions</H2>
|
||||
|
||||
<H4><A name="1.1">1.1</A>) What is PostgreSQL? How is it pronounced?</H4>
|
||||
<H3><A name="1.1">1.1</A>) What is PostgreSQL? How is it pronounced?</H3>
|
||||
|
||||
<P>PostgreSQL is pronounced <I>Post-Gres-Q-L</I>, also called just
|
||||
<I>Postgres</I>.</P>
|
||||
@@ -152,8 +141,8 @@
|
||||
http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html</A>
|
||||
</P>
|
||||
|
||||
<H4><A name="1.2">1.2</A>) What is the copyright of
|
||||
PostgreSQL?</H4>
|
||||
<H3><A name="1.2">1.2</A>) What is the copyright of
|
||||
PostgreSQL?</H3>
|
||||
|
||||
<P>PostgreSQL is distributed under the classic BSD license. It has
|
||||
no restrictions on how the source code can be used. We like it and
|
||||
@@ -185,17 +174,16 @@
|
||||
UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE,
|
||||
SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.</P>
|
||||
|
||||
<H4><A name="1.3">1.3</A>) What platforms does PostgreSQL support?</H4>
|
||||
<H3><A name="1.3">1.3</A>) What platforms does PostgreSQL support?</H3>
|
||||
|
||||
<P>In general, any modern Unix-compatible platform should be able to
|
||||
run PostgreSQL. The platforms that had received explicit testing at
|
||||
the time of release are listed in the installation
|
||||
instructions.</P>
|
||||
|
||||
<P>Starting with version 8.0, PostgreSQL now runs natively on
|
||||
Microsoft Windows NT-based operating systems like Win2000, WinXP,
|
||||
and Win2003. A prepackaged installer is available at <a href=
|
||||
"http://pgfoundry.org/projects/pginstaller">
|
||||
<P>PostgreSQL also runs natively on Microsoft Windows NT-based operating
|
||||
systems like Win2000, WinXP, and Win2003. A prepackaged installer is
|
||||
available at <a href= "http://pgfoundry.org/projects/pginstaller">
|
||||
http://pgfoundry.org/projects/pginstaller</a>. MSDOS-based versions
|
||||
of Windows (Win95, Win98, WinMe) can run PostgreSQL using Cygwin.</P>
|
||||
|
||||
@@ -205,13 +193,14 @@
|
||||
"http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F">
|
||||
http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a>.</p>
|
||||
|
||||
<H4><A name="1.4">1.4</A>) Where can I get PostgreSQL?</H4>
|
||||
<H3><A name="1.4">1.4</A>) Where can I get PostgreSQL?</H3>
|
||||
|
||||
<P>The primary anonymous ftp site for PostgreSQL is <A href=
|
||||
"ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</A>.
|
||||
For mirror sites, see our main web site.</P>
|
||||
<P>Via web browser, use <a href="http://www.postgresql.org/ftp/">
|
||||
http://www.postgresql.org/ftp/</a>, and via ftp, use
|
||||
<A href="ftp://ftp.PostgreSQL.org/pub/">
|
||||
ftp://ftp.PostgreSQL.org/pub/</A>.</P>
|
||||
|
||||
<H4><A name="1.5">1.5</A>) Where can I get support?</H4>
|
||||
<H3><A name="1.5">1.5</A>) Where can I get support?</H3>
|
||||
|
||||
<P>The PostgreSQL community provides assistance to many of its users
|
||||
via email. The main web site to subscribe to the email lists is
|
||||
@@ -222,7 +211,7 @@
|
||||
<P>The major IRC channel is <I>#postgresql</I> on Freenode
|
||||
(<I>irc.freenode.net</I>). To connect you can use the Unix
|
||||
program <CODE>irc -c '#postgresql' "$USER" irc.freenode.net</CODE>
|
||||
or use any of the other popular IRC clients. A Spanish one also exists
|
||||
or use any other IRC clients. A Spanish one also exists
|
||||
on the same network, (<I>#postgresql-es</I>), and a French one,
|
||||
(<I>#postgresqlfr</I>). There is also a PostgreSQL channel on EFNet.</P>
|
||||
|
||||
@@ -230,7 +219,7 @@
|
||||
"http://techdocs.postgresql.org/companies.php">
|
||||
http://techdocs.postgresql.org/companies.php</A>.</P>
|
||||
|
||||
<H4><A name="1.6">1.6</A>) How do I submit a bug report?</H4>
|
||||
<H3><A name="1.6">1.6</A>) How do I submit a bug report?</H3>
|
||||
|
||||
<P>Visit the PostgreSQL bug form at <A href=
|
||||
"http://www.postgresql.org/support/submitbug">
|
||||
@@ -240,13 +229,14 @@
|
||||
"ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</A> to
|
||||
see if there is a more recent PostgreSQL version.</P>
|
||||
|
||||
<H4><A name="1.7">1.7</A>) What is the latest release?</H4>
|
||||
<H3><A name="1.7">1.7</A>) What is the latest release?</H3>
|
||||
|
||||
<P>The latest release of PostgreSQL is version 8.0.1.</P>
|
||||
<P>The latest release of PostgreSQL is version 8.0.2.</P>
|
||||
|
||||
<P>We plan to have major releases every ten to twelve months.</P>
|
||||
<P>We plan to have a major release every year, with minor releases
|
||||
every few months.</P>
|
||||
|
||||
<H4><A name="1.8">1.8</A>) What documentation is available?</H4>
|
||||
<H3><A name="1.8">1.8</A>) What documentation is available?</H3>
|
||||
|
||||
<P>PostgreSQL includes extensive documentation, including a large
|
||||
manual, manual pages, and some test examples. See the <I>/doc</I>
|
||||
@@ -258,8 +248,9 @@
|
||||
"http://www.postgresql.org/docs/books/awbook.html">http://www.postgresql.org/docs/books/awbook.html</A>
|
||||
and <A href=
|
||||
"http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>.
|
||||
There is a list of PostgreSQL books available for purchase at <A
|
||||
href=
|
||||
There are a number of PostgreSQL books available for purchase. One
|
||||
of the most popular ones is by Korry Douglas. A list of book reviews
|
||||
can be found at <A href=
|
||||
"http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A>.
|
||||
There is also a collection of PostgreSQL technical articles at <A
|
||||
href=
|
||||
@@ -271,22 +262,25 @@
|
||||
|
||||
<P>Our web site contains even more documentation.</P>
|
||||
|
||||
<H4><A name="1.9">1.9</A>) How do I find out about known bugs or
|
||||
missing features?</H4>
|
||||
<H3><A name="1.9">1.9</A>) How do I find out about known bugs or
|
||||
missing features?</H3>
|
||||
|
||||
<P>PostgreSQL supports an extended subset of <SMALL>SQL</SMALL>-92.
|
||||
See our <A href="http://developer.PostgreSQL.org/todo.php">TODO</A>
|
||||
See our <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A>
|
||||
list for known bugs, missing features, and future plans.</P>
|
||||
|
||||
<H4><A name="1.10">1.10</A>) How can I learn
|
||||
<SMALL>SQL</SMALL>?</H4>
|
||||
<H3><A name="1.10">1.10</A>) How can I learn
|
||||
<SMALL>SQL</SMALL>?</H3>
|
||||
|
||||
<P>The PostgreSQL book at <A href=
|
||||
"http://www.postgresql.org/docs/books/awbook.html">http://www.postgresql.org/docs/books/awbook.html</A>
|
||||
teaches <SMALL>SQL</SMALL>. There is another PostgreSQL book at <A
|
||||
href=
|
||||
"http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook.</A>
|
||||
There is a nice tutorial at <A href=
|
||||
<P>First, consider the PostgreSQL-specific books mentioned above.
|
||||
Another one is "Teach Yourself SQL in 21 Days, Second Edition"
|
||||
at <A href=
|
||||
"http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A>.
|
||||
Many of our users like <I>The Practical SQL Handbook</I>,
|
||||
Bowman, Judith S., et al., Addison-Wesley. Others like <I>The
|
||||
Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>
|
||||
|
||||
<P>There is also a nice tutorial at <A href=
|
||||
"http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A>
|
||||
at <A href=
|
||||
"http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">
|
||||
@@ -294,31 +288,14 @@
|
||||
and at <A href=
|
||||
"http://sqlcourse.com/">http://sqlcourse.com.</A></P>
|
||||
|
||||
<P>Another one is "Teach Yourself SQL in 21 Days, Second Edition"
|
||||
at <A href=
|
||||
"http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A></P>
|
||||
<H3><A name="1.11">1.11</A>) How do I join the development
|
||||
team?</H3>
|
||||
|
||||
<P>Many of our users like <I>The Practical SQL Handbook</I>,
|
||||
Bowman, Judith S., et al., Addison-Wesley. Others like <I>The
|
||||
Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>
|
||||
<P>See the <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
|
||||
Developer's FAQ</A>.
|
||||
|
||||
<H4><A name="1.11">1.11</A>) How do I join the development
|
||||
team?</H4>
|
||||
|
||||
<P>First, download the latest source and read the PostgreSQL
|
||||
Developers FAQ and documentation on our web site, or in the
|
||||
distribution. Second, subscribe to the <I>pgsql-hackers</I> and
|
||||
<I>pgsql-patches</I> mailing lists. Third, submit high quality
|
||||
patches to pgsql-patches.</P>
|
||||
|
||||
<P>There are about a dozen people who have commit privileges to the
|
||||
PostgreSQL <SMALL>CVS</SMALL> archive. They each have submitted so
|
||||
many high-quality patches that it was impossible for the existing
|
||||
committers to keep up, and we had confidence that patches they
|
||||
committed were of high quality.</P>
|
||||
|
||||
<H4><A name="1.12">1.12</A>) How does PostgreSQL compare to other
|
||||
<SMALL>DBMS</SMALL>s?</H4>
|
||||
<H3><A name="1.12">1.12</A>) How does PostgreSQL compare to other
|
||||
<SMALL>DBMS</SMALL>s?</H3>
|
||||
|
||||
<P>There are several ways of measuring software: features,
|
||||
performance, reliability, support, and price.</P>
|
||||
@@ -339,13 +316,7 @@
|
||||
|
||||
<DD>PostgreSQL's performance is comparable to other commercial and
|
||||
open source databases. It is faster for some things, slower for
|
||||
others. In comparison to MySQL or leaner database systems, we are
|
||||
faster for multiple users, complex queries, and a read/write query
|
||||
load. MySQL is faster for simple SELECT queries done by a few users.
|
||||
Of course, MySQL does not have most of the features mentioned in the
|
||||
<I>Features</I> section above. We are built for reliability and
|
||||
features, and we continue to improve performance in every
|
||||
release. <BR>
|
||||
others. Our performance is usually +/-10% compared to other databases.
|
||||
<BR>
|
||||
</DD>
|
||||
|
||||
@@ -383,13 +354,24 @@
|
||||
</DD>
|
||||
</DL>
|
||||
|
||||
<H3><A name="1.13">1.13</A>) Who controls PostgreSQL?<BR>
|
||||
|
||||
<P>If you are looking for a PostgreSQL gatekeeper, central committee,
|
||||
or controlling company, give up --- there isn't one. We do have a
|
||||
core committee and CVS committers, but these groups are more for
|
||||
administrative purposes than control. The project is directed by
|
||||
the community of developers and users, which anyone can join. All
|
||||
you need to do is subscribe to the mailing lists and participate in the
|
||||
discussions. (See the <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
|
||||
Developer's FAQ</A> for information on how to get involved in PostgreSQL
|
||||
development.)</P>
|
||||
|
||||
<HR>
|
||||
|
||||
<H2 align="center">User Client Questions</H2>
|
||||
|
||||
<H4><A name="2.1">2.1</A>) What interfaces are available for
|
||||
PostgreSQL?</H4>
|
||||
<H3><A name="2.1">2.1</A>) What interfaces are available for
|
||||
PostgreSQL?</H3>
|
||||
|
||||
<P>The PostgreSQL install includes only the <SMALL>C</SMALL> and embedded
|
||||
<SMALL>C</SMALL> interfaces. All other interfaces are independent projects
|
||||
@@ -403,8 +385,8 @@
|
||||
in the <I>Drivers/Interfaces</I> section and via Internet search.
|
||||
</P>
|
||||
|
||||
<H4><A name="2.2">2.2</A>) What tools are available for using
|
||||
PostgreSQL with Web pages?</H4>
|
||||
<H3><A name="2.2">2.2</A>) What tools are available for using
|
||||
PostgreSQL with Web pages?</H3>
|
||||
|
||||
<P>A nice introduction to Database-backed Web pages can be seen at:
|
||||
<A href="http://www.webreview.com">http://www.webreview.com</A></P>
|
||||
@@ -416,25 +398,11 @@
|
||||
<P>For complex cases, many use the Perl and DBD::Pg with CGI.pm or
|
||||
mod_perl.</P>
|
||||
|
||||
<H4><A name="2.3">2.3</A>) Does PostgreSQL have a graphical user
|
||||
interface?</H4>
|
||||
<H3><A name="2.3">2.3</A>) Does PostgreSQL have a graphical user
|
||||
interface?</H3>
|
||||
|
||||
<P>Yes, there are several graphical interfaces to PostgreSQL
|
||||
available. These include pgAdmin III (<a
|
||||
href="http://www.pgadmin.org">http://www.pgadmin.org</a>, PgAccess
|
||||
<a href="http://www.pgaccess.org"> http://www.pgaccess.org</a>),
|
||||
RHDB Admin (<a
|
||||
href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/
|
||||
</a>), TORA (<a href="http://www.globecom.net/tora/">
|
||||
http://www.globecom.net/tora/</a>, partly commercial), and Rekall (<a
|
||||
href="http://www.rekallrevealed.org/">
|
||||
http://www.rekallrevealed.org/</a>). There is also PhpPgAdmin (<a
|
||||
href="http://phppgadmin.sourceforge.net/">
|
||||
http://phppgadmin.sourceforge.net/ </a>), a web-based interface to
|
||||
PostgreSQL.</P>
|
||||
|
||||
<P>See <a href="http://techdocs.postgresql.org/guides/GUITools">
|
||||
http://techdocs.postgresql.org/guides/GUITools</a> for a more
|
||||
<P>Yes, see <a href="http://techdocs.postgresql.org/guides/GUITools">
|
||||
http://techdocs.postgresql.org/guides/GUITools</a> for a
|
||||
detailed list.</P>
|
||||
|
||||
<HR>
|
||||
@@ -442,14 +410,14 @@
|
||||
|
||||
<H2 align="center">Administrative Questions</H2>
|
||||
|
||||
<H4><A name="3.1">3.1</A>) How do I install PostgreSQL somewhere
|
||||
other than <I>/usr/local/pgsql</I>?</H4>
|
||||
<H3><A name="3.1">3.1</A>) How do I install PostgreSQL somewhere
|
||||
other than <I>/usr/local/pgsql</I>?</H3>
|
||||
|
||||
<P>Specify the <I>--prefix</I> option when running
|
||||
<I>configure</I>.</P>
|
||||
|
||||
<H4><A name="3.2">3.2</A>) How do I control connections from other
|
||||
hosts?</H4>
|
||||
<H3><A name="3.2">3.2</A>) How do I control connections from other
|
||||
hosts?</H3>
|
||||
|
||||
<P>By default, PostgreSQL only allows connections from the local
|
||||
machine using Unix domain sockets or TCP/IP connections. Other
|
||||
@@ -458,8 +426,8 @@
|
||||
host-based authentication by modifying the
|
||||
<I>$PGDATA/pg_hba.conf</I> file, and restart the server.</P>
|
||||
|
||||
<H4><A name="3.3">3.3</A>) How do I tune the database engine for
|
||||
better performance?</H4>
|
||||
<H3><A name="3.3">3.3</A>) How do I tune the database engine for
|
||||
better performance?</H3>
|
||||
|
||||
<P>There are three major areas for potential performance
|
||||
improvement:</P>
|
||||
@@ -515,57 +483,15 @@
|
||||
</DD>
|
||||
</DL>
|
||||
|
||||
<H4><A name="3.4">3.4</A>) What debugging features are
|
||||
available?</H4>
|
||||
<H3><A name="3.4">3.4</A>) What debugging features are
|
||||
available?</H3>
|
||||
|
||||
<P>There are many <CODE>log_*</CODE> server configuration variables
|
||||
that enable printing of query and process statistics which can be
|
||||
very useful for debugging and performance measurements.</P>
|
||||
|
||||
<P><B>The following detailed debug instructions are to be used to
|
||||
provide more detailed information for server developers debugging a
|
||||
problem.</B></P>
|
||||
|
||||
<P>It is also possible to debug the server if it isn't operating
|
||||
properly. First, by running <I>configure</I> with the --enable-cassert
|
||||
option, many <I>assert()</I>s monitor the progress of the backend
|
||||
and halt the program when something unexpected occurs.</P>
|
||||
|
||||
<P>The <I>postmaster</I> has a <I>-d</I> option that allows even more
|
||||
detailed information to be reported. The <I>-d</I> option takes a
|
||||
number that specifies the debug level. Be warned that high debug
|
||||
level values generate large log files.</P>
|
||||
|
||||
<P>If <I>postmaster</I> is not running, you can actually run the
|
||||
<I>postgres</I> backend from the command line, and type your
|
||||
<SMALL>SQL</SMALL> statement directly. This is recommended
|
||||
<B>only</B> for debugging purposes. Note that a newline terminates
|
||||
the query, not a semicolon. If you have compiled with debugging
|
||||
symbols, you can use a debugger to see what is happening. Because
|
||||
the backend was not started from <I>postmaster</I>, it is not
|
||||
running in an identical environment and locking/backend interaction
|
||||
problems may not be duplicated.</P>
|
||||
|
||||
<P>If <I>postmaster</I> is running, start <I>psql</I> in one
|
||||
window, then find the <SMALL>PID</SMALL> of the <I>postgres</I>
|
||||
process used by <I>psql</I> using <CODE>SELECT pg_backend_pid()</CODE>.
|
||||
Use a debugger to attach to the <I>postgres</I> <SMALL>PID</SMALL>.
|
||||
You can set breakpoints in the debugger and issue queries from
|
||||
|
||||
<I>psql</I>. If you are debugging <I>postgres</I> startup, you can
|
||||
set PGOPTIONS="-W n", then start <I>psql</I>. This will cause startup
|
||||
to delay for <I>n</I> seconds so you can attach to the process with
|
||||
the debugger, set any breakpoints, and continue through the startup
|
||||
sequence.</P>
|
||||
|
||||
<P>You can also compile with profiling to see what functions are
|
||||
taking execution time. The backend profile files will be deposited
|
||||
in the <I>pgsql/data/base/dbname</I> directory. The client profile
|
||||
file will be put in the client's current directory. Linux requires
|
||||
a compile with <I>-DLINUX_PROFILE</I> for proper profiling.</P>
|
||||
|
||||
<H4><A name="3.5">3.5</A>) Why do I get <I>"Sorry, too many
|
||||
clients"</I> when trying to connect?</H4>
|
||||
<H3><A name="3.5">3.5</A>) Why do I get <I>"Sorry, too many
|
||||
clients"</I> when trying to connect?</H3>
|
||||
|
||||
<P>You have reached the default limit is 100 database sessions. You
|
||||
need to increase the <I>postmaster</I>'s limit on how many
|
||||
@@ -573,18 +499,18 @@
|
||||
<I>max_connections</I> value in <I>postgresql.conf</I> and
|
||||
restarting the <I>postmaster</I>.</P>
|
||||
|
||||
<H4><A name="3.6">3.6</A>) Why do I need to do a dump and restore
|
||||
to upgrade between major PostgreSQL releases?</H4>
|
||||
<H3><A name="3.6">3.6</A>) Why do I need to do a dump and restore
|
||||
to upgrade between major PostgreSQL releases?</H3>
|
||||
|
||||
<P>The PostgreSQL team makes only small changes between minor releases,
|
||||
so upgrading from 7.4 to 7.4.1 does not require a dump and restore.
|
||||
so upgrading from 7.4.0 to 7.4.1 does not require a dump and restore.
|
||||
However, major releases (e.g. from 7.3 to 7.4) often change the internal
|
||||
format of system tables and data files. These changes are often complex,
|
||||
so we don't maintain backward compatibility for data files. A dump outputs
|
||||
data in a generic format that can then be loaded in using the new internal
|
||||
format.</P>
|
||||
|
||||
<H4><A name="3.7">3.7</A>) What computer hardware should I use?</H4>
|
||||
<H3><A name="3.7">3.7</A>) What computer hardware should I use?</H3>
|
||||
|
||||
<P>Because PC hardware is mostly compatible, people tend to believe that
|
||||
all PC hardware is of equal quality. It is not. ECC RAM, SCSI, and
|
||||
@@ -598,8 +524,8 @@
|
||||
|
||||
<H2 align="center">Operational Questions</H2>
|
||||
|
||||
<H4><A name="4.1">4.1</A>) How do I <SMALL>SELECT</SMALL> only the
|
||||
first few rows of a query? A random row?</H4>
|
||||
<H3><A name="4.1">4.1</A>) How do I <SMALL>SELECT</SMALL> only the
|
||||
first few rows of a query? A random row?</H3>
|
||||
|
||||
<P>To retrieve only a few rows, if you know at the number of rows
|
||||
needed at the time of the <SMALL>SELECT</SMALL> use
|
||||
@@ -617,9 +543,9 @@
|
||||
LIMIT 1;
|
||||
</PRE>
|
||||
|
||||
<H4><A name="4.2">4.2</A>) How do I find out what tables, indexes,
|
||||
<H3><A name="4.2">4.2</A>) How do I find out what tables, indexes,
|
||||
databases, and users are defined? How do I see the queries used
|
||||
by <I>psql</I> to display them?</H4>
|
||||
by <I>psql</I> to display them?</H3>
|
||||
|
||||
<P>Use the \dt command to see tables in <I>psql</I>. For a complete list of
|
||||
commands inside psql you can use \?. Alternatively you can read the source
|
||||
@@ -640,7 +566,7 @@
|
||||
illustrates many of the <SMALL>SELECT</SMALL>s needed to get
|
||||
information from the database system tables.</P>
|
||||
|
||||
<H4><A name="4.3">4.3</A>) How do you change a column's data type?</H4>
|
||||
<H3><A name="4.3">4.3</A>) How do you change a column's data type?</H3>
|
||||
|
||||
<P>Changing the data type of a column can be done easily in 8.0
|
||||
and later with <SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>.</P>
|
||||
@@ -656,12 +582,12 @@
|
||||
<P>You might then want to do <I>VACUUM FULL tab</I> to reclaim the
|
||||
disk space used by the expired rows.</P>
|
||||
|
||||
<H4><A name="4.4">4.4</A>) What is the maximum size for a row, a
|
||||
table, and a database?</H4>
|
||||
<H3><A name="4.4">4.4</A>) What is the maximum size for a row, a
|
||||
table, and a database?</H3>
|
||||
|
||||
<P>These are the limits:</P>
|
||||
<BLOCKQUOTE>
|
||||
<TABLE >
|
||||
<TABLE>
|
||||
<TR><TD>Maximum size for a database?</TD><TD>unlimited (32 TB databases
|
||||
exist)</TD></TR>
|
||||
<TR><TD>Maximum size for a table?</TD><TD>32 TB</TD></TR>
|
||||
@@ -687,8 +613,8 @@ table?</TD><TD>unlimited</TD></TR>
|
||||
<P>The maximum table size and maximum number of columns can be
|
||||
quadrupled by increasing the default block size to 32k.</P>
|
||||
|
||||
<H4><A name="4.5">4.5</A>) How much database disk space is required
|
||||
to store data from a typical text file?</H4>
|
||||
<H3><A name="4.5">4.5</A>) How much database disk space is required
|
||||
to store data from a typical text file?</H3>
|
||||
|
||||
<P>A PostgreSQL database may require up to five times the disk
|
||||
space to store data from a text file.</P>
|
||||
@@ -724,14 +650,14 @@ table?</TD><TD>unlimited</TD></TR>
|
||||
<P><SMALL>NULL</SMALL>s are stored as bitmaps, so they
|
||||
use very little space.</P>
|
||||
|
||||
<H4><A name="4.6">4.6</A>) Why are my queries slow? Why don't they
|
||||
use my indexes?</H4>
|
||||
<H3><A name="4.6">4.6</A>) Why are my queries slow? Why don't they
|
||||
use my indexes?</H3>
|
||||
|
||||
<P>Indexes are not automatically used by every query. Indexes are only
|
||||
used if the table is larger than a minimum size, and the query
|
||||
selects only a small percentage of the rows in the table. This is
|
||||
because the random disk access caused by an index scan can be
|
||||
slower than a straight read through the table, or sequential scan. </P>
|
||||
<P>Indexes are not used by every query. Indexes are used only if the
|
||||
table is larger than a minimum size, and the query selects only a
|
||||
small percentage of the rows in the table. This is because the random
|
||||
disk access caused by an index scan can be slower than a straight read
|
||||
through the table, or sequential scan. </P>
|
||||
|
||||
<P>To determine if an index should be used, PostgreSQL must have
|
||||
statistics about the table. These statistics are collected using
|
||||
@@ -759,7 +685,7 @@ table?</TD><TD>unlimited</TD></TR>
|
||||
|
||||
<P>If you believe the optimizer is incorrect in choosing a
|
||||
sequential scan, use <CODE>SET enable_seqscan TO 'off'</CODE> and
|
||||
run tests to see if an index scan is indeed faster.</P>
|
||||
run query again to see if an index scan is indeed faster.</P>
|
||||
|
||||
<P>When using wild-card operators such as <SMALL>LIKE</SMALL> or
|
||||
<I>~</I>, indexes can only be used in certain circumstances:</P>
|
||||
@@ -788,14 +714,14 @@ table?</TD><TD>unlimited</TD></TR>
|
||||
types exactly match the index's column types. This was particularly
|
||||
true of int2, int8, and numeric column indexes.</P>
|
||||
|
||||
<H4><A name="4.7">4.7</A>) How do I see how the query optimizer is
|
||||
evaluating my query?</H4>
|
||||
<H3><A name="4.7">4.7</A>) How do I see how the query optimizer is
|
||||
evaluating my query?</H3>
|
||||
|
||||
<P>See the <SMALL>EXPLAIN</SMALL> manual page.</P>
|
||||
|
||||
<H4><A name="4.8">4.8</A>) How do I perform regular expression
|
||||
<H3><A name="4.8">4.8</A>) How do I perform regular expression
|
||||
searches and case-insensitive regular expression searches? How do I
|
||||
use an index for case-insensitive searches?</H4>
|
||||
use an index for case-insensitive searches?</H3>
|
||||
|
||||
<P>The <I>~</I> operator does regular expression matching, and
|
||||
<I>~*</I> does case-insensitive regular expression matching. The
|
||||
@@ -809,19 +735,18 @@ table?</TD><TD>unlimited</TD></TR>
|
||||
FROM tab
|
||||
WHERE lower(col) = 'abc';
|
||||
</PRE>
|
||||
|
||||
This will not use an standard index. However, if you create a
|
||||
expresssion index, it will be used:
|
||||
<PRE>
|
||||
CREATE INDEX tabindex ON tab (lower(col));
|
||||
</PRE>
|
||||
|
||||
<H4><A name="4.9">4.9</A>) In a query, how do I detect if a field
|
||||
<H3><A name="4.9">4.9</A>) In a query, how do I detect if a field
|
||||
is <SMALL>NULL</SMALL>? How can I sort on whether a field is <SMALL>
|
||||
NULL</SMALL> or not?</H4>
|
||||
NULL</SMALL> or not?</H3>
|
||||
|
||||
<P>You test the column with <SMALL>IS NULL</SMALL> and <SMALL>IS
|
||||
NOT NULL</SMALL>.</P>
|
||||
NOT NULL</SMALL>, like this:</P>
|
||||
|
||||
<PRE>
|
||||
SELECT *
|
||||
@@ -830,7 +755,7 @@ table?</TD><TD>unlimited</TD></TR>
|
||||
</PRE>
|
||||
|
||||
<P>To sort by the <SMALL>NULL</SMALL> status, use the <SMALL>IS NULL</SMALL>
|
||||
and <SMALL>IS NOT NULL</SMALL> modifiers in your <SMALL>WHERE</SMALL> clause.
|
||||
and <SMALL>IS NOT NULL</SMALL> modifiers in your <SMALL>ORDER BY</SMALL> clause.
|
||||
Things that are <I>true</I> will sort higher than things that are <I>false</I>,
|
||||
so the following will put NULL entries at the top of the resulting list:</P>
|
||||
|
||||
@@ -840,10 +765,10 @@ table?</TD><TD>unlimited</TD></TR>
|
||||
ORDER BY (col IS NOT NULL)
|
||||
</PRE>
|
||||
|
||||
<H4><A name="4.10">4.10</A>) What is the difference between the
|
||||
various character types?</H4>
|
||||
<H3><A name="4.10">4.10</A>) What is the difference between the
|
||||
various character types?</H3>
|
||||
<BLOCKQUOTE>
|
||||
<TABLE >
|
||||
<TABLE>
|
||||
<TR><TH>Type</TH><TH>Internal Name</TH><TH>Notes</TH></TR>
|
||||
<TR><TD>VARCHAR(n)</TD><TD>varchar</TD><TD>size specifies maximum
|
||||
length, no padding</TD></TR>
|
||||
@@ -863,9 +788,8 @@ length</TD></TR>
|
||||
<P>The first four types above are "varlena" types (i.e., the first
|
||||
four bytes on disk are the length, followed by the data). Thus the
|
||||
actual space used is slightly greater than the declared size.
|
||||
However, these data types are also subject to compression or being
|
||||
stored out-of-line by <SMALL>TOAST</SMALL>, so the space on disk
|
||||
might also be less than expected.</P>
|
||||
However, long values are also subject to compression, so the space
|
||||
on disk might also be less than expected.</P>
|
||||
|
||||
<SMALL>VARCHAR(n)</SMALL> is best when storing variable-length
|
||||
strings and it limits how long a string can be. <SMALL>TEXT</SMALL>
|
||||
@@ -877,12 +801,11 @@ length</TD></TR>
|
||||
particularly values that include <SMALL>NULL</SMALL> bytes. All the
|
||||
types described here have similar performance characteristics.</P>
|
||||
|
||||
<H4><A name="4.11.1">4.11.1</A>) How do I create a
|
||||
serial/auto-incrementing field?</H4>
|
||||
<H3><A name="4.11.1">4.11.1</A>) How do I create a
|
||||
serial/auto-incrementing field?</H3>
|
||||
|
||||
<P>PostgreSQL supports a <SMALL>SERIAL</SMALL> data type. It
|
||||
auto-creates a sequence. For example,
|
||||
this:</P>
|
||||
auto-creates a sequence. For example, this:</P>
|
||||
<PRE>
|
||||
CREATE TABLE person (
|
||||
id SERIAL,
|
||||
@@ -891,19 +814,20 @@ length</TD></TR>
|
||||
</PRE>
|
||||
|
||||
is automatically translated into this:
|
||||
|
||||
<PRE>
|
||||
CREATE SEQUENCE person_id_seq;
|
||||
CREATE TABLE person (
|
||||
id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
|
||||
name TEXT
|
||||
name TEXT
|
||||
);
|
||||
</PRE>
|
||||
|
||||
See the <I>create_sequence</I> manual page for more information
|
||||
about sequences.
|
||||
|
||||
<H4><A name="4.11.2">4.11.2</A>) How do I get the value of a
|
||||
<SMALL>SERIAL</SMALL> insert?</H4>
|
||||
<H3><A name="4.11.2">4.11.2</A>) How do I get the value of a
|
||||
<SMALL>SERIAL</SMALL> insert?</H3>
|
||||
|
||||
<P>One approach is to retrieve the next <SMALL>SERIAL</SMALL> value
|
||||
from the sequence object with the <I>nextval()</I> function
|
||||
@@ -915,39 +839,39 @@ length</TD></TR>
|
||||
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
|
||||
</PRE>
|
||||
|
||||
You would then also have the new value stored in
|
||||
<CODE>new_id</CODE> for use in other queries (e.g., as a foreign
|
||||
key to the <CODE>person</CODE> table). Note that the name of the
|
||||
automatically created <SMALL>SEQUENCE</SMALL> object will be named
|
||||
<<I>table</I>>_<<I>serialcolumn</I>>_<I>seq</I>, where
|
||||
<I>table</I> and <I>serialcolumn</I> are the names of your table
|
||||
and your <SMALL>SERIAL</SMALL> column, respectively.
|
||||
You would then also have the new value stored in <CODE>new_id</CODE>
|
||||
for use in other queries (e.g., as a foreign key to the <CODE>person
|
||||
</CODE> table). Note that the name of the automatically created
|
||||
<SMALL>SEQUENCE</SMALL> object will be named <<I>table</I>>_<<I>
|
||||
serialcolumn</I>>_<I>seq</I>, where <I>table</I> and <I>serialcolumn</I>
|
||||
are the names of your table and your <SMALL>SERIAL</SMALL> column,
|
||||
respectively.
|
||||
|
||||
<P>Alternatively, you could retrieve the assigned
|
||||
<SMALL>SERIAL</SMALL> value with the <I>currval()</I> function
|
||||
<I>after</I> it was inserted by default, e.g.,</P>
|
||||
<P>Alternatively, you could retrieve the assigned <SMALL>SERIAL</SMALL>
|
||||
value with the <I>currval()</I> function <I>after</I> it was inserted by
|
||||
default, e.g.,</P>
|
||||
<PRE>
|
||||
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
|
||||
new_id = execute("SELECT currval('person_id_seq')");
|
||||
</PRE>
|
||||
|
||||
<H4><A name="4.11.3">4.11.3</A>) Doesn't <I>currval()</I>
|
||||
lead to a race condition with other users?</H4>
|
||||
<H3><A name="4.11.3">4.11.3</A>) Doesn't <I>currval()</I>
|
||||
lead to a race condition with other users?</H3>
|
||||
|
||||
<P>No. <I>currval()</I> returns the current value assigned by your
|
||||
session, not by all sessions.</P>
|
||||
|
||||
<H4><A name="4.11.4">4.11.4</A>) Why aren't my sequence numbers
|
||||
<H3><A name="4.11.4">4.11.4</A>) Why aren't my sequence numbers
|
||||
reused on transaction abort? Why are there gaps in the numbering of
|
||||
my sequence/SERIAL column?</H4>
|
||||
my sequence/SERIAL column?</H3>
|
||||
|
||||
<P>To improve concurrency, sequence values are given out to running
|
||||
transactions as needed and are not locked until the transaction
|
||||
completes. This causes gaps in numbering from aborted
|
||||
transactions.</P>
|
||||
|
||||
<H4><A name="4.12">4.12</A>) What is an <SMALL>OID</SMALL>? What is
|
||||
a <SMALL>TID</SMALL>?</H4>
|
||||
<H3><A name="4.12">4.12</A>) What is an <SMALL>OID</SMALL>? What is
|
||||
a <SMALL>CTID</SMALL>?</H3>
|
||||
|
||||
<P>Every row that is created in PostgreSQL gets a unique
|
||||
<SMALL>OID</SMALL> unless created <SMALL>WITHOUT OIDS</SMALL>.
|
||||
@@ -964,13 +888,13 @@ length</TD></TR>
|
||||
<SMALL>SERIAL8</SMALL> is available for storing eight-byte sequence
|
||||
values.</P>
|
||||
|
||||
<P>T<SMALL>ID</SMALL>s are used to identify specific physical rows
|
||||
with block and offset values. T<SMALL>ID</SMALL>s change after rows
|
||||
<P>C<SMALL>TID</SMALL>s are used to identify specific physical rows
|
||||
with block and offset values. C<SMALL>TID</SMALL>s change after rows
|
||||
are modified or reloaded. They are used by index entries to point
|
||||
to physical rows.</P>
|
||||
|
||||
<H4><A name="4.13">4.13</A>) Why do I get the error <I>"ERROR:
|
||||
Memory exhausted in AllocSetAlloc()"</I>?</H4>
|
||||
<H3><A name="4.13">4.13</A>) Why do I get the error <I>"ERROR:
|
||||
Memory exhausted in AllocSetAlloc()"</I>?</H3>
|
||||
|
||||
<P>You probably have run out of virtual memory on your system,
|
||||
or your kernel has a low limit for certain resources. Try this
|
||||
@@ -988,36 +912,20 @@ length</TD></TR>
|
||||
backend is returning too much data, try it before starting the
|
||||
client.
|
||||
|
||||
<H4><A name="4.14">4.14</A>) How do I tell what PostgreSQL version
|
||||
I am running?</H4>
|
||||
<H3><A name="4.14">4.14</A>) How do I tell what PostgreSQL version
|
||||
I am running?</H3>
|
||||
|
||||
<P>From <I>psql</I>, type <CODE>SELECT version();</CODE></P>
|
||||
|
||||
<H4><A name="4.15">4.15</A>) Why does my large-object operations
|
||||
get <I>"invalid large obj descriptor"</I>?</H4>
|
||||
|
||||
<P>You need to put <CODE>BEGIN WORK</CODE> and <CODE>COMMIT</CODE>
|
||||
around any use of a large object handle, that is, surrounding
|
||||
<CODE>lo_open</CODE> ... <CODE>lo_close.</CODE></P>
|
||||
|
||||
<P>Currently PostgreSQL enforces the rule by closing large object
|
||||
handles at transaction commit. So the first attempt to do anything
|
||||
with the handle will draw <I>invalid large obj descriptor</I>. So
|
||||
code that used to work (at least most of the time) will now
|
||||
generate that error message if you fail to use a transaction.</P>
|
||||
|
||||
<P>If you are using a client interface like <SMALL>ODBC</SMALL> you
|
||||
may need to set <CODE>auto-commit off.</CODE></P>
|
||||
|
||||
<H4><A name="4.16">4.16</A>) How do I create a column that will
|
||||
default to the current time?</H4>
|
||||
<H3><A name="4.15">4.15</A>) How do I create a column that will
|
||||
default to the current time?</H3>
|
||||
|
||||
<P>Use <I>CURRENT_TIMESTAMP</I>:</P>
|
||||
<PRE>
|
||||
CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
|
||||
</PRE>
|
||||
|
||||
<H4><A name="4.17">4.17</A>) How do I perform an outer join?</H4>
|
||||
<H3><A name="4.16">4.16</A>) How do I perform an outer join?</H3>
|
||||
|
||||
<P>PostgreSQL supports outer joins using the SQL standard syntax.
|
||||
Here are two examples:</P>
|
||||
@@ -1040,8 +948,8 @@ length</TD></TR>
|
||||
<SMALL>RIGHT</SMALL>, and <SMALL>FULL</SMALL> joins. Ordinary joins
|
||||
are called <SMALL>INNER</SMALL> joins.</P>
|
||||
|
||||
<H4><A name="4.18">4.18</A>) How do I perform queries using
|
||||
multiple databases?</H4>
|
||||
<H3><A name="4.17">4.17</A>) How do I perform queries using
|
||||
multiple databases?</H3>
|
||||
|
||||
<P>There is no way to query a database other than the current one.
|
||||
Because PostgreSQL loads database-specific system catalogs, it is
|
||||
@@ -1052,16 +960,16 @@ length</TD></TR>
|
||||
connections to different databases and merge the results on the
|
||||
client side.</P>
|
||||
|
||||
<H4><A name="4.19">4.19</A>) How do I return multiple rows or
|
||||
columns from a function?</H4>
|
||||
<H3><A name="4.18">4.18</A>) How do I return multiple rows or
|
||||
columns from a function?</H3>
|
||||
|
||||
<P>It is easy using set-returning functions,
|
||||
<a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">
|
||||
http://techdocs.postgresql.org/guides/SetReturningFunctions</a></P>.
|
||||
|
||||
<H4><A name="4.20">4.20</A>) Why do I get "relation with OID #####
|
||||
<H3><A name="4.19">4.19</A>) Why do I get "relation with OID #####
|
||||
does not exist" errors when accessing temporary tables in PL/PgSQL
|
||||
functions?</H4>
|
||||
functions?</H3>
|
||||
|
||||
<P>PL/PgSQL caches function scripts, and an unfortunate side effect
|
||||
is that if a PL/PgSQL function accesses a temporary table, and that
|
||||
@@ -1071,56 +979,26 @@ length</TD></TR>
|
||||
<SMALL>EXECUTE</SMALL> for temporary table access in PL/PgSQL. This
|
||||
will cause the query to be reparsed every time.</P>
|
||||
|
||||
<H4><A name="4.21">4.21</A>) What encryption options are available?
|
||||
</H4>
|
||||
<UL>
|
||||
<LI><I>contrib/pgcrypto</I> contains many encryption functions for
|
||||
use in <SMALL>SQL</SMALL> queries.</LI>
|
||||
<LI>To encrypt transmission from the client to the server, the server
|
||||
must have the <I>ssl</I> option set to <I>true</I> in <I>postgresql.conf,
|
||||
</I> and an applicable <I>host</I> or <I>hostssl</I> record must exist in
|
||||
<I>pg_hba.conf</I>, and the client <I>sslmode</I> must not be
|
||||
<I>disable.</I> (Note that it is also possible to use a third-party
|
||||
encrypted transport, such as stunnel or ssh, rather than PostgreSQL's
|
||||
native SSL connections.)</LI>
|
||||
<LI>Database user passwords are automatically encrypted when stored in
|
||||
the system tables.</LI>
|
||||
<LI>The server can run using an encrypted file system.</LI>
|
||||
</UL>
|
||||
<H3><A name="4.20">4.20</A>) What replication solutions are available?
|
||||
</H3>
|
||||
|
||||
<HR>
|
||||
<P>Though "replication" is a single term, there are several technologies
|
||||
for doing replication, with advantages and disadvantages for each.</P>
|
||||
|
||||
<H2 align="center">Extending PostgreSQL</H2>
|
||||
<P>Master/slave replication allows a single master to receive read/write
|
||||
queries, while slaves can only accept read/<SMALL>SELECT</SMALL>
|
||||
queries. The most popular freely available master-slave PostgreSQL
|
||||
replication solution is <A
|
||||
href="http://gborg.postgresql.org/project/slony1/projdisplay.php">
|
||||
Slony-I</A>.</P>
|
||||
|
||||
<H4><A name="5.1">5.1</A>) I wrote a user-defined function. When I
|
||||
run it in <I>psql</I>, why does it dump core?</H4>
|
||||
<P>Multi-master replication allows read/write queries to be sent to
|
||||
multiple replicated computers. This capability also has a severe impact
|
||||
on performance due to the need to synchronize changes between servers.
|
||||
<A href="http://pgfoundry.org/projects/pgcluster/">Pgcluster</a> is the
|
||||
most popular such solution freely available for PostgreSQL.</P>
|
||||
|
||||
<P>The problem could be a number of things. Try testing your
|
||||
user-defined function in a stand-alone test program first.</P>
|
||||
|
||||
<H4><A name="5.2">5.2</A>) How can I contribute some nifty new
|
||||
types and functions to PostgreSQL?</H4>
|
||||
|
||||
<P>Send your extensions to the <I>pgsql-hackers</I> mailing list,
|
||||
and they will eventually end up in the <I>contrib/</I>
|
||||
subdirectory.</P>
|
||||
|
||||
<H4><A name="5.3">5.3</A>) How do I write a C function to return a
|
||||
tuple?</H4>
|
||||
|
||||
<P>In versions of PostgreSQL beginning with 7.3, table-returning
|
||||
functions are fully supported in C, PL/PgSQL, and SQL. See the
|
||||
Programmer's Guide for more information. An example of a
|
||||
table-returning function defined in C can be found in
|
||||
<I>contrib/tablefunc</I>.</P>
|
||||
|
||||
<H4><A name="5.4">5.4</A>) I have changed a source file. Why does
|
||||
the recompile not see the change?</H4>
|
||||
|
||||
<P>The <I>Makefiles</I> do not have the proper dependencies for
|
||||
include files. You have to do a <I>make clean</I> and then another
|
||||
<I>make</I>. If you are using <SMALL>GCC</SMALL> you can use the
|
||||
<I>--enable-depend</I> option of <I>configure</I> to have the
|
||||
compiler compute the dependencies automatically.</P>
|
||||
<P>There are also commercial and hardware-based replication solutions
|
||||
available supporting a variety of replication models.</P>
|
||||
</BODY>
|
||||
</HTML>
|
||||
|
@@ -13,7 +13,7 @@
|
||||
<H1>Developer's Frequently Asked Questions (FAQ) for
|
||||
PostgreSQL</H1>
|
||||
|
||||
<P>Last updated: Sun Mar 13 22:07:18 EST 2005</P>
|
||||
<P>Last updated: Fri May 6 13:47:54 EDT 2005</P>
|
||||
|
||||
<P>Current maintainer: Bruce Momjian (<A href=
|
||||
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
|
||||
@@ -44,8 +44,8 @@
|
||||
<A href="#1.10">1.10</A>) What books are good for developers?<BR>
|
||||
<A href="#1.11">1.11</A>) What is configure all about?<BR>
|
||||
<A href="#1.12">1.12</A>) How do I add a new port?<BR>
|
||||
<A href="#1.13">1.13</A>) Why don't you use threads/raw
|
||||
devices/async-I/O, <insert your favorite wizz-bang feature
|
||||
<A href="#1.13">1.13</A>) Why don't you use threads, raw
|
||||
devices, async-I/O, <insert your favorite wizz-bang feature
|
||||
here>?<BR>
|
||||
<A href="#1.14">1.14</A>) How are RPM's packaged?<BR>
|
||||
<A href="#1.15">1.15</A>) How are CVS branches handled?<BR>
|
||||
@@ -71,6 +71,8 @@
|
||||
<I>pfree</I>() to allocate memory?<BR>
|
||||
<A href="#2.6">2.6</A>) What is ereport()?<BR>
|
||||
<A href="#2.7">2.7</A>) What is CommandCounterIncrement()?<BR>
|
||||
<A href="#2.8">2.8</A>) What debugging features are available?<BR>
|
||||
|
||||
<BR>
|
||||
|
||||
<HR>
|
||||
@@ -230,6 +232,12 @@
|
||||
<P>There have been a number of discussions about other testing
|
||||
frameworks and some developers are exploring these ideas.</P>
|
||||
|
||||
<P>Keep in mind the <I>Makefiles</I> do not have the proper
|
||||
dependencies for include files. You have to do a <I>make clean</I>
|
||||
and then another <I>make</I>. If you are using <SMALL>GCC</SMALL>
|
||||
you can use the <I>--enable-depend</I> option of <I>configure</I>
|
||||
to have the compiler compute the dependencies automatically.</P>
|
||||
|
||||
<H3><A name="1.9">1.9</A>) What tools are available for
|
||||
developers?</H3>
|
||||
|
||||
@@ -422,8 +430,8 @@
|
||||
handling. There is a <I>backend/port</I> directory if you need
|
||||
special files for your OS.</P>
|
||||
|
||||
<H3><A name="1.13">1.13</A>) Why don't you use threads/raw
|
||||
devices/async-I/O, <insert your favorite wizz-bang feature
|
||||
<H3><A name="1.13">1.13</A>) Why don't you use threads, raw
|
||||
devices, async-I/O, <insert your favorite wizz-bang feature
|
||||
here>?</H3>
|
||||
|
||||
<P>There is always a temptation to use the newest operating system
|
||||
@@ -941,6 +949,45 @@
|
||||
modified by previous pieces. <I>CommandCounterIncrement()</I>
|
||||
increments the Command Counter, creating a new part of the
|
||||
transaction.</P>
|
||||
|
||||
<H3><A name="2.8">2.8</A>) What debugging features are
|
||||
available?</H3>
|
||||
|
||||
<P>First, try running <I>configure</I> with the --enable-cassert
|
||||
option, many <I>assert()</I>s monitor the progress of the backend
|
||||
and halt the program when something unexpected occurs.</P>
|
||||
|
||||
<P>The <I>postmaster</I> has a <I>-d</I> option that allows even more
|
||||
detailed information to be reported. The <I>-d</I> option takes a
|
||||
number that specifies the debug level. Be warned that high debug
|
||||
level values generate large log files.</P>
|
||||
|
||||
<P>If the <I>postmaster</I> is not running, you can actually run the
|
||||
<I>postgres</I> backend from the command line, and type your
|
||||
<SMALL>SQL</SMALL> statement directly. This is recommended
|
||||
<B>only</B> for debugging purposes. If you have compiled with debugging
|
||||
symbols, you can use a debugger to see what is happening. Because
|
||||
the backend was not started from <I>postmaster</I>, it is not
|
||||
running in an identical environment and locking/backend interaction
|
||||
problems may not be duplicated.</P>
|
||||
|
||||
<P>If the <I>postmaster</I> is running, start <I>psql</I> in one
|
||||
window, then find the <SMALL>PID</SMALL> of the <I>postgres</I>
|
||||
process used by <I>psql</I> using <CODE>SELECT pg_backend_pid()</CODE>.
|
||||
Use a debugger to attach to the <I>postgres</I> <SMALL>PID</SMALL>.
|
||||
You can set breakpoints in the debugger and issue queries from
|
||||
|
||||
<I>psql</I>. If you are debugging <I>postgres</I> startup, you can
|
||||
set PGOPTIONS="-W n", then start <I>psql</I>. This will cause startup
|
||||
to delay for <I>n</I> seconds so you can attach to the process with
|
||||
the debugger, set any breakpoints, and continue through the startup
|
||||
sequence.</P>
|
||||
|
||||
<P>You can also compile with profiling to see what functions are
|
||||
taking execution time. The backend profile files will be deposited
|
||||
in the <I>pgsql/data/base/dbname</I> directory. The client profile
|
||||
file will be put in the client's current directory. Linux requires
|
||||
a compile with <I>-DLINUX_PROFILE</I> for proper profiling.</P>
|
||||
</BODY>
|
||||
</HTML>
|
||||
|
||||
|
Reference in New Issue
Block a user