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
|
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)
|
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
|
||||||
|
|
||||||
@@ -26,6 +26,7 @@
|
|||||||
1.10) How can I learn SQL?
|
1.10) How can I learn SQL?
|
||||||
1.11) How do I join the development team?
|
1.11) How do I join the development team?
|
||||||
1.12) How does PostgreSQL compare to other DBMSs?
|
1.12) How does PostgreSQL compare to other DBMSs?
|
||||||
|
1.13) Who controls PostgreSQL?
|
||||||
|
|
||||||
User Client Questions
|
User Client Questions
|
||||||
|
|
||||||
@@ -67,29 +68,17 @@
|
|||||||
4.11.3) Doesn't currval() lead to a race condition with other users?
|
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?
|
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?
|
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
|
4.13) Why do I get the error "ERROR: Memory exhausted in
|
||||||
AllocSetAlloc()"?
|
AllocSetAlloc()"?
|
||||||
4.14) How do I tell what PostgreSQL version I am running?
|
4.14) How do I tell what PostgreSQL version I am running?
|
||||||
4.15) Why does my large-object operations get "invalid large obj
|
4.15) How do I create a column that will default to the current time?
|
||||||
descriptor"?
|
4.16) How do I perform an outer join?
|
||||||
4.16) How do I create a column that will default to the current time?
|
4.17) How do I perform queries using multiple databases?
|
||||||
4.17) How do I perform an outer join?
|
4.18) How do I return multiple rows or columns from a function?
|
||||||
4.18) How do I perform queries using multiple databases?
|
4.19) Why do I get "relation with OID ##### does not exist" errors
|
||||||
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
|
|
||||||
when accessing temporary tables in PL/PgSQL functions?
|
when accessing temporary tables in PL/PgSQL functions?
|
||||||
4.21) What encryption options are available?
|
4.20) What replication solutions 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?
|
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
General Questions
|
General Questions
|
||||||
@@ -148,11 +137,11 @@
|
|||||||
PostgreSQL. The platforms that had received explicit testing at the
|
PostgreSQL. The platforms that had received explicit testing at the
|
||||||
time of release are listed in the installation instructions.
|
time of release are listed in the installation instructions.
|
||||||
|
|
||||||
Starting with version 8.0, PostgreSQL now runs natively on Microsoft
|
PostgreSQL also runs natively on Microsoft Windows NT-based operating
|
||||||
Windows NT-based operating systems like Win2000, WinXP, and Win2003. A
|
systems like Win2000, WinXP, and Win2003. A prepackaged installer is
|
||||||
prepackaged installer is available at
|
available at http://pgfoundry.org/projects/pginstaller. MSDOS-based
|
||||||
http://pgfoundry.org/projects/pginstaller. MSDOS-based versions of
|
versions of Windows (Win95, Win98, WinMe) can run PostgreSQL using
|
||||||
Windows (Win95, Win98, WinMe) can run PostgreSQL using Cygwin.
|
Cygwin.
|
||||||
|
|
||||||
There is also a Novell Netware 6 port at http://forge.novell.com, and
|
There is also a Novell Netware 6 port at http://forge.novell.com, and
|
||||||
an OS/2 (eComStation) version at
|
an OS/2 (eComStation) version at
|
||||||
@@ -161,9 +150,8 @@
|
|||||||
|
|
||||||
1.4) Where can I get PostgreSQL?
|
1.4) Where can I get PostgreSQL?
|
||||||
|
|
||||||
The primary anonymous ftp site for PostgreSQL is
|
Via web browser, use http://www.postgresql.org/ftp/, and via ftp, use
|
||||||
ftp://ftp.PostgreSQL.org/pub/. For mirror sites, see our main web
|
ftp://ftp.PostgreSQL.org/pub/.
|
||||||
site.
|
|
||||||
|
|
||||||
1.5) Where can I get support?
|
1.5) Where can I get support?
|
||||||
|
|
||||||
@@ -174,10 +162,9 @@
|
|||||||
|
|
||||||
The major IRC channel is #postgresql on Freenode (irc.freenode.net).
|
The major IRC channel is #postgresql on Freenode (irc.freenode.net).
|
||||||
To connect you can use the Unix program irc -c '#postgresql' "$USER"
|
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
|
irc.freenode.net or use any other IRC clients. A Spanish one also
|
||||||
Spanish one also exists on the same network, (#postgresql-es), and a
|
exists on the same network, (#postgresql-es), and a French one,
|
||||||
French one, (#postgresqlfr). There is also a PostgreSQL channel on
|
(#postgresqlfr). There is also a PostgreSQL channel on EFNet.
|
||||||
EFNet.
|
|
||||||
|
|
||||||
A list of commercial support companies is available at
|
A list of commercial support companies is available at
|
||||||
http://techdocs.postgresql.org/companies.php.
|
http://techdocs.postgresql.org/companies.php.
|
||||||
@@ -192,9 +179,10 @@
|
|||||||
|
|
||||||
1.7) What is the latest release?
|
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?
|
1.8) What documentation is available?
|
||||||
|
|
||||||
@@ -204,8 +192,9 @@
|
|||||||
|
|
||||||
There are two PostgreSQL books available online at
|
There are two PostgreSQL books available online at
|
||||||
http://www.postgresql.org/docs/books/awbook.html and
|
http://www.postgresql.org/docs/books/awbook.html and
|
||||||
http://www.commandprompt.com/ppbook/. There is a list of PostgreSQL
|
http://www.commandprompt.com/ppbook/. There are a number of PostgreSQL
|
||||||
books available for purchase at
|
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
|
http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. There is also
|
||||||
a collection of PostgreSQL technical articles at
|
a collection of PostgreSQL technical articles at
|
||||||
http://techdocs.PostgreSQL.org/.
|
http://techdocs.PostgreSQL.org/.
|
||||||
@@ -223,33 +212,21 @@
|
|||||||
|
|
||||||
1.10) How can I learn SQL?
|
1.10) How can I learn SQL?
|
||||||
|
|
||||||
The PostgreSQL book at
|
First, consider the PostgreSQL-specific books mentioned above. Another
|
||||||
http://www.postgresql.org/docs/books/awbook.html teaches SQL. There is
|
one is "Teach Yourself SQL in 21 Days, Second Edition" at
|
||||||
another PostgreSQL book at http://www.commandprompt.com/ppbook. There
|
http://members.tripod.com/er4ebus/sql/index.htm. Many of our users
|
||||||
is a nice tutorial at
|
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://www.intermedia.net/support/sql/sqltut.shtm, at
|
||||||
http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,
|
http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,
|
||||||
and at http://sqlcourse.com.
|
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?
|
1.11) How do I join the development team?
|
||||||
|
|
||||||
First, download the latest source and read the PostgreSQL Developers
|
See the Developer's FAQ.
|
||||||
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.
|
|
||||||
|
|
||||||
1.12) How does PostgreSQL compare to other DBMSs?
|
1.12) How does PostgreSQL compare to other DBMSs?
|
||||||
|
|
||||||
@@ -267,13 +244,8 @@
|
|||||||
Performance
|
Performance
|
||||||
PostgreSQL's performance is comparable to other commercial and
|
PostgreSQL's performance is comparable to other commercial and
|
||||||
open source databases. It is faster for some things, slower for
|
open source databases. It is faster for some things, slower for
|
||||||
others. In comparison to MySQL or leaner database systems, we
|
others. Our performance is usually +/-10% compared to other
|
||||||
are faster for multiple users, complex queries, and a
|
databases.
|
||||||
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.
|
|
||||||
|
|
||||||
Reliability
|
Reliability
|
||||||
We realize that a DBMS must be reliable, or it is worthless. We
|
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.
|
We are free for all use, both commercial and non-commercial.
|
||||||
You can add our code to your product with no limitations,
|
You can add our code to your product with no limitations,
|
||||||
except those outlined in our BSD-style license stated above.
|
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
|
User Client Questions
|
||||||
@@ -326,15 +309,7 @@
|
|||||||
|
|
||||||
2.3) Does PostgreSQL have a graphical user interface?
|
2.3) Does PostgreSQL have a graphical user interface?
|
||||||
|
|
||||||
Yes, there are several graphical interfaces to PostgreSQL available.
|
Yes, see http://techdocs.postgresql.org/guides/GUITools for a detailed
|
||||||
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
|
|
||||||
list.
|
list.
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
@@ -390,43 +365,6 @@
|
|||||||
printing of query and process statistics which can be very useful for
|
printing of query and process statistics which can be very useful for
|
||||||
debugging and performance measurements.
|
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?
|
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
|
You have reached the default limit is 100 database sessions. You need
|
||||||
@@ -438,7 +376,7 @@
|
|||||||
PostgreSQL releases?
|
PostgreSQL releases?
|
||||||
|
|
||||||
The PostgreSQL team makes only small changes between minor 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
|
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
|
internal format of system tables and data files. These changes are
|
||||||
often complex, so we don't maintain backward compatibility for data
|
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?
|
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
|
Indexes are not used by every query. Indexes are used only if the
|
||||||
used if the table is larger than a minimum size, and the query selects
|
table is larger than a minimum size, and the query selects only a
|
||||||
only a small percentage of the rows in the table. This is because the
|
small percentage of the rows in the table. This is because the random
|
||||||
random disk access caused by an index scan can be slower than a
|
disk access caused by an index scan can be slower than a straight read
|
||||||
straight read through the table, or sequential scan.
|
through the table, or sequential scan.
|
||||||
|
|
||||||
To determine if an index should be used, PostgreSQL must have
|
To determine if an index should be used, PostgreSQL must have
|
||||||
statistics about the table. These statistics are collected using
|
statistics about the table. These statistics are collected using
|
||||||
@@ -594,8 +532,8 @@
|
|||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
|
|
||||||
If you believe the optimizer is incorrect in choosing a sequential
|
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, use SET enable_seqscan TO 'off' and run query again to see if an
|
||||||
scan is indeed faster.
|
index scan is indeed faster.
|
||||||
|
|
||||||
When using wild-card operators such as LIKE or ~, indexes can only be
|
When using wild-card operators such as LIKE or ~, indexes can only be
|
||||||
used in certain circumstances:
|
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
|
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?
|
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 *
|
SELECT *
|
||||||
FROM tab
|
FROM tab
|
||||||
WHERE col IS NULL;
|
WHERE col IS NULL;
|
||||||
|
|
||||||
To sort by the NULL status, use the IS NULL and IS NOT NULL modifiers
|
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
|
things that are false, so the following will put NULL entries at the
|
||||||
top of the resulting list:
|
top of the resulting list:
|
||||||
SELECT *
|
SELECT *
|
||||||
@@ -668,9 +606,9 @@
|
|||||||
|
|
||||||
The first four types above are "varlena" types (i.e., the first four
|
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
|
bytes on disk are the length, followed by the data). Thus the actual
|
||||||
space used is slightly greater than the declared size. However, these
|
space used is slightly greater than the declared size. However, long
|
||||||
data types are also subject to compression or being stored out-of-line
|
values are also subject to compression, so the space on disk might
|
||||||
by TOAST, so the space on disk might also be less than expected.
|
also be less than expected.
|
||||||
VARCHAR(n) is best when storing variable-length strings and it limits
|
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,
|
how long a string can be. TEXT is for strings of unlimited length,
|
||||||
with a maximum of one gigabyte.
|
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
|
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
|
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
|
the name of the automatically created SEQUENCE object will be named
|
||||||
<table>_<serialcolumn>_seq, where table and serialcolumn are the names
|
<table>_< serialcolumn>_seq, where table and serialcolumn are the
|
||||||
of your table and your SERIAL column, respectively.
|
names of your table and your SERIAL column, respectively.
|
||||||
|
|
||||||
Alternatively, you could retrieve the assigned SERIAL value with the
|
Alternatively, you could retrieve the assigned SERIAL value with the
|
||||||
currval() function after it was inserted by default, e.g.,
|
currval() function after it was inserted by default, e.g.,
|
||||||
@@ -732,7 +670,7 @@
|
|||||||
transactions as needed and are not locked until the transaction
|
transactions as needed and are not locked until the transaction
|
||||||
completes. This causes gaps in numbering from aborted transactions.
|
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
|
Every row that is created in PostgreSQL gets a unique OID unless
|
||||||
created WITHOUT OIDS. OIDs are autotomatically assigned unique 4-byte
|
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
|
single table. and are therefore less likely to overflow. SERIAL8 is
|
||||||
available for storing eight-byte sequence values.
|
available for storing eight-byte sequence values.
|
||||||
|
|
||||||
TIDs are used to identify specific physical rows with block and offset
|
CTIDs are used to identify specific physical rows with block and
|
||||||
values. TIDs change after rows are modified or reloaded. They are used
|
offset values. CTIDs change after rows are modified or reloaded. They
|
||||||
by index entries to point to physical rows.
|
are used by index entries to point to physical rows.
|
||||||
|
|
||||||
4.13) Why do I get the error "ERROR: Memory exhausted in AllocSetAlloc()"?
|
4.13) Why do I get the error "ERROR: Memory exhausted in AllocSetAlloc()"?
|
||||||
|
|
||||||
@@ -768,27 +706,12 @@
|
|||||||
|
|
||||||
From psql, type SELECT version();
|
From psql, type SELECT version();
|
||||||
|
|
||||||
4.15) Why does my large-object operations get "invalid large obj
|
4.15) How do I create a column that will default to the current time?
|
||||||
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?
|
|
||||||
|
|
||||||
Use CURRENT_TIMESTAMP:
|
Use CURRENT_TIMESTAMP:
|
||||||
CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT 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
|
PostgreSQL supports outer joins using the SQL standard syntax. Here
|
||||||
are two examples:
|
are two examples:
|
||||||
@@ -806,7 +729,7 @@
|
|||||||
is assumed in LEFT, RIGHT, and FULL joins. Ordinary joins are called
|
is assumed in LEFT, RIGHT, and FULL joins. Ordinary joins are called
|
||||||
INNER joins.
|
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.
|
There is no way to query a database other than the current one.
|
||||||
Because PostgreSQL loads database-specific system catalogs, it is
|
Because PostgreSQL loads database-specific system catalogs, it is
|
||||||
@@ -816,13 +739,13 @@
|
|||||||
course, a client can also make simultaneous connections to different
|
course, a client can also make simultaneous connections to different
|
||||||
databases and merge the results on the client side.
|
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,
|
It is easy using set-returning functions,
|
||||||
http://techdocs.postgresql.org/guides/SetReturningFunctions
|
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?
|
accessing temporary tables in PL/PgSQL functions?
|
||||||
|
|
||||||
PL/PgSQL caches function scripts, and an unfortunate side effect is
|
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
|
table access in PL/PgSQL. This will cause the query to be reparsed
|
||||||
every time.
|
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
|
Though "replication" is a single term, there are several technologies
|
||||||
queries.
|
for doing replication, with advantages and disadvantages for each.
|
||||||
* 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.
|
|
||||||
_________________________________________________________________
|
|
||||||
|
|
||||||
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
|
Multi-master replication allows read/write queries to be sent to
|
||||||
dump core?
|
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
|
There are also commercial and hardware-based replication solutions
|
||||||
function in a stand-alone test program first.
|
available supporting a variety of replication models.
|
||||||
|
|
||||||
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.
|
|
||||||
|
48
doc/FAQ_DEV
48
doc/FAQ_DEV
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
Developer's Frequently Asked Questions (FAQ) for PostgreSQL
|
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)
|
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@ General Questions
|
|||||||
1.10) What books are good for developers?
|
1.10) What books are good for developers?
|
||||||
1.11) What is configure all about?
|
1.11) What is configure all about?
|
||||||
1.12) How do I add a new port?
|
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>?
|
favorite wizz-bang feature here>?
|
||||||
1.14) How are RPM's packaged?
|
1.14) How are RPM's packaged?
|
||||||
1.15) How are CVS branches handled?
|
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.5) Why do we use palloc() and pfree() to allocate memory?
|
||||||
2.6) What is ereport()?
|
2.6) What is ereport()?
|
||||||
2.7) What is CommandCounterIncrement()?
|
2.7) What is CommandCounterIncrement()?
|
||||||
|
2.8) What debugging features are available?
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
General Questions
|
General Questions
|
||||||
@@ -172,6 +173,11 @@ General Questions
|
|||||||
There have been a number of discussions about other testing frameworks
|
There have been a number of discussions about other testing frameworks
|
||||||
and some developers are exploring these ideas.
|
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?
|
1.9) What tools are available for developers?
|
||||||
|
|
||||||
First, all the files in the src/tools directory are designed for
|
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
|
src/makefiles directory for port-specific Makefile handling. There is
|
||||||
a backend/port directory if you need special files for your OS.
|
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
|
1.13) Why don't you use threads, raw devices, async-I/O, <insert your
|
||||||
wizz-bang feature here>?
|
favorite wizz-bang feature here>?
|
||||||
|
|
||||||
There is always a temptation to use the newest operating system
|
There is always a temptation to use the newest operating system
|
||||||
features as soon as they arrive. We resist that temptation.
|
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
|
to be broken into pieces so each piece can see rows modified by
|
||||||
previous pieces. CommandCounterIncrement() increments the Command
|
previous pieces. CommandCounterIncrement() increments the Command
|
||||||
Counter, creating a new part of the transaction.
|
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">
|
alink="#0000ff">
|
||||||
<H1>Frequently Asked Questions (FAQ) for PostgreSQL</H1>
|
<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=
|
<P>Current maintainer: Bruce Momjian (<A href=
|
||||||
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)
|
"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.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
|
<A href="#1.12">1.12</A>) How does PostgreSQL compare to other
|
||||||
<SMALL>DBMS</SMALL>s?<BR>
|
<SMALL>DBMS</SMALL>s?<BR>
|
||||||
|
<A href="#1.13">1.13</A>) Who controls PostgreSQL?<BR>
|
||||||
|
|
||||||
|
|
||||||
<H2 align="center">User Client Questions</H2>
|
<H2 align="center">User Client Questions</H2>
|
||||||
@@ -99,41 +100,29 @@
|
|||||||
reused on transaction abort? Why are there gaps in the numbering of
|
reused on transaction abort? Why are there gaps in the numbering of
|
||||||
my sequence/SERIAL column?<BR>
|
my sequence/SERIAL column?<BR>
|
||||||
<A href="#4.12">4.12</A>) What is an <SMALL>OID</SMALL>? What is a
|
<A href="#4.12">4.12</A>) What is an <SMALL>OID</SMALL>? What is a
|
||||||
<SMALL>TID</SMALL>?<BR>
|
<SMALL>CTID</SMALL>?<BR>
|
||||||
<A href="#4.12">4.13</A>) Why do I get the error <I>"ERROR: Memory
|
<A href="#4.13">4.13</A>) Why do I get the error <I>"ERROR: Memory
|
||||||
exhausted in AllocSetAlloc()"</I>?<BR>
|
exhausted in AllocSetAlloc()"</I>?<BR>
|
||||||
<A href="#4.14">4.14</A>) How do I tell what PostgreSQL version I
|
<A href="#4.14">4.14</A>) How do I tell what PostgreSQL version I
|
||||||
am running?<BR>
|
am running?<BR>
|
||||||
<A href="#4.15">4.15</A>) Why does my large-object operations get
|
<A href="#4.15">4.15</A>) How do I create a column that will
|
||||||
<I>"invalid large obj descriptor"</I>?<BR>
|
|
||||||
<A href="#4.16">4.16</A>) How do I create a column that will
|
|
||||||
default to the current time?<BR>
|
default to the current time?<BR>
|
||||||
<A href="#4.17">4.17</A>) How do I perform an outer join?<BR>
|
<A href="#4.16">4.16</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.17">4.17</A>) How do I perform queries using multiple
|
||||||
databases?<BR>
|
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>
|
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
|
does not exist" errors when accessing temporary tables in PL/PgSQL
|
||||||
functions?<BR>
|
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>
|
<HR>
|
||||||
|
|
||||||
<H2 align="center">General Questions</H2>
|
<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
|
<P>PostgreSQL is pronounced <I>Post-Gres-Q-L</I>, also called just
|
||||||
<I>Postgres</I>.</P>
|
<I>Postgres</I>.</P>
|
||||||
@@ -152,8 +141,8 @@
|
|||||||
http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html</A>
|
http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html</A>
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
<H4><A name="1.2">1.2</A>) What is the copyright of
|
<H3><A name="1.2">1.2</A>) What is the copyright of
|
||||||
PostgreSQL?</H4>
|
PostgreSQL?</H3>
|
||||||
|
|
||||||
<P>PostgreSQL is distributed under the classic BSD license. It has
|
<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
|
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,
|
UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE,
|
||||||
SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.</P>
|
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
|
<P>In general, any modern Unix-compatible platform should be able to
|
||||||
run PostgreSQL. The platforms that had received explicit testing at
|
run PostgreSQL. The platforms that had received explicit testing at
|
||||||
the time of release are listed in the installation
|
the time of release are listed in the installation
|
||||||
instructions.</P>
|
instructions.</P>
|
||||||
|
|
||||||
<P>Starting with version 8.0, PostgreSQL now runs natively on
|
<P>PostgreSQL also runs natively on Microsoft Windows NT-based operating
|
||||||
Microsoft Windows NT-based operating systems like Win2000, WinXP,
|
systems like Win2000, WinXP, and Win2003. A prepackaged installer is
|
||||||
and Win2003. A prepackaged installer is available at <a href=
|
available at <a href= "http://pgfoundry.org/projects/pginstaller">
|
||||||
"http://pgfoundry.org/projects/pginstaller">
|
|
||||||
http://pgfoundry.org/projects/pginstaller</a>. MSDOS-based versions
|
http://pgfoundry.org/projects/pginstaller</a>. MSDOS-based versions
|
||||||
of Windows (Win95, Win98, WinMe) can run PostgreSQL using Cygwin.</P>
|
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">
|
||||||
http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a>.</p>
|
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=
|
<P>Via web browser, use <a href="http://www.postgresql.org/ftp/">
|
||||||
"ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</A>.
|
http://www.postgresql.org/ftp/</a>, and via ftp, use
|
||||||
For mirror sites, see our main web site.</P>
|
<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
|
<P>The PostgreSQL community provides assistance to many of its users
|
||||||
via email. The main web site to subscribe to the email lists is
|
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
|
<P>The major IRC channel is <I>#postgresql</I> on Freenode
|
||||||
(<I>irc.freenode.net</I>). To connect you can use the Unix
|
(<I>irc.freenode.net</I>). To connect you can use the Unix
|
||||||
program <CODE>irc -c '#postgresql' "$USER" irc.freenode.net</CODE>
|
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,
|
on the same network, (<I>#postgresql-es</I>), and a French one,
|
||||||
(<I>#postgresqlfr</I>). There is also a PostgreSQL channel on EFNet.</P>
|
(<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">
|
||||||
http://techdocs.postgresql.org/companies.php</A>.</P>
|
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=
|
<P>Visit the PostgreSQL bug form at <A href=
|
||||||
"http://www.postgresql.org/support/submitbug">
|
"http://www.postgresql.org/support/submitbug">
|
||||||
@@ -240,13 +229,14 @@
|
|||||||
"ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</A> to
|
"ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</A> to
|
||||||
see if there is a more recent PostgreSQL version.</P>
|
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
|
<P>PostgreSQL includes extensive documentation, including a large
|
||||||
manual, manual pages, and some test examples. See the <I>/doc</I>
|
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>
|
"http://www.postgresql.org/docs/books/awbook.html">http://www.postgresql.org/docs/books/awbook.html</A>
|
||||||
and <A href=
|
and <A href=
|
||||||
"http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>.
|
"http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>.
|
||||||
There is a list of PostgreSQL books available for purchase at <A
|
There are a number of PostgreSQL books available for purchase. One
|
||||||
href=
|
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>.
|
"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
|
There is also a collection of PostgreSQL technical articles at <A
|
||||||
href=
|
href=
|
||||||
@@ -271,22 +262,25 @@
|
|||||||
|
|
||||||
<P>Our web site contains even more documentation.</P>
|
<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
|
<H3><A name="1.9">1.9</A>) How do I find out about known bugs or
|
||||||
missing features?</H4>
|
missing features?</H3>
|
||||||
|
|
||||||
<P>PostgreSQL supports an extended subset of <SMALL>SQL</SMALL>-92.
|
<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>
|
list for known bugs, missing features, and future plans.</P>
|
||||||
|
|
||||||
<H4><A name="1.10">1.10</A>) How can I learn
|
<H3><A name="1.10">1.10</A>) How can I learn
|
||||||
<SMALL>SQL</SMALL>?</H4>
|
<SMALL>SQL</SMALL>?</H3>
|
||||||
|
|
||||||
<P>The PostgreSQL book at <A href=
|
<P>First, consider the PostgreSQL-specific books mentioned above.
|
||||||
"http://www.postgresql.org/docs/books/awbook.html">http://www.postgresql.org/docs/books/awbook.html</A>
|
Another one is "Teach Yourself SQL in 21 Days, Second Edition"
|
||||||
teaches <SMALL>SQL</SMALL>. There is another PostgreSQL book at <A
|
at <A href=
|
||||||
href=
|
"http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A>.
|
||||||
"http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook.</A>
|
Many of our users like <I>The Practical SQL Handbook</I>,
|
||||||
There is a nice tutorial at <A href=
|
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>
|
"http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A>
|
||||||
at <A href=
|
at <A href=
|
||||||
"http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">
|
"http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">
|
||||||
@@ -294,31 +288,14 @@
|
|||||||
and at <A href=
|
and at <A href=
|
||||||
"http://sqlcourse.com/">http://sqlcourse.com.</A></P>
|
"http://sqlcourse.com/">http://sqlcourse.com.</A></P>
|
||||||
|
|
||||||
<P>Another one is "Teach Yourself SQL in 21 Days, Second Edition"
|
<H3><A name="1.11">1.11</A>) How do I join the development
|
||||||
at <A href=
|
team?</H3>
|
||||||
"http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A></P>
|
|
||||||
|
|
||||||
<P>Many of our users like <I>The Practical SQL Handbook</I>,
|
<P>See the <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
|
||||||
Bowman, Judith S., et al., Addison-Wesley. Others like <I>The
|
Developer's FAQ</A>.
|
||||||
Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>
|
|
||||||
|
|
||||||
<H4><A name="1.11">1.11</A>) How do I join the development
|
<H3><A name="1.12">1.12</A>) How does PostgreSQL compare to other
|
||||||
team?</H4>
|
<SMALL>DBMS</SMALL>s?</H3>
|
||||||
|
|
||||||
<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>
|
|
||||||
|
|
||||||
<P>There are several ways of measuring software: features,
|
<P>There are several ways of measuring software: features,
|
||||||
performance, reliability, support, and price.</P>
|
performance, reliability, support, and price.</P>
|
||||||
@@ -339,13 +316,7 @@
|
|||||||
|
|
||||||
<DD>PostgreSQL's performance is comparable to other commercial and
|
<DD>PostgreSQL's performance is comparable to other commercial and
|
||||||
open source databases. It is faster for some things, slower for
|
open source databases. It is faster for some things, slower for
|
||||||
others. In comparison to MySQL or leaner database systems, we are
|
others. Our performance is usually +/-10% compared to other databases.
|
||||||
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>
|
|
||||||
<BR>
|
<BR>
|
||||||
</DD>
|
</DD>
|
||||||
|
|
||||||
@@ -383,13 +354,24 @@
|
|||||||
</DD>
|
</DD>
|
||||||
</DL>
|
</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>
|
<HR>
|
||||||
|
|
||||||
<H2 align="center">User Client Questions</H2>
|
<H2 align="center">User Client Questions</H2>
|
||||||
|
|
||||||
<H4><A name="2.1">2.1</A>) What interfaces are available for
|
<H3><A name="2.1">2.1</A>) What interfaces are available for
|
||||||
PostgreSQL?</H4>
|
PostgreSQL?</H3>
|
||||||
|
|
||||||
<P>The PostgreSQL install includes only the <SMALL>C</SMALL> and embedded
|
<P>The PostgreSQL install includes only the <SMALL>C</SMALL> and embedded
|
||||||
<SMALL>C</SMALL> interfaces. All other interfaces are independent projects
|
<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.
|
in the <I>Drivers/Interfaces</I> section and via Internet search.
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
<H4><A name="2.2">2.2</A>) What tools are available for using
|
<H3><A name="2.2">2.2</A>) What tools are available for using
|
||||||
PostgreSQL with Web pages?</H4>
|
PostgreSQL with Web pages?</H3>
|
||||||
|
|
||||||
<P>A nice introduction to Database-backed Web pages can be seen at:
|
<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>
|
<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
|
<P>For complex cases, many use the Perl and DBD::Pg with CGI.pm or
|
||||||
mod_perl.</P>
|
mod_perl.</P>
|
||||||
|
|
||||||
<H4><A name="2.3">2.3</A>) Does PostgreSQL have a graphical user
|
<H3><A name="2.3">2.3</A>) Does PostgreSQL have a graphical user
|
||||||
interface?</H4>
|
interface?</H3>
|
||||||
|
|
||||||
<P>Yes, there are several graphical interfaces to PostgreSQL
|
<P>Yes, see <a href="http://techdocs.postgresql.org/guides/GUITools">
|
||||||
available. These include pgAdmin III (<a
|
http://techdocs.postgresql.org/guides/GUITools</a> for 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
|
|
||||||
detailed list.</P>
|
detailed list.</P>
|
||||||
|
|
||||||
<HR>
|
<HR>
|
||||||
@@ -442,14 +410,14 @@
|
|||||||
|
|
||||||
<H2 align="center">Administrative Questions</H2>
|
<H2 align="center">Administrative Questions</H2>
|
||||||
|
|
||||||
<H4><A name="3.1">3.1</A>) How do I install PostgreSQL somewhere
|
<H3><A name="3.1">3.1</A>) How do I install PostgreSQL somewhere
|
||||||
other than <I>/usr/local/pgsql</I>?</H4>
|
other than <I>/usr/local/pgsql</I>?</H3>
|
||||||
|
|
||||||
<P>Specify the <I>--prefix</I> option when running
|
<P>Specify the <I>--prefix</I> option when running
|
||||||
<I>configure</I>.</P>
|
<I>configure</I>.</P>
|
||||||
|
|
||||||
<H4><A name="3.2">3.2</A>) How do I control connections from other
|
<H3><A name="3.2">3.2</A>) How do I control connections from other
|
||||||
hosts?</H4>
|
hosts?</H3>
|
||||||
|
|
||||||
<P>By default, PostgreSQL only allows connections from the local
|
<P>By default, PostgreSQL only allows connections from the local
|
||||||
machine using Unix domain sockets or TCP/IP connections. Other
|
machine using Unix domain sockets or TCP/IP connections. Other
|
||||||
@@ -458,8 +426,8 @@
|
|||||||
host-based authentication by modifying the
|
host-based authentication by modifying the
|
||||||
<I>$PGDATA/pg_hba.conf</I> file, and restart the server.</P>
|
<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
|
<H3><A name="3.3">3.3</A>) How do I tune the database engine for
|
||||||
better performance?</H4>
|
better performance?</H3>
|
||||||
|
|
||||||
<P>There are three major areas for potential performance
|
<P>There are three major areas for potential performance
|
||||||
improvement:</P>
|
improvement:</P>
|
||||||
@@ -515,57 +483,15 @@
|
|||||||
</DD>
|
</DD>
|
||||||
</DL>
|
</DL>
|
||||||
|
|
||||||
<H4><A name="3.4">3.4</A>) What debugging features are
|
<H3><A name="3.4">3.4</A>) What debugging features are
|
||||||
available?</H4>
|
available?</H3>
|
||||||
|
|
||||||
<P>There are many <CODE>log_*</CODE> server configuration variables
|
<P>There are many <CODE>log_*</CODE> server configuration variables
|
||||||
that enable printing of query and process statistics which can be
|
that enable printing of query and process statistics which can be
|
||||||
very useful for debugging and performance measurements.</P>
|
very useful for debugging and performance measurements.</P>
|
||||||
|
|
||||||
<P><B>The following detailed debug instructions are to be used to
|
<H3><A name="3.5">3.5</A>) Why do I get <I>"Sorry, too many
|
||||||
provide more detailed information for server developers debugging a
|
clients"</I> when trying to connect?</H3>
|
||||||
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>
|
|
||||||
|
|
||||||
<P>You have reached the default limit is 100 database sessions. You
|
<P>You have reached the default limit is 100 database sessions. You
|
||||||
need to increase the <I>postmaster</I>'s limit on how many
|
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
|
<I>max_connections</I> value in <I>postgresql.conf</I> and
|
||||||
restarting the <I>postmaster</I>.</P>
|
restarting the <I>postmaster</I>.</P>
|
||||||
|
|
||||||
<H4><A name="3.6">3.6</A>) Why do I need to do a dump and restore
|
<H3><A name="3.6">3.6</A>) Why do I need to do a dump and restore
|
||||||
to upgrade between major PostgreSQL releases?</H4>
|
to upgrade between major PostgreSQL releases?</H3>
|
||||||
|
|
||||||
<P>The PostgreSQL team makes only small changes between minor releases,
|
<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
|
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,
|
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
|
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
|
data in a generic format that can then be loaded in using the new internal
|
||||||
format.</P>
|
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
|
<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
|
all PC hardware is of equal quality. It is not. ECC RAM, SCSI, and
|
||||||
@@ -598,8 +524,8 @@
|
|||||||
|
|
||||||
<H2 align="center">Operational Questions</H2>
|
<H2 align="center">Operational Questions</H2>
|
||||||
|
|
||||||
<H4><A name="4.1">4.1</A>) How do I <SMALL>SELECT</SMALL> only the
|
<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?</H4>
|
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
|
<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
|
needed at the time of the <SMALL>SELECT</SMALL> use
|
||||||
@@ -617,9 +543,9 @@
|
|||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
</PRE>
|
</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
|
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
|
<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
|
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
|
illustrates many of the <SMALL>SELECT</SMALL>s needed to get
|
||||||
information from the database system tables.</P>
|
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
|
<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>
|
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
|
<P>You might then want to do <I>VACUUM FULL tab</I> to reclaim the
|
||||||
disk space used by the expired rows.</P>
|
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
|
<H3><A name="4.4">4.4</A>) What is the maximum size for a row, a
|
||||||
table, and a database?</H4>
|
table, and a database?</H3>
|
||||||
|
|
||||||
<P>These are the limits:</P>
|
<P>These are the limits:</P>
|
||||||
<BLOCKQUOTE>
|
<BLOCKQUOTE>
|
||||||
<TABLE >
|
<TABLE>
|
||||||
<TR><TD>Maximum size for a database?</TD><TD>unlimited (32 TB databases
|
<TR><TD>Maximum size for a database?</TD><TD>unlimited (32 TB databases
|
||||||
exist)</TD></TR>
|
exist)</TD></TR>
|
||||||
<TR><TD>Maximum size for a table?</TD><TD>32 TB</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
|
<P>The maximum table size and maximum number of columns can be
|
||||||
quadrupled by increasing the default block size to 32k.</P>
|
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
|
<H3><A name="4.5">4.5</A>) How much database disk space is required
|
||||||
to store data from a typical text file?</H4>
|
to store data from a typical text file?</H3>
|
||||||
|
|
||||||
<P>A PostgreSQL database may require up to five times the disk
|
<P>A PostgreSQL database may require up to five times the disk
|
||||||
space to store data from a text file.</P>
|
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
|
<P><SMALL>NULL</SMALL>s are stored as bitmaps, so they
|
||||||
use very little space.</P>
|
use very little space.</P>
|
||||||
|
|
||||||
<H4><A name="4.6">4.6</A>) Why are my queries slow? Why don't they
|
<H3><A name="4.6">4.6</A>) Why are my queries slow? Why don't they
|
||||||
use my indexes?</H4>
|
use my indexes?</H3>
|
||||||
|
|
||||||
<P>Indexes are not automatically used by every query. Indexes are only
|
<P>Indexes are not used by every query. Indexes are used only if the
|
||||||
used if the table is larger than a minimum size, and the query
|
table is larger than a minimum size, and the query selects only a
|
||||||
selects only a small percentage of the rows in the table. This is
|
small percentage of the rows in the table. This is because the random
|
||||||
because the random disk access caused by an index scan can be
|
disk access caused by an index scan can be slower than a straight read
|
||||||
slower than a straight read through the table, or sequential scan. </P>
|
through the table, or sequential scan. </P>
|
||||||
|
|
||||||
<P>To determine if an index should be used, PostgreSQL must have
|
<P>To determine if an index should be used, PostgreSQL must have
|
||||||
statistics about the table. These statistics are collected using
|
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
|
<P>If you believe the optimizer is incorrect in choosing a
|
||||||
sequential scan, use <CODE>SET enable_seqscan TO 'off'</CODE> and
|
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
|
<P>When using wild-card operators such as <SMALL>LIKE</SMALL> or
|
||||||
<I>~</I>, indexes can only be used in certain circumstances:</P>
|
<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
|
types exactly match the index's column types. This was particularly
|
||||||
true of int2, int8, and numeric column indexes.</P>
|
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
|
<H3><A name="4.7">4.7</A>) How do I see how the query optimizer is
|
||||||
evaluating my query?</H4>
|
evaluating my query?</H3>
|
||||||
|
|
||||||
<P>See the <SMALL>EXPLAIN</SMALL> manual page.</P>
|
<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
|
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
|
<P>The <I>~</I> operator does regular expression matching, and
|
||||||
<I>~*</I> does case-insensitive regular expression matching. The
|
<I>~*</I> does case-insensitive regular expression matching. The
|
||||||
@@ -809,19 +735,18 @@ table?</TD><TD>unlimited</TD></TR>
|
|||||||
FROM tab
|
FROM tab
|
||||||
WHERE lower(col) = 'abc';
|
WHERE lower(col) = 'abc';
|
||||||
</PRE>
|
</PRE>
|
||||||
|
|
||||||
This will not use an standard index. However, if you create a
|
This will not use an standard index. However, if you create a
|
||||||
expresssion index, it will be used:
|
expresssion index, it will be used:
|
||||||
<PRE>
|
<PRE>
|
||||||
CREATE INDEX tabindex ON tab (lower(col));
|
CREATE INDEX tabindex ON tab (lower(col));
|
||||||
</PRE>
|
</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>
|
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
|
<P>You test the column with <SMALL>IS NULL</SMALL> and <SMALL>IS
|
||||||
NOT NULL</SMALL>.</P>
|
NOT NULL</SMALL>, like this:</P>
|
||||||
|
|
||||||
<PRE>
|
<PRE>
|
||||||
SELECT *
|
SELECT *
|
||||||
@@ -830,7 +755,7 @@ table?</TD><TD>unlimited</TD></TR>
|
|||||||
</PRE>
|
</PRE>
|
||||||
|
|
||||||
<P>To sort by the <SMALL>NULL</SMALL> status, use the <SMALL>IS NULL</SMALL>
|
<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>,
|
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>
|
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)
|
ORDER BY (col IS NOT NULL)
|
||||||
</PRE>
|
</PRE>
|
||||||
|
|
||||||
<H4><A name="4.10">4.10</A>) What is the difference between the
|
<H3><A name="4.10">4.10</A>) What is the difference between the
|
||||||
various character types?</H4>
|
various character types?</H3>
|
||||||
<BLOCKQUOTE>
|
<BLOCKQUOTE>
|
||||||
<TABLE >
|
<TABLE>
|
||||||
<TR><TH>Type</TH><TH>Internal Name</TH><TH>Notes</TH></TR>
|
<TR><TH>Type</TH><TH>Internal Name</TH><TH>Notes</TH></TR>
|
||||||
<TR><TD>VARCHAR(n)</TD><TD>varchar</TD><TD>size specifies maximum
|
<TR><TD>VARCHAR(n)</TD><TD>varchar</TD><TD>size specifies maximum
|
||||||
length, no padding</TD></TR>
|
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
|
<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
|
four bytes on disk are the length, followed by the data). Thus the
|
||||||
actual space used is slightly greater than the declared size.
|
actual space used is slightly greater than the declared size.
|
||||||
However, these data types are also subject to compression or being
|
However, long values are also subject to compression, so the space
|
||||||
stored out-of-line by <SMALL>TOAST</SMALL>, so the space on disk
|
on disk might also be less than expected.</P>
|
||||||
might also be less than expected.</P>
|
|
||||||
|
|
||||||
<SMALL>VARCHAR(n)</SMALL> is best when storing variable-length
|
<SMALL>VARCHAR(n)</SMALL> is best when storing variable-length
|
||||||
strings and it limits how long a string can be. <SMALL>TEXT</SMALL>
|
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
|
particularly values that include <SMALL>NULL</SMALL> bytes. All the
|
||||||
types described here have similar performance characteristics.</P>
|
types described here have similar performance characteristics.</P>
|
||||||
|
|
||||||
<H4><A name="4.11.1">4.11.1</A>) How do I create a
|
<H3><A name="4.11.1">4.11.1</A>) How do I create a
|
||||||
serial/auto-incrementing field?</H4>
|
serial/auto-incrementing field?</H3>
|
||||||
|
|
||||||
<P>PostgreSQL supports a <SMALL>SERIAL</SMALL> data type. It
|
<P>PostgreSQL supports a <SMALL>SERIAL</SMALL> data type. It
|
||||||
auto-creates a sequence. For example,
|
auto-creates a sequence. For example, this:</P>
|
||||||
this:</P>
|
|
||||||
<PRE>
|
<PRE>
|
||||||
CREATE TABLE person (
|
CREATE TABLE person (
|
||||||
id SERIAL,
|
id SERIAL,
|
||||||
@@ -891,6 +814,7 @@ length</TD></TR>
|
|||||||
</PRE>
|
</PRE>
|
||||||
|
|
||||||
is automatically translated into this:
|
is automatically translated into this:
|
||||||
|
|
||||||
<PRE>
|
<PRE>
|
||||||
CREATE SEQUENCE person_id_seq;
|
CREATE SEQUENCE person_id_seq;
|
||||||
CREATE TABLE person (
|
CREATE TABLE person (
|
||||||
@@ -902,8 +826,8 @@ length</TD></TR>
|
|||||||
See the <I>create_sequence</I> manual page for more information
|
See the <I>create_sequence</I> manual page for more information
|
||||||
about sequences.
|
about sequences.
|
||||||
|
|
||||||
<H4><A name="4.11.2">4.11.2</A>) How do I get the value of a
|
<H3><A name="4.11.2">4.11.2</A>) How do I get the value of a
|
||||||
<SMALL>SERIAL</SMALL> insert?</H4>
|
<SMALL>SERIAL</SMALL> insert?</H3>
|
||||||
|
|
||||||
<P>One approach is to retrieve the next <SMALL>SERIAL</SMALL> value
|
<P>One approach is to retrieve the next <SMALL>SERIAL</SMALL> value
|
||||||
from the sequence object with the <I>nextval()</I> function
|
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')");
|
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
|
||||||
</PRE>
|
</PRE>
|
||||||
|
|
||||||
You would then also have the new value stored in
|
You would then also have the new value stored in <CODE>new_id</CODE>
|
||||||
<CODE>new_id</CODE> for use in other queries (e.g., as a foreign
|
for use in other queries (e.g., as a foreign key to the <CODE>person
|
||||||
key to the <CODE>person</CODE> table). Note that the name of the
|
</CODE> table). Note that the name of the automatically created
|
||||||
automatically created <SMALL>SEQUENCE</SMALL> object will be named
|
<SMALL>SEQUENCE</SMALL> object will be named <<I>table</I>>_<<I>
|
||||||
<<I>table</I>>_<<I>serialcolumn</I>>_<I>seq</I>, where
|
serialcolumn</I>>_<I>seq</I>, where <I>table</I> and <I>serialcolumn</I>
|
||||||
<I>table</I> and <I>serialcolumn</I> are the names of your table
|
are the names of your table and your <SMALL>SERIAL</SMALL> column,
|
||||||
and your <SMALL>SERIAL</SMALL> column, respectively.
|
respectively.
|
||||||
|
|
||||||
<P>Alternatively, you could retrieve the assigned
|
<P>Alternatively, you could retrieve the assigned <SMALL>SERIAL</SMALL>
|
||||||
<SMALL>SERIAL</SMALL> value with the <I>currval()</I> function
|
value with the <I>currval()</I> function <I>after</I> it was inserted by
|
||||||
<I>after</I> it was inserted by default, e.g.,</P>
|
default, e.g.,</P>
|
||||||
<PRE>
|
<PRE>
|
||||||
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
|
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
|
||||||
new_id = execute("SELECT currval('person_id_seq')");
|
new_id = execute("SELECT currval('person_id_seq')");
|
||||||
</PRE>
|
</PRE>
|
||||||
|
|
||||||
<H4><A name="4.11.3">4.11.3</A>) Doesn't <I>currval()</I>
|
<H3><A name="4.11.3">4.11.3</A>) Doesn't <I>currval()</I>
|
||||||
lead to a race condition with other users?</H4>
|
lead to a race condition with other users?</H3>
|
||||||
|
|
||||||
<P>No. <I>currval()</I> returns the current value assigned by your
|
<P>No. <I>currval()</I> returns the current value assigned by your
|
||||||
session, not by all sessions.</P>
|
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
|
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
|
<P>To improve concurrency, sequence values are given out to running
|
||||||
transactions as needed and are not locked until the transaction
|
transactions as needed and are not locked until the transaction
|
||||||
completes. This causes gaps in numbering from aborted
|
completes. This causes gaps in numbering from aborted
|
||||||
transactions.</P>
|
transactions.</P>
|
||||||
|
|
||||||
<H4><A name="4.12">4.12</A>) What is an <SMALL>OID</SMALL>? What is
|
<H3><A name="4.12">4.12</A>) What is an <SMALL>OID</SMALL>? What is
|
||||||
a <SMALL>TID</SMALL>?</H4>
|
a <SMALL>CTID</SMALL>?</H3>
|
||||||
|
|
||||||
<P>Every row that is created in PostgreSQL gets a unique
|
<P>Every row that is created in PostgreSQL gets a unique
|
||||||
<SMALL>OID</SMALL> unless created <SMALL>WITHOUT OIDS</SMALL>.
|
<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
|
<SMALL>SERIAL8</SMALL> is available for storing eight-byte sequence
|
||||||
values.</P>
|
values.</P>
|
||||||
|
|
||||||
<P>T<SMALL>ID</SMALL>s are used to identify specific physical rows
|
<P>C<SMALL>TID</SMALL>s are used to identify specific physical rows
|
||||||
with block and offset values. T<SMALL>ID</SMALL>s change after 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
|
are modified or reloaded. They are used by index entries to point
|
||||||
to physical rows.</P>
|
to physical rows.</P>
|
||||||
|
|
||||||
<H4><A name="4.13">4.13</A>) Why do I get the error <I>"ERROR:
|
<H3><A name="4.13">4.13</A>) Why do I get the error <I>"ERROR:
|
||||||
Memory exhausted in AllocSetAlloc()"</I>?</H4>
|
Memory exhausted in AllocSetAlloc()"</I>?</H3>
|
||||||
|
|
||||||
<P>You probably have run out of virtual memory on your system,
|
<P>You probably have run out of virtual memory on your system,
|
||||||
or your kernel has a low limit for certain resources. Try this
|
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
|
backend is returning too much data, try it before starting the
|
||||||
client.
|
client.
|
||||||
|
|
||||||
<H4><A name="4.14">4.14</A>) How do I tell what PostgreSQL version
|
<H3><A name="4.14">4.14</A>) How do I tell what PostgreSQL version
|
||||||
I am running?</H4>
|
I am running?</H3>
|
||||||
|
|
||||||
<P>From <I>psql</I>, type <CODE>SELECT version();</CODE></P>
|
<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
|
<H3><A name="4.15">4.15</A>) How do I create a column that will
|
||||||
get <I>"invalid large obj descriptor"</I>?</H4>
|
default to the current time?</H3>
|
||||||
|
|
||||||
<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>
|
|
||||||
|
|
||||||
<P>Use <I>CURRENT_TIMESTAMP</I>:</P>
|
<P>Use <I>CURRENT_TIMESTAMP</I>:</P>
|
||||||
<PRE>
|
<PRE>
|
||||||
CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
|
CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
|
||||||
</PRE>
|
</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.
|
<P>PostgreSQL supports outer joins using the SQL standard syntax.
|
||||||
Here are two examples:</P>
|
Here are two examples:</P>
|
||||||
@@ -1040,8 +948,8 @@ length</TD></TR>
|
|||||||
<SMALL>RIGHT</SMALL>, and <SMALL>FULL</SMALL> joins. Ordinary joins
|
<SMALL>RIGHT</SMALL>, and <SMALL>FULL</SMALL> joins. Ordinary joins
|
||||||
are called <SMALL>INNER</SMALL> joins.</P>
|
are called <SMALL>INNER</SMALL> joins.</P>
|
||||||
|
|
||||||
<H4><A name="4.18">4.18</A>) How do I perform queries using
|
<H3><A name="4.17">4.17</A>) How do I perform queries using
|
||||||
multiple databases?</H4>
|
multiple databases?</H3>
|
||||||
|
|
||||||
<P>There is no way to query a database other than the current one.
|
<P>There is no way to query a database other than the current one.
|
||||||
Because PostgreSQL loads database-specific system catalogs, it is
|
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
|
connections to different databases and merge the results on the
|
||||||
client side.</P>
|
client side.</P>
|
||||||
|
|
||||||
<H4><A name="4.19">4.19</A>) How do I return multiple rows or
|
<H3><A name="4.18">4.18</A>) How do I return multiple rows or
|
||||||
columns from a function?</H4>
|
columns from a function?</H3>
|
||||||
|
|
||||||
<P>It is easy using set-returning functions,
|
<P>It is easy using set-returning functions,
|
||||||
<a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">
|
<a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">
|
||||||
http://techdocs.postgresql.org/guides/SetReturningFunctions</a></P>.
|
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
|
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
|
<P>PL/PgSQL caches function scripts, and an unfortunate side effect
|
||||||
is that if a PL/PgSQL function accesses a temporary table, and that
|
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
|
<SMALL>EXECUTE</SMALL> for temporary table access in PL/PgSQL. This
|
||||||
will cause the query to be reparsed every time.</P>
|
will cause the query to be reparsed every time.</P>
|
||||||
|
|
||||||
<H4><A name="4.21">4.21</A>) What encryption options are available?
|
<H3><A name="4.20">4.20</A>) What replication solutions are available?
|
||||||
</H4>
|
</H3>
|
||||||
<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>
|
|
||||||
|
|
||||||
<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
|
<P>Multi-master replication allows read/write queries to be sent to
|
||||||
run it in <I>psql</I>, why does it dump core?</H4>
|
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
|
<P>There are also commercial and hardware-based replication solutions
|
||||||
user-defined function in a stand-alone test program first.</P>
|
available supporting a variety of replication models.</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>
|
|
||||||
</BODY>
|
</BODY>
|
||||||
</HTML>
|
</HTML>
|
||||||
|
@@ -13,7 +13,7 @@
|
|||||||
<H1>Developer's Frequently Asked Questions (FAQ) for
|
<H1>Developer's Frequently Asked Questions (FAQ) for
|
||||||
PostgreSQL</H1>
|
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=
|
<P>Current maintainer: Bruce Momjian (<A href=
|
||||||
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
|
"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.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.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.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
|
<A href="#1.13">1.13</A>) Why don't you use threads, raw
|
||||||
devices/async-I/O, <insert your favorite wizz-bang feature
|
devices, async-I/O, <insert your favorite wizz-bang feature
|
||||||
here>?<BR>
|
here>?<BR>
|
||||||
<A href="#1.14">1.14</A>) How are RPM's packaged?<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>
|
<A href="#1.15">1.15</A>) How are CVS branches handled?<BR>
|
||||||
@@ -71,6 +71,8 @@
|
|||||||
<I>pfree</I>() to allocate memory?<BR>
|
<I>pfree</I>() to allocate memory?<BR>
|
||||||
<A href="#2.6">2.6</A>) What is ereport()?<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.7">2.7</A>) What is CommandCounterIncrement()?<BR>
|
||||||
|
<A href="#2.8">2.8</A>) What debugging features are available?<BR>
|
||||||
|
|
||||||
<BR>
|
<BR>
|
||||||
|
|
||||||
<HR>
|
<HR>
|
||||||
@@ -230,6 +232,12 @@
|
|||||||
<P>There have been a number of discussions about other testing
|
<P>There have been a number of discussions about other testing
|
||||||
frameworks and some developers are exploring these ideas.</P>
|
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
|
<H3><A name="1.9">1.9</A>) What tools are available for
|
||||||
developers?</H3>
|
developers?</H3>
|
||||||
|
|
||||||
@@ -422,8 +430,8 @@
|
|||||||
handling. There is a <I>backend/port</I> directory if you need
|
handling. There is a <I>backend/port</I> directory if you need
|
||||||
special files for your OS.</P>
|
special files for your OS.</P>
|
||||||
|
|
||||||
<H3><A name="1.13">1.13</A>) Why don't you use threads/raw
|
<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
|
devices, async-I/O, <insert your favorite wizz-bang feature
|
||||||
here>?</H3>
|
here>?</H3>
|
||||||
|
|
||||||
<P>There is always a temptation to use the newest operating system
|
<P>There is always a temptation to use the newest operating system
|
||||||
@@ -941,6 +949,45 @@
|
|||||||
modified by previous pieces. <I>CommandCounterIncrement()</I>
|
modified by previous pieces. <I>CommandCounterIncrement()</I>
|
||||||
increments the Command Counter, creating a new part of the
|
increments the Command Counter, creating a new part of the
|
||||||
transaction.</P>
|
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>
|
</BODY>
|
||||||
</HTML>
|
</HTML>
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user