Skip to content
Snippets Groups Projects
Commit fe521fbe authored by Bruce Momjian's avatar Bruce Momjian
Browse files

Update FAQ's for release.

parent 2ed7b03c
Branches
Tags
No related merge requests found
Frequently Asked Questions (FAQ) for PostgreSQL Frequently Asked Questions (FAQ) for PostgreSQL
Last updated: Sun Feb 1 16:13:28 EST 1998 Last updated: Sun Feb 1 16:13:28 EST 1998
Current maintainer: Bruce Momjian (maillist@candle.pha.pa.us) Current maintainer: Bruce Momjian (maillist@candle.pha.pa.us)
The most recent version of this document can be viewed at the The most recent version of this document can be viewed at the postgreSQL Web
postgreSQL Web site, http://postgreSQL.org. site, http://postgreSQL.org.
Linux-specific questions are answered in Linux-specific questions are answered in
http://postgreSQL.org/docs/FAQ-linux.shtml. http://postgreSQL.org/docs/faq-linux.shtml.
Irix-specific questions are answered in Irix-specific questions are answered in
http://postgreSQL.org/docs/FAQ-irix.shtml. http://postgreSQL.org/docs/faq-irix.shtml.
_________________________________________________________________
------------------------------------------------------------------------
Questions answered: Questions answered:
...@@ -28,29 +28,24 @@ Questions answered: ...@@ -28,29 +28,24 @@ Questions answered:
1.7) Is there a commercial version of PostgreSQL? 1.7) Is there a commercial version of PostgreSQL?
1.8) What documentation is available for PostgreSQL? 1.8) What documentation is available for PostgreSQL?
1.9) What version of SQL does PostgreSQL use? 1.9) What version of SQL does PostgreSQL use?
1.10) Does PostgreSQL work with databases from earlier versions of 1.10) Does PostgreSQL work with databases from earlier versions of postgres?
postgres?
1.11) Are there ODBC drivers for PostgreSQL? 1.11) Are there ODBC drivers for PostgreSQL?
1.12) What tools are available for hooking postgres to Web pages? 1.12) What tools are available for hooking postgres to Web pages?
1.13) Does PostgreSQL have a graphical user interface? A report 1.13) Does PostgreSQL have a graphical user interface? A report generator? A
generator? A embedded query language interface? embedded query language interface?
1.14) What is a good book to learn SQL? 1.14) What is a good book to learn SQL?
2) Installation/Configuration questions 2) Installation/Configuration questions
2.1) initdb doesn't run 2.1) initdb doesn't run
2.2) when I start up the postmaster, I get "FindBackend: could not 2.2) when I start up the postmaster, I get "FindBackend: could not find a
find a backend to execute..." "postmaster: could not find backend to backend to execute..." "postmaster: could not find backend to execute..."
execute..." 2.3) The system seems to be confused about commas, decimal points, and date
2.3) The system seems to be confused about commas, decimal points, and formats.
date formats. 2.4) How do I install PostgreSQL somewhere other than /usr/local/pgsql?
2.4) How do I install PostgreSQL somewhere other than 2.5) When I run postmaster, I get a Bad System Call core dumped message.
/usr/local/pgsql?
2.5) When I run postmaster, I get a Bad System Call core dumped
message.
2.6) When I try to start the postmaster, I get IpcMemoryCreate errors. 2.6) When I try to start the postmaster, I get IpcMemoryCreate errors.
2.7) I have changed a source file, but a recompile does not see the 2.7) I have changed a source file, but a recompile does not see the change?
change?
2.8) How do I prevent other hosts from accessing my PostgreSQL 2.8) How do I prevent other hosts from accessing my PostgreSQL
2.9) I can't access the database as the 'root' user. 2.9) I can't access the database as the 'root' user.
2.10) All my servers crash under concurrent table access. Why? 2.10) All my servers crash under concurrent table access. Why?
...@@ -65,16 +60,14 @@ Questions answered: ...@@ -65,16 +60,14 @@ Questions answered:
3.3) I can't seem to write into the middle of large objects reliably. 3.3) I can't seem to write into the middle of large objects reliably.
3.4) How can I write client applications to PostgreSQL? 3.4) How can I write client applications to PostgreSQL?
3.5) How do I set up a pg_group? 3.5) How do I set up a pg_group?
3.6) What is the exact difference between binary cursors and normal 3.6) What is the exact difference between binary cursors and normal cursors?
cursors?
3.7) What is a R-tree index and what is it used for? 3.7) What is a R-tree index and what is it used for?
3.8) What is the maximum size for a tuple? 3.8) What is the maximum size for a tuple?
3.9) I defined indices but my queries don't seem to make use of them. 3.9) I defined indices but my queries don't seem to make use of them. Why?
Why?
3.10) How do I do regular expression searches? case-insensitive regexp 3.10) How do I do regular expression searches? case-insensitive regexp
searching? searching?
3.11) I experienced a server crash during a vacuum. How do I remove 3.11) I experienced a server crash during a vacuum. How do I remove the lock
the lock file? file?
3.12) What is the difference between the various character types? 3.12) What is the difference between the various character types?
3.13) In a query, how do I detect if a field is NULL? 3.13) In a query, how do I detect if a field is NULL?
3.14) How do I see how the query optimizer is evaluating my query? 3.14) How do I see how the query optimizer is evaluating my query?
...@@ -90,55 +83,55 @@ Questions answered: ...@@ -90,55 +83,55 @@ Questions answered:
3.23) How do you remove a column from a table? 3.23) How do you remove a column from a table?
3.24) How do SELECT only the first few rows of a query? 3.24) How do SELECT only the first few rows of a query?
3.25) Why can't I create a column named "time"? 3.25) Why can't I create a column named "time"?
3.26) How much database disk space is required to store data from a 3.26) How much database disk space is required to store data from a typical
typical flat file? flat file?
4) Questions about extending PostgreSQL 4) Questions about extending PostgreSQL
4.1) I wrote a user-defined function and when I run it in psql, it 4.1) I wrote a user-defined function and when I run it in psql, it dumps
dumps core. core.
4.2) I get messages of the type NOTICE:PortalHeapMemoryFree: 4.2) I get messages of the type NOTICE:PortalHeapMemoryFree: 0x402251d0
0x402251d0
4.3) I've written some nifty new types and functions for PostgreSQL. 4.3) I've written some nifty new types and functions for PostgreSQL.
4.4) How do I write a C function to return a tuple? 4.4) How do I write a C function to return a tuple?
5) Bugs 5) Bugs
5.1) How do I make a bug report? 5.1) How do I make a bug report?
_________________________________________________________________
------------------------------------------------------------------------
Section 1: General Questions Section 1: General Questions
1.1) What is PostgreSQL? 1.1) What is PostgreSQL?
PostgreSQL is an enhancement of the POSTGRES database management PostgreSQL is an enhancement of the POSTGRES database management system, a
system, a next-generation DBMS research prototype. While PostgreSQL next-generation DBMS research prototype. While PostgreSQL retains the
retains the powerful data model and rich data types of POSTGRES, it powerful data model and rich data types of POSTGRES, it replaces the
replaces the PostQuel query language with an extended subset of SQL. PostQuel query language with an extended subset of SQL. PostgreSQL is free
PostgreSQL is free and the complete source is available. and the complete source is available.
PostgreSQL development is being performed by a team of Internet PostgreSQL development is being performed by a team of Internet developers
developers who all subscribe to the PostgreSQL development mailing who all subscribe to the PostgreSQL development mailing list. The current
list. The current coordinator is Marc G. Fournier coordinator is Marc G. Fournier (scrappy@postgreSQL.org). (See below on how
(scrappy@postgreSQL.org). (See below on how to join). This team is now to join). This team is now responsible for all current and future
responsible for all current and future development of PostgreSQL. development of PostgreSQL.
The authors of PostgreSQL 1.01 were Andrew Yu and Jolly Chen. Many The authors of PostgreSQL 1.01 were Andrew Yu and Jolly Chen. Many others
others have contributed to the porting, testing, debugging and have contributed to the porting, testing, debugging and enhancement of the
enhancement of the code. The original Postgres code, from which code. The original Postgres code, from which PostgreSQL is derived, was the
PostgreSQL is derived, was the effort of many graduate students, effort of many graduate students, undergraduate students, and staff
undergraduate students, and staff programmers working under the programmers working under the direction of Professor Michael Stonebraker at
direction of Professor Michael Stonebraker at the University of the University of California, Berkeley.
California, Berkeley.
The original name of the software at Berkeley was Postgres. When SQL The original name of the software at Berkeley was Postgres. When SQL
functionality was added in 1995, its name was changed to Postgres95. functionality was added in 1995, its name was changed to Postgres95. The
The name was changed at the end of 1996 to PostgreSQL. name was changed at the end of 1996 to PostgreSQL.
1.2) What does PostgreSQL run on? 1.2) What does PostgreSQL run on?
The authors have compiled and tested PostgreSQL on the following The authors have compiled and tested PostgreSQL on the following
platforms(some of these compiles require gcc 2.7.0): platforms(some of these compiles require gcc 2.7.0):
* aix - IBM on AIX 3.2.5 or 4.x * aix - IBM on AIX 3.2.5 or 4.x
* alpha - DEC Alpha AXP on Digital Unix 2.0, 3.2, 4.0 * alpha - DEC Alpha AXP on Digital Unix 2.0, 3.2, 4.0
* BSD44_derived - OSs derived from 4.4-lite BSD (NetBSD, FreeBSD) * BSD44_derived - OSs derived from 4.4-lite BSD (NetBSD, FreeBSD)
...@@ -147,8 +140,8 @@ Section 1: General Questions ...@@ -147,8 +140,8 @@ Section 1: General Questions
* hpux - HP PA-RISC on HP-UX 9.0, 10 * hpux - HP PA-RISC on HP-UX 9.0, 10
* i386_solaris - i386 Solaris * i386_solaris - i386 Solaris
* irix5 - SGI MIPS on IRIX 5.3 * irix5 - SGI MIPS on IRIX 5.3
* linux - Intel x86 on Linux 2.0 and Linux ELF SPARC on Linux ELF * linux - Intel x86 on Linux 2.0 and Linux ELF SPARC on Linux ELF PPC on
PPC on Linux Elf (For non-ELF Linux, see LINUX_ELF below). Linux Elf (For non-ELF Linux, see LINUX_ELF below).
* sco - SCO 3.2v5 * sco - SCO 3.2v5
* sparc_solaris - SUN SPARC on Solaris 2.4, 2.5, 2.5.1 * sparc_solaris - SUN SPARC on Solaris 2.4, 2.5, 2.5.1
* sunos4 - SUN SPARC on SunOS 4.1.3 * sunos4 - SUN SPARC on SunOS 4.1.3
...@@ -156,14 +149,17 @@ Section 1: General Questions ...@@ -156,14 +149,17 @@ Section 1: General Questions
* ultrix4 - DEC MIPS on Ultrix 4.4 * ultrix4 - DEC MIPS on Ultrix 4.4
The following platforms have known problems/bugs: The following platforms have known problems/bugs:
* nextstep - Motorola MC68K or Intel x86 on NeXTSTEP 3.2 * nextstep - Motorola MC68K or Intel x86 on NeXTSTEP 3.2
1.3) Where can I get PostgreSQL? 1.3) Where can I get PostgreSQL?
The primary anonymous ftp site for PostgreSQL is: The primary anonymous ftp site for PostgreSQL is:
* ftp://ftp.postgreSQL.org/pub * ftp://ftp.postgreSQL.org/pub
A mirror site exists at: A mirror site exists at:
* ftp://postgres95.vnet.net/pub/postgres95 * ftp://postgres95.vnet.net/pub/postgres95
* ftp://ftp.luga.or.at/pub/postgres95 * ftp://ftp.luga.or.at/pub/postgres95
* ftp://cal011111.student.utwente.nl/pub/postgres95 * ftp://cal011111.student.utwente.nl/pub/postgres95
...@@ -179,98 +175,93 @@ Section 1: General Questions ...@@ -179,98 +175,93 @@ Section 1: General Questions
Copyright (c) 1994-6 Regents of the University of California Copyright (c) 1994-6 Regents of the University of California
Permission to use, copy, modify, and distribute this software and its Permission to use, copy, modify, and distribute this software and its
documentation for any purpose, without fee, and without a written documentation for any purpose, without fee, and without a written agreement
agreement is hereby granted, provided that the above copyright notice is hereby granted, provided that the above copyright notice and this
and this paragraph and the following two paragraphs appear in all paragraph and the following two paragraphs appear in all copies.
copies.
IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION,
ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SUCH DAMAGE.
THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN
PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO
CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
1.5) Support for PostgreSQL 1.5) Support for PostgreSQL
There is no official support for PostgreSQL from the original There is no official support for PostgreSQL from the original maintainers or
maintainers or from University of California, Berkeley. It is from University of California, Berkeley. It is maintained through volunteer
maintained through volunteer effort only. effort only.
The main mailing list is: questions@postgreSQL.org. It is available
for discussion o f matters pertaining to PostgreSQL, including but not
limited to bug reports and fixes. For info on how to subscribe, send a
mail with the lines in the body (not the subject line)
The main mailing list is: questions@postgreSQL.org. It is available for
discussion o f matters pertaining to PostgreSQL, including but not limited
to bug reports and fixes. For info on how to subscribe, send a mail with the
lines in the body (not the subject line)
subscribe subscribe
end end
to questions-request@postgreSQL.org. to questions-request@postgreSQL.org.
There is also a digest list available. To subscribe to this list, send There is also a digest list available. To subscribe to this list, send email
email to: questions-digest-request@postgreSQL.org with a BODY of: to: questions-digest-request@postgreSQL.org with a BODY of:
subscribe subscribe
end end
Digests are sent out to members of this list whenever the main list Digests are sent out to members of this list whenever the main list has
has received around 30k of messages. received around 30k of messages.
There is a bugs mailing list available. To subscribe to this list, There is a bugs mailing list available. To subscribe to this list, send
send email to bugs-request@postgreSQL.org with a BODY of: email to bugs-request@postgreSQL.org with a BODY of:
There is also a developers discussion mailing list available. To
subscribe to this list, send email to hackers-request@postgreSQL.org
with a BODY of:
There is also a developers discussion mailing list available. To subscribe
to this list, send email to hackers-request@postgreSQL.org with a BODY of:
subscribe subscribe
end end
Additional information about PostgreSQL can be found via the Additional information about PostgreSQL can be found via the PostgreSQL WWW
PostgreSQL WWW home page at: home page at:
http://postgreSQL.org http://postgreSQL.org
1.6) Latest release of PostgreSQL 1.6) Latest release of PostgreSQL
The latest release of PostgreSQL is version 6.2.1, which was released The latest release of PostgreSQL is version 6.2.1, which was released on
on October 17th, 1997. We are testing 6.3 beta. For information about October 17th, 1997. We are testing 6.3 beta. For information about what is
what is new in 6.3, see our TODO list on our WWW page. new in 6.3, see our TODO list on our WWW page.
We plan to have major releases every three months. We plan to have major releases every three months.
1.7) Is there a commercial version of PostgreSQL? 1.7) Is there a commercial version of PostgreSQL?
Illustra Information Technology (a wholly owned subsidiary of Informix Illustra Information Technology (a wholly owned subsidiary of Informix
Software, Inc.) sells an object-relational DBMS called Illustra that Software, Inc.) sells an object-relational DBMS called Illustra that was
was originally based on postgres. Illustra has cosmetic similarities originally based on postgres. Illustra has cosmetic similarities to
to PostgreSQL but has more features, is more robust, performs better, PostgreSQL but has more features, is more robust, performs better, and
and offers real documentation and support. On the flip side, it costs offers real documentation and support. On the flip side, it costs money. For
money. For more information, contact sales@illustra.com more information, contact sales@illustra.com
1.8) What documentation is available for PostgreSQL? 1.8) What documentation is available for PostgreSQL?
A user manual, manual pages, and some small test examples are included A user manual, manual pages, and some small test examples are included in
in the distribution. The sql and built-in manual pages are the distribution. The sql and built-in manual pages are particularly
particularly important. important.
The www page contains pointers to an implementation guide and five The www page contains pointers to an implementation guide and five papers
papers written about postgres design concepts and features. written about postgres design concepts and features.
1.9) What version of SQL does PostgreSQL use? 1.9) What version of SQL does PostgreSQL use?
PostgreSQL supports a subset of SQL-92. It has most of the important PostgreSQL supports a subset of SQL-92. It has most of the important
constructs but lacks some of the functionality. The most visible constructs but lacks some of the functionality. The most visible differences
differences are: are:
* no support for nested subqueries * no support for nested subqueries
* no HAVING clause under a GROUP BY * no HAVING clause under a GROUP BY
...@@ -286,47 +277,50 @@ Section 1: General Questions ...@@ -286,47 +277,50 @@ Section 1: General Questions
Upgrading to 6.2.1 from pre-6.2 requires a dump and restore. Upgrading to 6.2.1 from pre-6.2 requires a dump and restore.
Upgrading to 6.2.1 from 6.2 does not require a dump, but see the Upgrading to 6.2.1 from 6.2 does not require a dump, but see the appropriate
appropriate /migration file in the distribution. /migration file in the distribution.
Those ugrading from versions earlier than 1.09 must upgrade to 1.09 Those ugrading from versions earlier than 1.09 must upgrade to 1.09 first
first without a dump/reload, then dump the data from 1.09, and then without a dump/reload, then dump the data from 1.09, and then load it into
load it into 6.2.1 or 6.3 beta. 6.2.1 or 6.3 beta.
1.11) Are there ODBC drivers for PostgreSQL? 1.11) Are there ODBC drivers for PostgreSQL?
There are two ODBC drivers available, PostODBC and OpenLink ODBC. There are two ODBC drivers available, PostODBC and OpenLink ODBC.
For all people being interested in PostODBC, there are now two mailing For all people being interested in PostODBC, there are now two mailing lists
lists devoted to the discussion of PostODBC. The mailing lists are: devoted to the discussion of PostODBC. The mailing lists are:
* postodbc-users@listserv.direct. net * postodbc-users@listserv.direct. net
* postodbc-developers@listse rv.direct.net * postodbc-developers@listse rv.direct.net
these lists are ordinary majordomo mailing lists. You can subscribe by these lists are ordinary majordomo mailing lists. You can subscribe by
sending a mail to: sending a mail to:
* majordomo@listserv.direct.net * majordomo@listserv.direct.net
OpenLink ODBC is very popular. You can get it from OpenLink ODBC is very popular. You can get it from
http://www.openlinksw.com/postgres.html. It works with our standard http://www.openlinksw.com/postgres.html. It works with our standard ODBC
ODBC client software so you'll have Postgres ODBC available on every client software so you'll have Postgres ODBC available on every client
client platform we support (Win, Mac, Unix, VMS). platform we support (Win, Mac, Unix, VMS).
We will probably be selling this product to people who need We will probably be selling this product to people who need
commercial-quality support, but a freeware version will always be commercial-quality support, but a freeware version will always be available.
available. Questions to postgres95@openlink.co.uk. Questions to postgres95@openlink.co.uk.
1.12) What tools are available for hooking postgres to Web pages? 1.12) What tools are available for hooking postgres to Web pages?
A nice introduction to Database-backed Web pages can be seen at: A nice introduction to Database-backed Web pages can be seen at:
http://www.webtools.com http://www.webtools.com
For web integration, PHP is an excellent interface. The URL for that For web integration, PHP is an excellent interface. The URL for that is
is http://php.iquest.net http://php.iquest.net
PHP is great for simple stuff, but for more complex stuff, some still PHP is great for simple stuff, but for more complex stuff, some still use
use the perl interface and CGI.pm. the perl interface and CGI.pm.
An WWW gatway based on WDB using perl can be downloaded from: An WWW gatway based on WDB using perl can be downloaded from:
* http://www.eol.ists.ca/~dunlop/wdb -p95 * http://www.eol.ists.ca/~dunlop/wdb -p95
1.13) Does PostgreSQL have a graphical user interface? A report generator? A 1.13) Does PostgreSQL have a graphical user interface? A report generator? A
...@@ -334,14 +328,15 @@ Section 1: General Questions ...@@ -334,14 +328,15 @@ Section 1: General Questions
No. No. No. Not in the official distribution at least. Some users have No. No. No. Not in the official distribution at least. Some users have
reported some success at using 'pgbrowse' and 'onyx' as frontends to reported some success at using 'pgbrowse' and 'onyx' as frontends to
PostgreSQL. Several contributions are working on tk based frontend PostgreSQL. Several contributions are working on tk based frontend tools.
tools. Ask on the mailing list. Ask on the mailing list.
1.14) What is a good book to learn SQL? 1.14) What is a good book to learn SQL?
Many of our users like The Practical SQL Handbook, Bowman et al, Many of our users like The Practical SQL Handbook, Bowman et al, Addison
Addison Wesley. Wesley.
_________________________________________________________________
------------------------------------------------------------------------
Section 2: Installation Questions Section 2: Installation Questions
...@@ -350,45 +345,44 @@ Section 2: Installation Questions ...@@ -350,45 +345,44 @@ Section 2: Installation Questions
* check to see that you have the proper paths set * check to see that you have the proper paths set
* check that the 'postgres' user owns all the right files * check that the 'postgres' user owns all the right files
* ensure that there are files in $PGDATA/files, and that they are * ensure that there are files in $PGDATA/files, and that they are
non-empty. If they aren't, then "gmake install" failed for some non-empty. If they aren't, then "gmake install" failed for some reason
reason
2.2) when I start up the postmaster, I get "FindBackend: could not find a 2.2) when I start up the postmaster, I get "FindBackend: could not find a
backend to execute..." "postmaster: could not find backend to execute..." backend to execute..." "postmaster: could not find backend to execute..."
You probably do not have the right path set up. The 'postgres' You probably do not have the right path set up. The 'postgres' executable
executable needs to be in your path. needs to be in your path.
2.3) The system seems to be confused about commas, decimal points, and date 2.3) The system seems to be confused about commas, decimal points, and date
formats. formats.
Check your locale configuration. PostgreSQL uses the locale settings Check your locale configuration. PostgreSQL uses the locale settings of the
of the user that ran the postmaster process. Set those accordingly for user that ran the postmaster process. Set those accordingly for your
your operating environment. operating environment.
2.4) How do I install PostgreSQL somewhere other than /usr/local/pgsql? 2.4) How do I install PostgreSQL somewhere other than /usr/local/pgsql?
You need to edit Makefile.global and change POSTGRESDIR accordingly, You need to edit Makefile.global and change POSTGRESDIR accordingly, or
or create a Makefile.custom and define POSTGRESDIR there. create a Makefile.custom and define POSTGRESDIR there.
2.5) When I run postmaster, I get a Bad System Call core dumped message. 2.5) When I run postmaster, I get a Bad System Call core dumped message.
It could be a variety of problems, but first check to see that you It could be a variety of problems, but first check to see that you have
have system V extensions installed on your kernel. PostgreSQL requires system V extensions installed on your kernel. PostgreSQL requires kernel
kernel support for shared memory. support for shared memory.
2.6) When I try to start the postmaster, I get IpcMemoryCreate errors. 2.6) When I try to start the postmaster, I get IpcMemoryCreate errors.
You either do not have shared memory configured properly in kernel or You either do not have shared memory configured properly in kernel or you
you need to enlarge the shared memory available in the kernel. The need to enlarge the shared memory available in the kernel. The exact amount
exact amount you need depends on your architecture and how many you need depends on your architecture and how many buffers you configure
buffers you configure postmaster to run with. For most systems, with postmaster to run with. For most systems, with default buffer sizes, you
default buffer sizes, you need a minimum of ~760K. need a minimum of ~760K.
2.7) I have changed a source file, but a recompile does not see the change? 2.7) I have changed a source file, but a recompile does not see the change?
The Makefiles do not have the proper dependencies for include files. The Makefiles do not have the proper dependencies for include files. You
You have to do a 'make clean' and then another 'make'. have to do a 'make clean' and then another 'make'.
2.8) How do I prevent other hosts from accessing my PostgreSQL backend? 2.8) How do I prevent other hosts from accessing my PostgreSQL backend?
...@@ -397,83 +391,80 @@ Section 2: Installation Questions ...@@ -397,83 +391,80 @@ Section 2: Installation Questions
2.9) I can't access the database as the 'root' user. 2.9) I can't access the database as the 'root' user.
You should not create database users with user id 0(root). They will You should not create database users with user id 0(root). They will be
be unable to access the database. This is a security precaution unable to access the database. This is a security precaution because of the
because of the ability of any user to dynamically link object modules ability of any user to dynamically link object modules into the database
into the database engine. engine.
2.10) All my servers crash under concurrent table access. Why? 2.10) All my servers crash under concurrent table access. Why?
This problem can be caused by a kernel that is not configured to This problem can be caused by a kernel that is not configured to support
support semaphores. semaphores.
2.11) How do I tune the database engine for better performance? 2.11) How do I tune the database engine for better performance?
There are two things that can be done. You can use Openlink's option There are two things that can be done. You can use Openlink's option to
to disable fsync() by starting the postmaster with a '-o -F' option. disable fsync() by starting the postmaster with a '-o -F' option. This will
This will prevent fsync()'s from flushing to disk after every prevent fsync()'s from flushing to disk after every transaction.
transaction.
You can also use the postmaster -B option to increase the number of You can also use the postmaster -B option to increase the number of shared
shared memory buffers shared among the backend processes. If you make memory buffers shared among the backend processes. If you make this
this parameter too high, the process will not start or crash parameter too high, the process will not start or crash unexpectedly. Each
unexpectedly. Each buffer is 8K and the defualt is 64 buffers. buffer is 8K and the defualt is 64 buffers.
You can also use the postgres -S option to increase the maximum amount You can also use the postgres -S option to increase the maximum amount of
of memory used by each backend process for temporary sorts. Each memory used by each backend process for temporary sorts. Each buffer is 1K
buffer is 1K and the defualt is 512 buffers. and the defualt is 512 buffers.
2.12) What debugging features are available in PostgreSQL? 2.12) What debugging features are available in PostgreSQL?
PostgreSQL has several features that report status information that PostgreSQL has several features that report status information that can be
can be valuable for debugging purposes. valuable for debugging purposes.
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.
Both postmaster and postgres have several debug options available. First, by running configure with the -enable-cassert option, many assert()'s
First, whenever you start the postmaster, make sure you send the monitor the progress of the backend and halt the program when something
standard output and error to a log file, like: unexpected occurs.
Both postmaster and postgres have several debug options available. First,
whenever you start the postmaster, make sure you send the standard output
and error to a log file, like:
cd /usr/local/pgsql cd /usr/local/pgsql
./bin/postmaster >server.log 2>&1 & ./bin/postmaster >server.log 2>&1 &
This will put a server.log file in the top-level PostgreSQL directory. This will put a server.log file in the top-level PostgreSQL directory. This
This file can contain useful information about problems or errors file can contain useful information about problems or errors encountered by
encountered by the server. Postmaster has a -d option that allows even the server. Postmaster has a -d option that allows even more detailed
more detailed information to be reported. The -d option takes a number information to be reported. The -d option takes a number 1-3 that specifies
1-3 that specifies the debug level. Be warned that a debug level of 3 the debug level. Be warned that a debug level of 3 generates large log
generates large log files. files.
You can actuall run the postgres backend from the command line, and You can actuall run the postgres backend from the command line, and type
type your SQL statement directly. This is recommended ONLY for your SQL statement directly. This is recommended ONLY for debugging
debugging purposes. Note that a newline terminates the query, not a purposes. Note that a newline terminates the query, not a semicolon. If you
semicolon. If you have compiled with debugging symbols, you can use a have compiled with debugging symbols, you can use a debugger to see what is
debugger to see what is happening. Because the backend was not started happening. Because the backend was not started from the postmaster, it is
from the postmaster, it is not running in an identical environment and not running in an identical environment and locking/backend interaction
locking/backend interaction problems may not be duplicated. Some problems may not be duplicated. Some operating system can attach to a
operating system can attach to a running backend directly to diagnose running backend directly to diagnose problems.
problems.
The postgres program has a -s, -A, -t options that can be very usefull for
The postgres program has a -s, -A, -t options that can be very usefull debugging and performance measurements.
for debugging and performance measurements.
You can also compile with profiling to see what functions are taking You can also compile with profiling to see what functions are taking
execution time. The backend profile files will be deposited in the execution time. The backend profile files will be deposited in the
pgsql/data/base/dbname directory. The client profile file will be put pgsql/data/base/dbname directory. The client profile file will be put in the
in the current directory. current directory.
The EXPLAIN command (see this FAQ) allows you to see how PostgreSQL is The EXPLAIN command (see this FAQ) allows you to see how PostgreSQL is
interpreting your query. interpreting your query.
2.13) How do I enable more than 32 concurrent backends? 2.13) How do I enable more than 32 concurrent backends?
Edit include/storage/sinvaladt.h, and change the value of Edit include/storage/sinvaladt.h, and change the value of MaxBackendId. In
MaxBackendId. In the future, we plan to make this a configurable the future, we plan to make this a configurable prameter.
prameter.
_________________________________________________________________ ------------------------------------------------------------------------
Section 3: PostgreSQL Features Section 3: PostgreSQL Features
...@@ -484,30 +475,29 @@ Section 3: PostgreSQL Features ...@@ -484,30 +475,29 @@ Section 3: PostgreSQL Features
3.2) I've having a lot of problems using rules. 3.2) I've having a lot of problems using rules.
Currently, the rule system in PostgreSQL is mostly broken. It works Currently, the rule system in PostgreSQL is mostly broken. It works enough
enough to support the view mechanism, but that's about it. Use to support the view mechanism, but that's about it. Use PostgreSQL rules at
PostgreSQL rules at your own peril. your own peril.
3.3) I can't seem to write into the middle of large objects reliably. 3.3) I can't seem to write into the middle of large objects reliably.
The Inversion large object system in PostgreSQL is also mostly broken. The Inversion large object system in PostgreSQL is also mostly broken. It
It works well enough for storing large wads of data and reading them works well enough for storing large wads of data and reading them back out,
back out, but the implementation has some underlying problems. Use but the implementation has some underlying problems. Use PostgreSQL large
PostgreSQL large objects at your own peril. objects at your own peril.
3.4) How can I write client applications to PostgreSQL? 3.4) How can I write client applications to PostgreSQL?
PostgreSQL supports a C-callable library interface called libpq as PostgreSQL supports a C-callable library interface called libpq as well as
well as many others. See the /src/interfaces directory. many others. See the /src/interfaces directory.
Others have contributed a perl interface and a WWW gateway to Others have contributed a perl interface and a WWW gateway to PostgreSQL.
PostgreSQL. See the PostgreSQL home pages for more details. See the PostgreSQL home pages for more details.
3.5) How do I set up a pg_group? 3.5) How do I set up a pg_group?
Currently, there is no easy interface to set up user groups. You have Currently, there is no easy interface to set up user groups. You have to
to explicitly insert/update the pg_group table. For example: explicitly insert/update the pg_group table. For example:
jolly=> insert into pg_group (groname, grosysid, grolist) jolly=> insert into pg_group (groname, grosysid, grolist)
jolly=> values ('posthackers', '1234', '{5443, 8261}'); jolly=> values ('posthackers', '1234', '{5443, 8261}');
...@@ -517,12 +507,13 @@ Section 3: PostgreSQL Features ...@@ -517,12 +507,13 @@ Section 3: PostgreSQL Features
jolly=> jolly=>
The fields in pg_group are: The fields in pg_group are:
* groname: the group name. This a char16 and should be purely * groname: the group name. This a char16 and should be purely
alphanumeric. Do not include underscores or other punctuation. alphanumeric. Do not include underscores or other punctuation.
* grosysid: the group id. This is an int4. This should be unique for * grosysid: the group id. This is an int4. This should be unique for each
each group. group.
* grolist: the list of pg_user id's that belong in the group. This * grolist: the list of pg_user id's that belong in the group. This is an
is an int4[]. int4[].
3.6) What is the exact difference between binary cursors and normal cursors? 3.6) What is the exact difference between binary cursors and normal cursors?
...@@ -530,53 +521,50 @@ Section 3: PostgreSQL Features ...@@ -530,53 +521,50 @@ Section 3: PostgreSQL Features
3.7) What is a R-tree index and what is it used for? 3.7) What is a R-tree index and what is it used for?
An r-tree index is used for indexing spatial data. A hash index can't An r-tree index is used for indexing spatial data. A hash index can't handle
handle range searches. A B-tree index only handles range searches in a range searches. A B-tree index only handles range searches in a single
single dimension. R-tree's can handle multi-dimensional data. For dimension. R-tree's can handle multi-dimensional data. For example, if a
example, if a R-tree index can be built on an attribute of type R-tree index can be built on an attribute of type 'point', the system can
'point', the system can more efficient answer queries like select all more efficient answer queries like select all points within a bounding
points within a bounding rectangle. rectangle.
The canonical paper that describes the original R-Tree design is: The canonical paper that describes the original R-Tree design is:
Guttman, A. "R-Trees: A Dynamic Index Structure for Spatial Guttman, A. "R-Trees: A Dynamic Index Structure for Spatial Searching." Proc
Searching." Proc of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57.
45-57.
You can also find this paper in Stonebraker's "Readings in Database You can also find this paper in Stonebraker's "Readings in Database Systems"
Systems"
Builtin R-Trees can handle polygons and boxes. In theory, R-trees can Builtin R-Trees can handle polygons and boxes. In theory, R-trees can be
be extended to handle higher number of dimensions. In practice, extended to handle higher number of dimensions. In practice, extending
extending R-trees require a bit of work and we don't currently have R-trees require a bit of work and we don't currently have any documentation
any documentation on how to do it. on how to do it.
3.8) What is the maximum size for a tuple? 3.8) What is the maximum size for a tuple?
Tuples are limited to 8K bytes. Taking into account system attributes Tuples are limited to 8K bytes. Taking into account system attributes and
and other overhead, one should stay well shy of 8,000 bytes to be on other overhead, one should stay well shy of 8,000 bytes to be on the safe
the safe side. To use attributes larger than 8K, try using the large side. To use attributes larger than 8K, try using the large objects
objects interface. interface.
Tuples do not cross 8k boundaries so a 5k tuple will require 8k of Tuples do not cross 8k boundaries so a 5k tuple will require 8k of storage.
storage.
3.9) I defined indices but my queries don't seem to make use of them. Why? 3.9) I defined indices but my queries don't seem to make use of them. Why?
PostgreSQL does not automatically maintain statistics. One has to make PostgreSQL does not automatically maintain statistics. One has to make an
an explicit 'vacuum' call to update the statistics. After statistics explicit 'vacuum' call to update the statistics. After statistics are
are updated, the optimizer has a better shot at using indices. Note updated, the optimizer has a better shot at using indices. Note that the
that the optimizer is limited and does not use indices in some optimizer is limited and does not use indices in some circumstances (such as
circumstances (such as OR clauses). For column-specific optimization OR clauses). For column-specific optimization statistics, use 'vacuum
statistics, use 'vacuum analyze'. analyze'.
If the system still does not see the index, it is probably because you If the system still does not see the index, it is probably because you have
have created an index on a field with the improper *_ops type. For created an index on a field with the improper *_ops type. For example, you
example, you have created a CHAR(4) field, but have specified a have created a CHAR(4) field, but have specified a char_ops index
char_ops index type_class. type_class.
See the create_index manual page for information on what type classes See the create_index manual page for information on what type classes are
are available. It must match the field type. available. It must match the field type.
Postgres does not warn the user when the improper index is created. Postgres does not warn the user when the improper index is created.
...@@ -606,14 +594,14 @@ VARCHAR(#) varchar size specifies maximum length, no padding ...@@ -606,14 +594,14 @@ VARCHAR(#) varchar size specifies maximum length, no padding
TEXT text length limited only by maximum tuple length TEXT text length limited only by maximum tuple length
BYTEA bytea variable-length array of bytes BYTEA bytea variable-length array of bytes
Remember, you need to use the internal name when creating indexes on You need to use the internal name when doing internal operations.
these fields or when doing other internal operations.
The last four types above are "varlena" types (i.e. the first four The last four types above are "varlena" types (i.e. the first four bytes are
bytes are the length, followed by the data). CHAR(#) allocates the the length, followed by the data). CHAR(#) allocates the maximum number of
maximum number of bytes no matter how much data is stored in the bytes no matter how much data is stored in the field. TEXT, VARCHAR(#), and
field. TEXT, VARCHAR(#), and BYTEA all have variable length on the BYTEA all have variable length on the disk, and because of this, there is a
disk. small performance penalty for using them. Specifically, the penalty is for
access to any columns after the first column of this type.
3.13) In a query, how do I detect if a field is NULL? 3.13) In a query, how do I detect if a field is NULL?
...@@ -625,10 +613,10 @@ BYTEA bytea variable-length array of bytes ...@@ -625,10 +613,10 @@ BYTEA bytea variable-length array of bytes
3.15) How do I create a serial field? 3.15) How do I create a serial field?
Postgres does not allow the user to specifiy a user column as type Postgres does not allow the user to specifiy a user column as type SERIAL.
SERIAL. Instead, you can use each row's oid field as a unique value. Instead, you can use each row's oid field as a unique value. However, if you
However, if you need to dump and reload the database, you need to use need to dump and reload the database, you need to use pgdump's -o option or
pgdump's -o option or COPY's WITH OIDS option to preserver the oids. COPY's WITH OIDS option to preserver the oids.
We also have a SEQUENCE function that is similar to SERIAL. See the We also have a SEQUENCE function that is similar to SERIAL. See the
create_sequence manual page. create_sequence manual page.
...@@ -646,59 +634,56 @@ BYTEA bytea variable-length array of bytes ...@@ -646,59 +634,56 @@ BYTEA bytea variable-length array of bytes
create table my_stuff (my_key int4, value text); create table my_stuff (my_key int4, value text);
insert into my_stuff values (new_oid(), 'hello'); insert into my_stuff values (new_oid(), 'hello');
However, keep in mind there is a race condition here where one server However, keep in mind there is a race condition here where one server could
could do the update, then another one do an update, and they both do the update, then another one do an update, and they both could select the
could select the same new id. This statement should be performed same new id. This statement should be performed within a transaction.
within a transaction.
Yet another way is to use general trigger function autoinc() from Yet another way is to use general trigger function autoinc() from
contrib/spi/autoinc.c. contrib/spi/autoinc.c.
3.16) What are the pg_psort.XXX files in my database directory? 3.16) What are the pg_psort.XXX files in my database directory?
They are temporary sort files generated by the query executor. For They are temporary sort files generated by the query executor. For example,
example, if a sort needs to be done to satisfy an ORDER BY, some temp if a sort needs to be done to satisfy an ORDER BY, some temp files are
files are generated as a result of the sort. generated as a result of the sort.
If you have no transactions or sorts running at the time, it is safe If you have no transactions or sorts running at the time, it is safe to
to delete the pg_psort.XXX files. delete the pg_psort.XXX files.
3.17) Why can't I connect to my database from another machine? 3.17) Why can't I connect to my database from another machine?
The default configuration allows only connections from tcp/ip host The default configuration allows only connections from tcp/ip host
localhost. You need to add a host entry to the file pgsql/data/pg_hba. localhost. You need to add a host entry to the file pgsql/data/pg_hba. See
See the hba_conf manual page. the hba_conf manual page.
3.18) How do I find out what indexes or operations are defined in the 3.18) How do I find out what indexes or operations are defined in the
database? database?
Run the file pgsql/src/tutorial/syscat.source. It illustrates many of Run the file pgsql/src/tutorial/syscat.source. It illustrates many of the
the 'select's needed to get information out of the database system 'select's needed to get information out of the database system tables.
tables.
3.19) What is the time-warp feature and how does it relate to vacuum? 3.19) What is the time-warp feature and how does it relate to vacuum?
PostgreSQL handles data changes differently than most database PostgreSQL handles data changes differently than most database systems. When
systems. When a row is changed in a table, the original row is marked a row is changed in a table, the original row is marked with the time it was
with the time it was changed, and a new row is created with the changed, and a new row is created with the current data. By default, only
current data. By default, only current rows are used in a table. If current rows are used in a table. If you specify a date/time after the table
you specify a date/time after the table name in a FROM clause, you can name in a FROM clause, you can access the data that was current at that
access the data that was current at that time, i.e. time, i.e.
SELECT * SELECT *
FROM employees ['July 24, 1996 09:00:00'] FROM employees ['July 24, 1996 09:00:00']
displays employee rows in the table at the specified time. You can displays employee rows in the table at the specified time. You can specify
specify intervals like [date,date], [date,], [,date], or [,]. This intervals like [date,date], [date,], [,date], or [,]. This last option
last option accesses all rows that ever existed. accesses all rows that ever existed.
INSERTed rows get a timestamp too, so rows that were not in the table INSERTed rows get a timestamp too, so rows that were not in the table at the
at the desired time will not appear. desired time will not appear.
Vacuum removes rows that are no longer current. This time-warp feature Vacuum removes rows that are no longer current. This time-warp feature is
is used by the engine for rollback and crash recovery. Expiration used by the engine for rollback and crash recovery. Expiration times can be
times can be set with purge. set with purge.
In 6.0, once a table is vacuumed, the creation time of a row may be In 6.0, once a table is vacuumed, the creation time of a row may be
incorrect, causing time-traval to fail. incorrect, causing time-traval to fail.
...@@ -707,28 +692,29 @@ BYTEA bytea variable-length array of bytes ...@@ -707,28 +692,29 @@ BYTEA bytea variable-length array of bytes
3.20) What is an oid? What is a tid? 3.20) What is an oid? What is a tid?
Oids are Postgres's answer to unique row ids or serial columns. Every Oids are Postgres's answer to unique row ids or serial columns. Every row
row that is created in Postgres gets a unique oid. All oids generated that is created in Postgres gets a unique oid. All oids generated by initdb
by initdb are less than 16384 (from backend/access/transam.h). All are less than 16384 (from backend/access/transam.h). All post-initdb
post-initdb (user-created) oids are equal or greater that this. All (user-created) oids are equal or greater that this. All these oids are
these oids are unique not only within a table, or database, but unique unique not only within a table, or database, but unique within the entire
within the entire postgres installation. postgres installation.
Postgres uses oids in its internal system tables to link rows in Postgres uses oids in its internal system tables to link rows in separate
separate tables. These oids can be used to identify specific user rows tables. These oids can be used to identify specific user rows and used in
and used in joins. It is recommended you use column type oid to store joins. It is recommended you use column type oid to store oid values. See
oid values. See the sql(l) manual page to see the other internal the sql(l) manual page to see the other internal columns. You can create an
columns. You can create an index on the oid field for faster access. index on the oid field for faster access.
Tids are used to indentify specific physical rows with block and Tids are used to indentify specific physical rows with block and offset
offset values. Tids change after rows are modified or reloaded. They values. Tids change after rows are modified or reloaded. They are used by
are used by index entries to point to physical rows. They can not be index entries to point to physical rows. They can not be accessed through
accessed through sql. sql.
3.21) What is the meaning of some of the terms used in Postgres? 3.21) What is the meaning of some of the terms used in Postgres?
Some of the source code and older documentation use terms that have Some of the source code and older documentation use terms that have more
more common usage. Here are some: common usage. Here are some:
* row, record, tuple * row, record, tuple
* attribute, field, column * attribute, field, column
* table, class * table, class
...@@ -743,10 +729,9 @@ BYTEA bytea variable-length array of bytes ...@@ -743,10 +729,9 @@ BYTEA bytea variable-length array of bytes
3.22) What is Genetic Query Optimization? 3.22) What is Genetic Query Optimization?
The GEQO module in PostgreSQL is intended to solve the query The GEQO module in PostgreSQL is intended to solve the query optimization
optimization problem of joining many tables by means of a Genetic problem of joining many tables by means of a Genetic Algorithm (GA). It
Algorithm (GA). It allows the handling of large join queries through allows the handling of large join queries through non-exhaustive search.
non-exhaustive search.
For further information see README.GEQO <utesch@aut.tu-freiberg.de>. For further information see README.GEQO <utesch@aut.tu-freiberg.de>.
...@@ -764,24 +749,23 @@ BYTEA bytea variable-length array of bytes ...@@ -764,24 +749,23 @@ BYTEA bytea variable-length array of bytes
See the fetch manual page. See the fetch manual page.
This only prevents all row results from being transfered to the This only prevents all row results from being transfered to the client. The
client. The entire query must be evaluated, even if you only want just entire query must be evaluated, even if you only want just first few rows.
first few rows. Consider a query that has and ORDER BY. There is no Consider a query that has and ORDER BY. There is no way to return any rows
way to return any rows until the entire query is evaluated and sorted. until the entire query is evaluated and sorted.
3.25) Why can't I create a column named "time"? 3.25) Why can't I create a column named "time"?
6.2.1 has added some new restricted keywords as we make PostgreSQL 6.2.1 has added some new restricted keywords as we make PostgreSQL more
more ANSI-92 compilant. The next release will have this restriction ANSI-92 compilant. The next release will have this restriction removed.
removed. There is a patch on ftp.postgresql.org that will allow this There is a patch on ftp.postgresql.org that will allow this feature now.
feature now.
3.26)How much database disk space is required to store data from a typical 3.26)How much database disk space is required to store data from a typical
flat file? flat file?
Consider a file with 300,000 lines with two integers on each line. The Consider a file with 300,000 lines with two integers on each line. The flat
flat file is 2.4MB. The size of the PostgreSQL database file file is 2.4MB. The size of the PostgreSQL database file containing this data
containing this data can be estimated: can be estimated:
40 bytes + each row header (approximate) 40 bytes + each row header (approximate)
8 bytes + two int fields @ 4 bytes each 8 bytes + two int fields @ 4 bytes each
...@@ -803,7 +787,8 @@ The data page size in PostgreSQL is 8192(8k) bytes, so: ...@@ -803,7 +787,8 @@ The data page size in PostgreSQL is 8192(8k) bytes, so:
Indexes do not contain as much overhead, but do contain the data that Indexes do not contain as much overhead, but do contain the data that
is being indexed, so they can be large also. is being indexed, so they can be large also.
_________________________________________________________________
------------------------------------------------------------------------
Section 4: Extending PostgreSQL Section 4: Extending PostgreSQL
...@@ -811,30 +796,30 @@ Section 4: Extending PostgreSQL ...@@ -811,30 +796,30 @@ Section 4: Extending PostgreSQL
core. core.
The problem could be a number of things. Try testing your user-defined The problem could be a number of things. Try testing your user-defined
function in a stand alone test program first. Also, make sure you are function in a stand alone test program first. Also, make sure you are not
not sending elog NOTICES when the front-end is expecting data, such as sending elog NOTICES when the front-end is expecting data, such as during a
during a type_in() or type_out() functions type_in() or type_out() functions
4.2) I get messages of the type NOTICE:PortalHeapMemoryFree: 0x402251d0 not 4.2) I get messages of the type NOTICE:PortalHeapMemoryFree: 0x402251d0 not
in alloc set! in alloc set!
You are pfree'ing something that was not palloc'ed. When writing You are pfree'ing something that was not palloc'ed. When writing
user-defined functions, do not include the file "libpq-fe.h". Doing so user-defined functions, do not include the file "libpq-fe.h". Doing so will
will cause your palloc to be a malloc instead of a free. Then, when cause your palloc to be a malloc instead of a free. Then, when the backend
the backend pfrees the storage, you get the notice message. pfrees the storage, you get the notice message.
4.3) I've written some nifty new types and functions for PostgreSQL. 4.3) I've written some nifty new types and functions for PostgreSQL.
Please share them with other PostgreSQL users. Send your extensions to Please share them with other PostgreSQL users. Send your extensions to
mailing list, and they will eventually end up in the contrib/ mailing list, and they will eventually end up in the contrib/ subdirectory.
subdirectory.
4.4) How do I write a C function to return a tuple? 4.4) How do I write a C function to return a tuple?
This requires extreme wizardry, so extreme that the authors have not This requires extreme wizardry, so extreme that the authors have not ever
ever tried it, though in principle it can be done. The short answer is tried it, though in principle it can be done. The short answer is ... you
... you can't. This capability is forthcoming in the future. can't. This capability is forthcoming in the future.
_________________________________________________________________
------------------------------------------------------------------------
Section 5: Bugs Section 5: Bugs
...@@ -842,10 +827,11 @@ Section 5: Bugs ...@@ -842,10 +827,11 @@ Section 5: Bugs
Check the current FAQ at http://postgreSQL.org Check the current FAQ at http://postgreSQL.org
Also check out our ftp site ftp://ftp.postgreSQL.org/pub to see if Also check out our ftp site ftp://ftp.postgreSQL.org/pub to see if there is
there is a more recent PostgreSQL version. a more recent PostgreSQL version.
You can also fill out the "bug-template" file and send it to: You can also fill out the "bug-template" file and send it to:
* bugs@postgreSQL.org * bugs@postgreSQL.org
This is the address of the developers mailing list. This is the address of the developers mailing list.
...@@ -4,7 +4,7 @@ Frequently Asked Questions (FAQ) for PostgreSQL >= V6.1 ...@@ -4,7 +4,7 @@ Frequently Asked Questions (FAQ) for PostgreSQL >= V6.1
Linux Specific Linux Specific
TO BE READ IN CONJUNCTION WITH THE NORMAL FAQ TO BE READ IN CONJUNCTION WITH THE NORMAL FAQ
======================================================= =======================================================
last updated: Thu Dec 15 12:05:00 GMT 1997 last updated: Wed Feb 18 13:00:00 GMT 1997
current maintainer: Andrew C.R. Martin (martin@biochem.ucl.ac.uk) current maintainer: Andrew C.R. Martin (martin@biochem.ucl.ac.uk)
original author: Andrew C.R. Martin (martin@biochem.ucl.ac.uk) original author: Andrew C.R. Martin (martin@biochem.ucl.ac.uk)
...@@ -12,10 +12,8 @@ original author: Andrew C.R. Martin (martin@biochem.ucl.ac.uk) ...@@ -12,10 +12,8 @@ original author: Andrew C.R. Martin (martin@biochem.ucl.ac.uk)
Changes in this version (* = modified, + = new, - = removed): Changes in this version (* = modified, + = new, - = removed):
*1.3) [REDHAT] Why do I get problems with missing libdl and dlfcn.h? +1.20) How can I optimise for 486 or pentium processors
*1.4) [SLACKWARE 3.1] Why do I get problems with missing libdl and dlfcn.h? +3.10) Why do I get funny rounding results in some date/time arithmetic...
+1.19) Why does make exit or crash?
This file is divided approximately as follows: This file is divided approximately as follows:
1.*) Installing PostgreSQL 1.*) Installing PostgreSQL
...@@ -55,6 +53,7 @@ Questions answered: ...@@ -55,6 +53,7 @@ Questions answered:
1.17) When compiling postgres, gcc reports signal 11 and aborts. 1.17) When compiling postgres, gcc reports signal 11 and aborts.
1.18) Can I install 6.1.1 under MkLinux? 1.18) Can I install 6.1.1 under MkLinux?
1.19) Why does make exit or crash? 1.19) Why does make exit or crash?
1.20) How can I optimise for 486 or pentium processors
2.1) The linker fails to find libX11 when compiling pgtclsh 2.1) The linker fails to find libX11 when compiling pgtclsh
3.1) I get an error reporting _fUnKy_POSTPORT_sTuFf_ undefined when 3.1) I get an error reporting _fUnKy_POSTPORT_sTuFf_ undefined when
running scripts like createuser running scripts like createuser
...@@ -77,6 +76,10 @@ Questions answered: ...@@ -77,6 +76,10 @@ Questions answered:
3.8) When PostgreSQL is running when the system is shutdown, Linux 3.8) When PostgreSQL is running when the system is shutdown, Linux
always fsck's the disk when rebooted. always fsck's the disk when rebooted.
3.9) Why does Query 32 in the regression tests take so long? 3.9) Why does Query 32 in the regression tests take so long?
3.10) Why do I get funny rounding results in some date/time arithmetic,
such as
select '4 hours'::timespan;
returning '3 hours 59 minutes 60 seconds'?
---------------------------------------------------------------------- ----------------------------------------------------------------------
Section 1: Compiling PostgreSQL Section 1: Compiling PostgreSQL
...@@ -298,7 +301,7 @@ Section 1: Compiling PostgreSQL ...@@ -298,7 +301,7 @@ Section 1: Compiling PostgreSQL
Some versions of SuSE provide only ncurses, so you may need Some versions of SuSE provide only ncurses, so you may need
to force use of ncurses rather than curses by changing to force use of ncurses rather than curses by changing
-lcurses to -lncurses. -lcurses to -lncurses. (Reported true for SuSE 5.1)
1.9) Why do I get problems with ld.so? 1.9) Why do I get problems with ld.so?
...@@ -430,6 +433,19 @@ Section 1: Compiling PostgreSQL ...@@ -430,6 +433,19 @@ Section 1: Compiling PostgreSQL
In short, try upgrading gmake to the latest version you can In short, try upgrading gmake to the latest version you can
find before reporting this as a problem find before reporting this as a problem
1.20) How can I optimise for 486 or pentium processors
The default compiler flags perform no optimisation for 486
or Pentium processors. To add such optimisation, edit
Makefile.custom and add:
CFLAGS+= -m486
or (for the new compilers that most people are not yet running)
CFLAGS+= -mpentium
or
CFLAGS+= -mpentiumpro
---------------------------------------------------------------------- ----------------------------------------------------------------------
Section 2: Compiling accessory programs Section 2: Compiling accessory programs
...@@ -617,6 +633,15 @@ exit 0 ...@@ -617,6 +633,15 @@ exit 0
then type: then type:
sh ./perquery < bench.out > & bench.out.perquery sh ./perquery < bench.out > & bench.out.perquery
3.10) Why do I get funny rounding results in some date/time arithmetic,
such as
select '4 hours'::timespan;
returning '3 hours 59 minutes 60 seconds'?
You are running the new glibc2 libraries and have a version earlier than
2.0.7. It is a math rounding problem in the library. Upgrade your library.
---------------------------------------------------------------------------- ----------------------------------------------------------------------------
Dr. Andrew C.R. Martin University College London Dr. Andrew C.R. Martin University College London
EMAIL: (Work) martin@biochem.ucl.ac.uk (Home) andrew@stagleys.demon.co.uk EMAIL: (Work) martin@biochem.ucl.ac.uk (Home) andrew@stagleys.demon.co.uk
......
Developer's Frequently Asked Questions (FAQ) for PostgreSQL
Last updated: Wed Feb 11 20:23:01 EST 1998
Current maintainer: Bruce Momjian (maillist@candle.pha.pa.us)
The most recent version of this document can be viewed at the postgreSQL Web
site, http://postgreSQL.org.
------------------------------------------------------------------------
Questions answered:
1) What tools are available for developers?
2) What books are good for developers?
3) Why do we use palloc() and pfree() to allocate memory?
4) Why do we use Node and List to make data structures?
5) How do I add a feature or fix a bug?
6) How do I download/update the current source tree?
7) How do I test my changes?
------------------------------------------------------------------------
1) What tools are available for developers?
Aside from the User documentation mentioned in the regular FAQ, there are
several development tools available. First, all the files in the /tools
directory are designed for developers.
RELEASE_CHANGES changes we have to make for each release
SQL_keywords standard SQL'92 keywords
backend web flowchart of the backend directories
ccsym find standard defines made by your compiler
entab converts tabs to spaces, used by pgindent
find_static finds functions that could be made static
find_typedef get a list of typedefs in the source code
make_ctags make vi 'tags' file in each directory
make_diff make *.orig and diffs of source
make_etags make emacs 'etags' files
make_keywords.README make comparison of our keywords and SQL'92
make_mkid make mkid ID files
mkldexport create AIX exports file
pgindent indents C source files
Let me note some of these. If you point your browser at the tools/backend
directory, you will see all the backend components in a flow chart. You can
click on any one to see a description. If you then click on the directory
name, you will be taken to the source directory, to browse the actual source
code behind it. We also have several README files in some source directories
to describe the function of the module. The browser will display these when
you enter the directory also. The tools/backend directory is also contained
on our web page under the title Backend Flowchart.
Second, you really should have an editor that can handle tags, so you can
tag a function call to see the function definition, and then tag inside that
function to see an even lower-level function, and then back out twice to
return to the original function. Most editors support this via tags or etags
files.
Third, you need to get mkid from ftp.postgresql.org. By running
tools/make_mkid, an archive of source symbols can be created that can be
rapidly queried like grep or edited.
make_diff has tools to create patch diff files that can be applied to the
distribution.
pgindent will format source files to match our standard format, which has
four-space tabs, and an indenting format specified by flags to the your
operating system's utility indent.
2) What books are good for developers?
I have two good books, An Introduction to Database Systems, by C.J. Date,
Addison, Wesley and A Guide to the SQL Standard, by C.J. Date, et. al,
Addison, Wesley.
3) Why do we use palloc() and pfree() to allocate memory?
palloc() and pfree() are used in place of malloc() and free() because we
automatically free all memory allocated when a transaction completes. This
makes it easier to make sure we free memory that gets allocated in one
place, but only freed much later. There are several contexts that memory can
be allocated in, and this controls when the allocated memory is
automatically freed by the backend.
4) Why do we use Node and List to make data structures?
We do this because this allows a consistent way to pass data inside the
backend in a flexible way. Every node has a NodeTag which specifies what
type of data is inside the Node. Lists are lists of Nodes. lfirst(),
lnext(), and foreach() are used to get, skip, and traverse through Lists.
5) How do I add a feature or fix a bug?
The source code is over 250,000 lines. Many problems/features are isolated
to one specific area of the code. Others require knowledge of much of the
source. If you are confused about where to start, ask the hackers list, and
they will be glad to assess the complexity and give pointers on where to
start.
Another thing to keep in mind is that many fixes and features can be added
with surprisingly little code. I often start by adding code, then looking at
other areas in the code where similar things are done, and by the time I am
finished, the patch is quite small and compact.
When adding code, keep in mind that it should use the existing facilities in
the source, for performance reasons and for simplicity. Often a review of
existing code doing similar things is helpful.
6) How do I download/update the current source tree?
There are several ways to obtain the source tree. Occasional developers can
just get the most recent source tree snapshot from ftp.postgresql.org. For
regular developers, you can get CVSup, which is available from
ftp.postgresql.org too. CVSup allows you to download the source tree, then
occasionally update your copy of the source tree with any new changes. Using
CVSup, you don't have to download the entire source each time, only the
changed files. CVSup does not allow developers to update the source tree.
To update the source tree, there are two ways. You can generate a patch
against your current source tree, perhaps using the make_diff tools
mentioned above, and send them to the patches list. They will be reviewed,
and applied in a timely manner. If the patch is major, and we are in beta
testing, the developers may wait for the final release before applying your
patches.
For hard-core developers, Marc(scrappy@postgresql.org) will give you a Unix
shell account on postgresql.org, and you can ftp your files into your
account, patch, and cvs install the changes directly into the source tree.
6) How do I test my changes?
First, use psql to make sure it is working as you expect. Then run
src/test/regress and get the output of src/test/regress/checkresults with
and without your changes, to see that your patch does not change the
regression test in unexpected ways. This practice has saved me many times.
The regression tests test the code in ways I would never do, and has caught
many bugs in my patches. By finding the problems now, you save yourself a
lot of debugging later when things are broken, and you can't figure out when
it happened.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment