mirror of
https://github.com/postgres/postgres.git
synced 2025-08-06 18:42:54 +03:00
Backpatch FAQ's to 8.0.X for release.
This commit is contained in:
274
doc/FAQ
274
doc/FAQ
@@ -1,7 +1,7 @@
|
||||
|
||||
Frequently Asked Questions (FAQ) for PostgreSQL
|
||||
|
||||
Last updated: Tue Mar 15 17:38:18 EST 2005
|
||||
Last updated: Mon May 9 13:15:04 EDT 2005
|
||||
|
||||
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
1.10) How can I learn SQL?
|
||||
1.11) How do I join the development team?
|
||||
1.12) How does PostgreSQL compare to other DBMSs?
|
||||
1.13) Who controls PostgreSQL?
|
||||
|
||||
User Client Questions
|
||||
|
||||
@@ -67,29 +68,17 @@
|
||||
4.11.3) Doesn't currval() lead to a race condition with other users?
|
||||
4.11.4) Why aren't my sequence numbers reused on transaction abort?
|
||||
Why are there gaps in the numbering of my sequence/SERIAL column?
|
||||
4.12) What is an OID? What is a TID?
|
||||
4.12) What is an OID? What is a CTID?
|
||||
4.13) Why do I get the error "ERROR: Memory exhausted in
|
||||
AllocSetAlloc()"?
|
||||
4.14) How do I tell what PostgreSQL version I am running?
|
||||
4.15) Why does my large-object operations get "invalid large obj
|
||||
descriptor"?
|
||||
4.16) How do I create a column that will default to the current time?
|
||||
4.17) How do I perform an outer join?
|
||||
4.18) How do I perform queries using multiple databases?
|
||||
4.19) How do I return multiple rows or columns from a function?
|
||||
4.20) Why do I get "relation with OID ##### does not exist" errors
|
||||
4.15) How do I create a column that will default to the current time?
|
||||
4.16) How do I perform an outer join?
|
||||
4.17) How do I perform queries using multiple databases?
|
||||
4.18) How do I return multiple rows or columns from a function?
|
||||
4.19) Why do I get "relation with OID ##### does not exist" errors
|
||||
when accessing temporary tables in PL/PgSQL functions?
|
||||
4.21) What encryption options are available?
|
||||
|
||||
Extending PostgreSQL
|
||||
|
||||
5.1) I wrote a user-defined function. When I run it in psql, why does
|
||||
it dump core?
|
||||
5.2) How can I contribute some nifty new types and functions to
|
||||
PostgreSQL?
|
||||
5.3) How do I write a C function to return a tuple?
|
||||
5.4) I have changed a source file. Why does the recompile not see the
|
||||
change?
|
||||
4.20) What replication solutions are available?
|
||||
_________________________________________________________________
|
||||
|
||||
General Questions
|
||||
@@ -148,11 +137,11 @@
|
||||
PostgreSQL. The platforms that had received explicit testing at the
|
||||
time of release are listed in the installation instructions.
|
||||
|
||||
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
|
||||
http://pgfoundry.org/projects/pginstaller. MSDOS-based versions of
|
||||
Windows (Win95, Win98, WinMe) can run PostgreSQL using Cygwin.
|
||||
PostgreSQL also runs natively on Microsoft Windows NT-based operating
|
||||
systems like Win2000, WinXP, and Win2003. A prepackaged installer is
|
||||
available at http://pgfoundry.org/projects/pginstaller. MSDOS-based
|
||||
versions of Windows (Win95, Win98, WinMe) can run PostgreSQL using
|
||||
Cygwin.
|
||||
|
||||
There is also a Novell Netware 6 port at http://forge.novell.com, and
|
||||
an OS/2 (eComStation) version at
|
||||
@@ -161,9 +150,8 @@
|
||||
|
||||
1.4) Where can I get PostgreSQL?
|
||||
|
||||
The primary anonymous ftp site for PostgreSQL is
|
||||
ftp://ftp.PostgreSQL.org/pub/. For mirror sites, see our main web
|
||||
site.
|
||||
Via web browser, use http://www.postgresql.org/ftp/, and via ftp, use
|
||||
ftp://ftp.PostgreSQL.org/pub/.
|
||||
|
||||
1.5) Where can I get support?
|
||||
|
||||
@@ -174,10 +162,9 @@
|
||||
|
||||
The major IRC channel is #postgresql on Freenode (irc.freenode.net).
|
||||
To connect you can use the Unix program irc -c '#postgresql' "$USER"
|
||||
irc.freenode.net or use any of the other popular IRC clients. A
|
||||
Spanish one also exists on the same network, (#postgresql-es), and a
|
||||
French one, (#postgresqlfr). There is also a PostgreSQL channel on
|
||||
EFNet.
|
||||
irc.freenode.net or use any other IRC clients. A Spanish one also
|
||||
exists on the same network, (#postgresql-es), and a French one,
|
||||
(#postgresqlfr). There is also a PostgreSQL channel on EFNet.
|
||||
|
||||
A list of commercial support companies is available at
|
||||
http://techdocs.postgresql.org/companies.php.
|
||||
@@ -192,9 +179,10 @@
|
||||
|
||||
1.7) What is the latest release?
|
||||
|
||||
The latest release of PostgreSQL is version 8.0.1.
|
||||
The latest release of PostgreSQL is version 8.0.2.
|
||||
|
||||
We plan to have major releases every ten to twelve months.
|
||||
We plan to have a major release every year, with minor releases every
|
||||
few months.
|
||||
|
||||
1.8) What documentation is available?
|
||||
|
||||
@@ -204,8 +192,9 @@
|
||||
|
||||
There are two PostgreSQL books available online at
|
||||
http://www.postgresql.org/docs/books/awbook.html and
|
||||
http://www.commandprompt.com/ppbook/. There is a list of PostgreSQL
|
||||
books available for purchase at
|
||||
http://www.commandprompt.com/ppbook/. 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
|
||||
http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. There is also
|
||||
a collection of PostgreSQL technical articles at
|
||||
http://techdocs.PostgreSQL.org/.
|
||||
@@ -223,33 +212,21 @@
|
||||
|
||||
1.10) How can I learn SQL?
|
||||
|
||||
The PostgreSQL book at
|
||||
http://www.postgresql.org/docs/books/awbook.html teaches SQL. There is
|
||||
another PostgreSQL book at http://www.commandprompt.com/ppbook. There
|
||||
is a nice tutorial at
|
||||
First, consider the PostgreSQL-specific books mentioned above. Another
|
||||
one is "Teach Yourself SQL in 21 Days, Second Edition" at
|
||||
http://members.tripod.com/er4ebus/sql/index.htm. Many of our users
|
||||
like The Practical SQL Handbook, Bowman, Judith S., et al.,
|
||||
Addison-Wesley. Others like The Complete Reference SQL, Groff et al.,
|
||||
McGraw-Hill.
|
||||
|
||||
There is also a nice tutorial at
|
||||
http://www.intermedia.net/support/sql/sqltut.shtm, at
|
||||
http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,
|
||||
and at http://sqlcourse.com.
|
||||
|
||||
Another one is "Teach Yourself SQL in 21 Days, Second Edition" at
|
||||
http://members.tripod.com/er4ebus/sql/index.htm
|
||||
|
||||
Many of our users like The Practical SQL Handbook, Bowman, Judith S.,
|
||||
et al., Addison-Wesley. Others like The Complete Reference SQL, Groff
|
||||
et al., McGraw-Hill.
|
||||
|
||||
1.11) How do I join the development team?
|
||||
|
||||
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 pgsql-hackers and pgsql-patches mailing lists. Third,
|
||||
submit high quality patches to pgsql-patches.
|
||||
|
||||
There are about a dozen people who have commit privileges to the
|
||||
PostgreSQL CVS 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.
|
||||
See the Developer's FAQ.
|
||||
|
||||
1.12) How does PostgreSQL compare to other DBMSs?
|
||||
|
||||
@@ -267,13 +244,8 @@
|
||||
Performance
|
||||
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 Features section above.
|
||||
We are built for reliability and features, and we continue to
|
||||
improve performance in every release.
|
||||
others. Our performance is usually +/-10% compared to other
|
||||
databases.
|
||||
|
||||
Reliability
|
||||
We realize that a DBMS must be reliable, or it is worthless. We
|
||||
@@ -297,6 +269,17 @@
|
||||
We are free for all use, both commercial and non-commercial.
|
||||
You can add our code to your product with no limitations,
|
||||
except those outlined in our BSD-style license stated above.
|
||||
|
||||
1.13) Who controls PostgreSQL?
|
||||
|
||||
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 Developer's FAQ for information on how to get
|
||||
involved in PostgreSQL development.)
|
||||
_________________________________________________________________
|
||||
|
||||
User Client Questions
|
||||
@@ -326,15 +309,7 @@
|
||||
|
||||
2.3) Does PostgreSQL have a graphical user interface?
|
||||
|
||||
Yes, there are several graphical interfaces to PostgreSQL available.
|
||||
These include pgAdmin III (http://www.pgadmin.org, PgAccess
|
||||
http://www.pgaccess.org), RHDB Admin (http://sources.redhat.com/rhdb/
|
||||
), TORA ( http://www.globecom.net/tora/, partly commercial), and
|
||||
Rekall ( http://www.rekallrevealed.org/). There is also PhpPgAdmin (
|
||||
http://phppgadmin.sourceforge.net/ ), a web-based interface to
|
||||
PostgreSQL.
|
||||
|
||||
See http://techdocs.postgresql.org/guides/GUITools for a more detailed
|
||||
Yes, see http://techdocs.postgresql.org/guides/GUITools for a detailed
|
||||
list.
|
||||
_________________________________________________________________
|
||||
|
||||
@@ -390,43 +365,6 @@
|
||||
printing of query and process statistics which can be very useful for
|
||||
debugging and performance measurements.
|
||||
|
||||
The following detailed debug instructions are to be used to provide
|
||||
more detailed information for server developers debugging a problem.
|
||||
|
||||
It is also possible to debug the server if it isn't operating
|
||||
properly. First, by running configure with the --enable-cassert
|
||||
option, many assert()s monitor the progress of the backend and halt
|
||||
the program when something unexpected occurs.
|
||||
|
||||
The postmaster has a -d option that allows even more detailed
|
||||
information to be reported. The -d option takes a number that
|
||||
specifies the debug level. Be warned that high debug level values
|
||||
generate large log files.
|
||||
|
||||
If postmaster is not running, you can actually run the postgres
|
||||
backend from the command line, and type your SQL statement directly.
|
||||
This is recommended only 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 postmaster, it is not running
|
||||
in an identical environment and locking/backend interaction problems
|
||||
may not be duplicated.
|
||||
|
||||
If postmaster is running, start psql in one window, then find the PID
|
||||
of the postgres process used by psql using SELECT pg_backend_pid().
|
||||
Use a debugger to attach to the postgres PID. You can set breakpoints
|
||||
in the debugger and issue queries from psql. If you are debugging
|
||||
postgres startup, you can set PGOPTIONS="-W n", then start psql. This
|
||||
will cause startup to delay for n seconds so you can attach to the
|
||||
process with the debugger, set any breakpoints, and continue through
|
||||
the startup sequence.
|
||||
|
||||
You can also compile with profiling to see what functions are taking
|
||||
execution time. The backend profile files will be deposited in the
|
||||
pgsql/data/base/dbname directory. The client profile file will be put
|
||||
in the client's current directory. Linux requires a compile with
|
||||
-DLINUX_PROFILE for proper profiling.
|
||||
|
||||
3.5) Why do I get "Sorry, too many clients" when trying to connect?
|
||||
|
||||
You have reached the default limit is 100 database sessions. You need
|
||||
@@ -438,7 +376,7 @@
|
||||
PostgreSQL releases?
|
||||
|
||||
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
|
||||
@@ -567,11 +505,11 @@
|
||||
|
||||
4.6) Why are my queries slow? Why don't they use my indexes?
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
To determine if an index should be used, PostgreSQL must have
|
||||
statistics about the table. These statistics are collected using
|
||||
@@ -594,8 +532,8 @@
|
||||
LIMIT 1;
|
||||
|
||||
If you believe the optimizer is incorrect in choosing a sequential
|
||||
scan, use SET enable_seqscan TO 'off' and run tests to see if an index
|
||||
scan is indeed faster.
|
||||
scan, use SET enable_seqscan TO 'off' and run query again to see if an
|
||||
index scan is indeed faster.
|
||||
|
||||
When using wild-card operators such as LIKE or ~, indexes can only be
|
||||
used in certain circumstances:
|
||||
@@ -641,13 +579,13 @@
|
||||
4.9) In a query, how do I detect if a field is NULL? How can I sort on
|
||||
whether a field is NULL or not?
|
||||
|
||||
You test the column with IS NULL and IS NOT NULL.
|
||||
You test the column with IS NULL and IS NOT NULL, like this:
|
||||
SELECT *
|
||||
FROM tab
|
||||
WHERE col IS NULL;
|
||||
|
||||
To sort by the NULL status, use the IS NULL and IS NOT NULL modifiers
|
||||
in your WHERE clause. Things that are true will sort higher than
|
||||
in your ORDER BY clause. Things that are true will sort higher than
|
||||
things that are false, so the following will put NULL entries at the
|
||||
top of the resulting list:
|
||||
SELECT *
|
||||
@@ -668,9 +606,9 @@
|
||||
|
||||
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 TOAST, so the space on disk might also be less than expected.
|
||||
space used is slightly greater than the declared size. However, long
|
||||
values are also subject to compression, so the space on disk might
|
||||
also be less than expected.
|
||||
VARCHAR(n) is best when storing variable-length strings and it limits
|
||||
how long a string can be. TEXT is for strings of unlimited length,
|
||||
with a maximum of one gigabyte.
|
||||
@@ -712,8 +650,8 @@
|
||||
You would then also have the new value stored in new_id for use in
|
||||
other queries (e.g., as a foreign key to the person table). Note that
|
||||
the name of the automatically created SEQUENCE object will be named
|
||||
<table>_<serialcolumn>_seq, where table and serialcolumn are the names
|
||||
of your table and your SERIAL column, respectively.
|
||||
<table>_< serialcolumn>_seq, where table and serialcolumn are the
|
||||
names of your table and your SERIAL column, respectively.
|
||||
|
||||
Alternatively, you could retrieve the assigned SERIAL value with the
|
||||
currval() function after it was inserted by default, e.g.,
|
||||
@@ -732,7 +670,7 @@
|
||||
transactions as needed and are not locked until the transaction
|
||||
completes. This causes gaps in numbering from aborted transactions.
|
||||
|
||||
4.12) What is an OID? What is a TID?
|
||||
4.12) What is an OID? What is a CTID?
|
||||
|
||||
Every row that is created in PostgreSQL gets a unique OID unless
|
||||
created WITHOUT OIDS. OIDs are autotomatically assigned unique 4-byte
|
||||
@@ -745,9 +683,9 @@
|
||||
single table. and are therefore less likely to overflow. SERIAL8 is
|
||||
available for storing eight-byte sequence values.
|
||||
|
||||
TIDs are used to identify specific physical rows with block and offset
|
||||
values. TIDs change after rows are modified or reloaded. They are used
|
||||
by index entries to point to physical rows.
|
||||
CTIDs are used to identify specific physical rows with block and
|
||||
offset values. CTIDs change after rows are modified or reloaded. They
|
||||
are used by index entries to point to physical rows.
|
||||
|
||||
4.13) Why do I get the error "ERROR: Memory exhausted in AllocSetAlloc()"?
|
||||
|
||||
@@ -768,27 +706,12 @@
|
||||
|
||||
From psql, type SELECT version();
|
||||
|
||||
4.15) Why does my large-object operations get "invalid large obj
|
||||
descriptor"?
|
||||
|
||||
You need to put BEGIN WORK and COMMIT around any use of a large object
|
||||
handle, that is, surrounding lo_open ... lo_close.
|
||||
|
||||
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 invalid large obj descriptor. 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.
|
||||
|
||||
If you are using a client interface like ODBC you may need to set
|
||||
auto-commit off.
|
||||
|
||||
4.16) How do I create a column that will default to the current time?
|
||||
4.15) How do I create a column that will default to the current time?
|
||||
|
||||
Use CURRENT_TIMESTAMP:
|
||||
CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
|
||||
|
||||
4.17) How do I perform an outer join?
|
||||
4.16) How do I perform an outer join?
|
||||
|
||||
PostgreSQL supports outer joins using the SQL standard syntax. Here
|
||||
are two examples:
|
||||
@@ -806,7 +729,7 @@
|
||||
is assumed in LEFT, RIGHT, and FULL joins. Ordinary joins are called
|
||||
INNER joins.
|
||||
|
||||
4.18) How do I perform queries using multiple databases?
|
||||
4.17) How do I perform queries using multiple databases?
|
||||
|
||||
There is no way to query a database other than the current one.
|
||||
Because PostgreSQL loads database-specific system catalogs, it is
|
||||
@@ -816,13 +739,13 @@
|
||||
course, a client can also make simultaneous connections to different
|
||||
databases and merge the results on the client side.
|
||||
|
||||
4.19) How do I return multiple rows or columns from a function?
|
||||
4.18) How do I return multiple rows or columns from a function?
|
||||
|
||||
It is easy using set-returning functions,
|
||||
http://techdocs.postgresql.org/guides/SetReturningFunctions
|
||||
.
|
||||
|
||||
4.20) Why do I get "relation with OID ##### does not exist" errors when
|
||||
4.19) Why do I get "relation with OID ##### does not exist" errors when
|
||||
accessing temporary tables in PL/PgSQL functions?
|
||||
|
||||
PL/PgSQL caches function scripts, and an unfortunate side effect is
|
||||
@@ -833,46 +756,21 @@
|
||||
table access in PL/PgSQL. This will cause the query to be reparsed
|
||||
every time.
|
||||
|
||||
4.21) What encryption options are available?
|
||||
4.20) What replication solutions are available?
|
||||
|
||||
* contrib/pgcrypto contains many encryption functions for use in SQL
|
||||
queries.
|
||||
* To encrypt transmission from the client to the server, the server
|
||||
must have the ssl option set to true in postgresql.conf, and an
|
||||
applicable host or hostssl record must exist in pg_hba.conf, and
|
||||
the client sslmode must not be disable. (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.)
|
||||
* Database user passwords are automatically encrypted when stored in
|
||||
the system tables.
|
||||
* The server can run using an encrypted file system.
|
||||
_________________________________________________________________
|
||||
Though "replication" is a single term, there are several technologies
|
||||
for doing replication, with advantages and disadvantages for each.
|
||||
|
||||
Extending PostgreSQL
|
||||
Master/slave replication allows a single master to receive read/write
|
||||
queries, while slaves can only accept read/SELECT queries. The most
|
||||
popular freely available master-slave PostgreSQL replication solution
|
||||
is Slony-I.
|
||||
|
||||
5.1) I wrote a user-defined function. When I run it in psql, why does it
|
||||
dump core?
|
||||
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. Pgcluster is the most popular such solution freely available
|
||||
for PostgreSQL.
|
||||
|
||||
The problem could be a number of things. Try testing your user-defined
|
||||
function in a stand-alone test program first.
|
||||
|
||||
5.2) How can I contribute some nifty new types and functions to PostgreSQL?
|
||||
|
||||
Send your extensions to the pgsql-hackers mailing list, and they will
|
||||
eventually end up in the contrib/ subdirectory.
|
||||
|
||||
5.3) How do I write a C function to return a tuple?
|
||||
|
||||
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
|
||||
contrib/tablefunc.
|
||||
|
||||
5.4) I have changed a source file. Why does the recompile not see the
|
||||
change?
|
||||
|
||||
The Makefiles do not have the proper dependencies for include files.
|
||||
You have to do a make clean and then another make. If you are using
|
||||
GCC you can use the --enable-depend option of configure to have the
|
||||
compiler compute the dependencies automatically.
|
||||
There are also commercial and hardware-based replication solutions
|
||||
available supporting a variety of replication models.
|
||||
|
48
doc/FAQ_DEV
48
doc/FAQ_DEV
@@ -1,7 +1,7 @@
|
||||
|
||||
Developer's Frequently Asked Questions (FAQ) for PostgreSQL
|
||||
|
||||
Last updated: Sun Mar 13 22:07:18 EST 2005
|
||||
Last updated: Fri May 6 13:47:54 EDT 2005
|
||||
|
||||
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
|
||||
|
||||
@@ -23,7 +23,7 @@ General Questions
|
||||
1.10) What books are good for developers?
|
||||
1.11) What is configure all about?
|
||||
1.12) How do I add a new port?
|
||||
1.13) Why don't you use threads/raw devices/async-I/O, <insert your
|
||||
1.13) Why don't you use threads, raw devices, async-I/O, <insert your
|
||||
favorite wizz-bang feature here>?
|
||||
1.14) How are RPM's packaged?
|
||||
1.15) How are CVS branches handled?
|
||||
@@ -42,6 +42,7 @@ Technical Questions
|
||||
2.5) Why do we use palloc() and pfree() to allocate memory?
|
||||
2.6) What is ereport()?
|
||||
2.7) What is CommandCounterIncrement()?
|
||||
2.8) What debugging features are available?
|
||||
_________________________________________________________________
|
||||
|
||||
General Questions
|
||||
@@ -172,6 +173,11 @@ General Questions
|
||||
There have been a number of discussions about other testing frameworks
|
||||
and some developers are exploring these ideas.
|
||||
|
||||
Keep in mind the Makefiles do not have the proper dependencies for
|
||||
include files. You have to do a make clean and then another make. If
|
||||
you are using GCC you can use the --enable-depend option of configure
|
||||
to have the compiler compute the dependencies automatically.
|
||||
|
||||
1.9) What tools are available for developers?
|
||||
|
||||
First, all the files in the src/tools directory are designed for
|
||||
@@ -343,8 +349,8 @@ General Questions
|
||||
src/makefiles directory for port-specific Makefile handling. There is
|
||||
a backend/port directory if you need special files for your OS.
|
||||
|
||||
1.13) Why don't you use threads/raw devices/async-I/O, <insert your favorite
|
||||
wizz-bang feature here>?
|
||||
1.13) Why don't you use threads, raw devices, async-I/O, <insert your
|
||||
favorite wizz-bang feature here>?
|
||||
|
||||
There is always a temptation to use the newest operating system
|
||||
features as soon as they arrive. We resist that temptation.
|
||||
@@ -762,3 +768,37 @@ typedef struct nameData
|
||||
to be broken into pieces so each piece can see rows modified by
|
||||
previous pieces. CommandCounterIncrement() increments the Command
|
||||
Counter, creating a new part of the transaction.
|
||||
|
||||
2.8) What debugging features are available?
|
||||
|
||||
First, try running configure with the --enable-cassert option, many
|
||||
assert()s monitor the progress of the backend and halt the program
|
||||
when something unexpected occurs.
|
||||
|
||||
The postmaster has a -d option that allows even more detailed
|
||||
information to be reported. The -d option takes a number that
|
||||
specifies the debug level. Be warned that high debug level values
|
||||
generate large log files.
|
||||
|
||||
If the postmaster is not running, you can actually run the postgres
|
||||
backend from the command line, and type your SQL statement directly.
|
||||
This is recommended only 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 postmaster, it is
|
||||
not running in an identical environment and locking/backend
|
||||
interaction problems may not be duplicated.
|
||||
|
||||
If the postmaster is running, start psql in one window, then find the
|
||||
PID of the postgres process used by psql using SELECT
|
||||
pg_backend_pid(). Use a debugger to attach to the postgres PID. You
|
||||
can set breakpoints in the debugger and issue queries from psql. If
|
||||
you are debugging postgres startup, you can set PGOPTIONS="-W n", then
|
||||
start psql. This will cause startup to delay for n seconds so you can
|
||||
attach to the process with the debugger, set any breakpoints, and
|
||||
continue through the startup sequence.
|
||||
|
||||
You can also compile with profiling to see what functions are taking
|
||||
execution time. The backend profile files will be deposited in the
|
||||
pgsql/data/base/dbname directory. The client profile file will be put
|
||||
in the client's current directory. Linux requires a compile with
|
||||
-DLINUX_PROFILE for proper profiling.
|
||||
|
@@ -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,8 +582,8 @@
|
||||
<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>
|
||||
@@ -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,8 +765,8 @@ 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>
|
||||
<TR><TH>Type</TH><TH>Internal Name</TH><TH>Notes</TH></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,6 +814,7 @@ length</TD></TR>
|
||||
</PRE>
|
||||
|
||||
is automatically translated into this:
|
||||
|
||||
<PRE>
|
||||
CREATE SEQUENCE person_id_seq;
|
||||
CREATE TABLE person (
|
||||
@@ -902,8 +826,8 @@ length</TD></TR>
|
||||
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