diff --git a/doc/FAQ b/doc/FAQ index 1b35b4f86fdb4c5857a816325e83cd78de245c77..3fd7bd13d38dae8c0ae1138927ddf901921e8efa 100644 --- a/doc/FAQ +++ b/doc/FAQ @@ -1,586 +1,670 @@ +<HTML> +<HEAD> +<TITLE>PostgreSQL FAQ</title> +</HEAD> +<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#A00000" ALINK="#0000FF"> +<H1> +Frequently Asked Questions (FAQ) for PostgreSQL +</H1> +<P> +Last updated: Wed Jun 11 10:44:40 EDT 1997 +<BR> +Version: 6.1 +<P> +Current maintainer: Bruce Momjian (<a +href="mailto:maillist@candle.pha.pa.us">maillist@candle.pha.pa.us</a>)<BR> +<P> +The most recent version of this document can be viewed at +the postgreSQL Web site, <a +href="http://postgreSQL.org">http://postgreSQL.org</a>. +<P> +Linux-specific questions are answered in +<a href="http://postgreSQL.org/docs/FAQ-Linux.phtml">http://postgreSQL.org/docs/FAQ-Linux.phtml</a>. +<P> +Irix-specific questions are answered in +<a href="http://postgreSQL.org/docs/FAQ-Irix.phtml">http://postgreSQL.org/docs/FAQ-Irix.phtml</a>. +<P> +Changes in this version (* = modified, + = new): +<UL> +<LI>3.42) What is Genetic Query Optimization?<BR> +<LI>3.43) I am running Solaris and my dates display wrong. Why?<BR> +</UL> +<HR> +<P> +<H2>Questions answered:</H2> +<H3> 1) General questions</H3> +<a href="#1.1">1.1</a>) What is PostgreSQL?<BR> +<a href="#1.2">1.2</a>) What does PostgreSQL run on?<BR> +<a href="#1.3">1.3</a>) Where can I get PostgreSQL?<BR> +<a href="#1.4">1.4</a>) What's the copyright on PostgreSQL?<BR> +<a href="#1.5">1.5</a>) Support for PostgreSQL<BR> +<a href="#1.6">1.6</a>) Latest release of PostgreSQL<BR> +<a href="#1.7">1.7</a>) Is there a commercial version of PostgreSQL?<BR> +<a href="#1.9">1.9</a>) What version of SQL does PostgreSQL use?<BR> +<a href="#1.10">1.10</a>) Does PostgreSQL work with databases from +earlier versions of postgres?<BR> +<a href="#1.11">1.11</a>) How many people use PostgreSQL?<BR> +<H3> 2) Installation questions</H3> +<a href="#2.1">2.1</a>) initdb doesn't run<BR> +<a href="#2.2">2.2</a>) when I start up the postmaster, I get + "FindBackend: could not find a backend to execute..." + "postmaster: could not find backend to execute..."<BR> +<a href="#2.3">2.3</a>) The system seems to be confused about commas, +decimal points, and date formats.<BR> +<a href="#2.4">2.4</a>) How do I install PostgreSQL somewhere other than +/usr/local/pgsql?<BR> +<a href="#2.5">2.5</a>) When I run postmaster, I get a Bad System Call +core dumped message.<BR> +<a href="#2.6">2.6</a>) When I try to start the postmaster, I get +IpcMemoryCreate errors.<BR> +<a href="#2.7">2.7</a>) I have changed a source file, but a +recompile does not see the change?<BR> +<H3> 3) Operational questions</H3> +<a href="#3.1">3.1</a>) How do I specify a KEY or other constraints on a +column?<BR> +<a href="#3.2">3.2</a>) Does PostgreSQL support nested subqueries?<BR> +<a href="#3.3">3.3</a>) How do I define a unique indices?<BR> +<a href="#3.4">3.4</a>) I've having a lot of problems using rules.<BR> +<a href="#3.5">3.5</a>) I can't seem to write into the middle of large +objects reliably.<BR> +<a href="#3.6">3.6</a>) Does PostgreSQL have a graphical user interface? +A report generator? A embedded query language interface?<BR> +<a href="#3.7">3.7</a>) How can I write client applications to +PostgreSQL?<BR> +<a href="#3.8">3.8</a>) How do I prevent other hosts from accessing my +PostgreSQL<BR> +<a href="#3.9">3.9</a>) How do I set up a pg_group?<BR> +<a href="#3.10">3.10</a>) What is the exact difference between +binary cursors and normal cursors?<BR> +<a href="#3.11">3.11</a>) Why doesn't the != operator work?<BR> +<a href="#3.12">3.12</a>) What is a R-tree index and what is it +used for?<BR> +<a href="#3.13">3.13</a>) What is the maximum size for a +tuple?<BR> +<a href="#3.14">3.14</a>) I defined indices but my queries don't +seem to make use of them. Why?<BR> +<a href="#3.15">3.15</a>) Are there ODBC drivers for +PostgreSQL?<BR> +<a href="#3.16">3.16</a>) How do I use postgres for +multi-dimensional indexing (> 2 dimensions)?<BR> +<a href="#3.17">3.17</a>) How do I do regular expression searches? +case-insensitive regexp searching?<BR> +<a href="#3.18">3.18</a>) I can't access the database as the +'root' user.<BR> +<a href="#3.19">3.19</a>) I experienced a server crash during a +vacuum. How do I remove the lock file?<BR> +<a href="#3.20">3.20</a>) What is the difference between the +various character types?<BR> +<a href="#3.21">3.21</a>) In a query, how do I detect if a field +is NULL?<BR> +<a href="#3.22">3.22</a>) How do I see how the query optimizer is +evaluating my query?<BR> +<a href="#3.23">3.23</a>) How do I create a serial field?<BR> +<a href="#3.24">3.24</a>) How do I create a multi-column +index?<BR> +<a href="#3.25">3.25</a>) What are the temp_XXX files in my +database directory?<BR> +<a href="#3.26">3.26</a>) Why are my table files not getting any +smaller after a delete?<BR> +<a href="#3.27">3.27</a>) Why can't I connect to my database from +another machine?<BR> +<a href="#3.28">3.28</a>) I get the error 'default index class +unsupported' when creating an index. How do I do it?<BR> +<a href="#3.29">3.29</a>) Why does creating an index crash the +backend server?<BR> +<a href="#3.30">3.30</a>) How do I find out what indexes or +operations are defined in the database?<BR> +<a href="#3.31">3.31</a>) Why do statements require an extra character at +the end? Why does 'createuser' return 'unexpected last match in +input()'? Why does pg_dump fail?<BR> +<a href="#3.32">3.32</a>) All my servers crash under concurrent +table access. Why?<BR> +<a href="#3.33">3.33</a>) What tools are available for hooking +postgres to Web pages?<BR> +<a href="#3.34">3.34</a>) What is the time-warp feature and how +does it relate to vacuum?<BR> +<a href="#3.35">3.35</a>) How do I tune the database engine for +better performance?<BR> +<a href="#3.36">3.36</a>) What debugging features are available in +PostgreSQL?<BR> +<a href="#3.37">3.37</a>) What is an oid? What is a tid?<BR> +<a href="#3.38">3.38</a>) What is the meaning of some of the terms +used in Postgres?<BR> +<a href="#3.39">3.39</a>) What is Genetic Query Optimization?<BR> +<a href="#3.40">3.40</a>) I am running Solaris and my dates +display wrong. Why? +<a href="#3.41">3.41</a>) How do I enable more than 32 concurrent +backends? +<H3> 4) Questions about extending PostgreSQL</H3> +<a href="#4.1">4.1</a>) I wrote a user-defined function and when I run +it in psql, it dumps core.<BR> +<a href="#4.2">4.2</a>) I get messages of the type +NOTICE:PortalHeapMemoryFree: 0x402251d0<BR> +<a href="#4.3">4.3</a>) I've written some nifty new types and functions +for PostgreSQL.<BR> +<a href="#4.4">4.4</a>) How do I write a C function to return a +tuple?<BR> +<H3> 5) Bugs</H3> +<a href="#5.1">5.1</a>) How do I make a bug report? - Frequently Asked Questions (FAQ) for PostgreSQL - - Last updated: Tue May 13 23:15:59 EDT 1997 - Version: 6.1 - - 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. - - Linux-specific questions are answered in - http://postgreSQL.org/docs/FAQ-Linux.phtml. - - Irix-specific questions are answered in - http://postgreSQL.org/docs/FAQ-Irix.phtml. - - Changes in this version (* = modified, + = new): - * 3.42) What is Genetic Query Optimization? - * 3.43) I am running Solaris and my dates display wrong. Why? - - _________________________________________________________________ - -Questions answered: +<HR> <H2> Section 1: General Questions</H2> <H3><a +name="1.1">1.1</a>) What is PostgreSQL?</H3> - 1) General questions - - 1.1) What is PostgreSQL? - 1.2) What does PostgreSQL run on? - 1.3) Where can I get PostgreSQL? - 1.4) What's the copyright on PostgreSQL? - 1.5) Support for PostgreSQL - 1.6) Latest release of PostgreSQL - 1.7) Is there a commercial version of PostgreSQL? - 1.9) What version of SQL does PostgreSQL use? - 1.10) Does PostgreSQL work with databases from earlier versions of - postgres? - 1.11) How many people use PostgreSQL? - - 2) Installation questions - - 2.1) initdb doesn't run - 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..." - 2.3) The system seems to be confused about commas, decimal points, and - date formats. - 2.4) How do I install PostgreSQL somewhere other than - /usr/local/pgsql? - 2.5) When I run postmaster, I get a Bad System Call core dumped - message. - 2.6) I get the error message "obj/fmgr.h: No such file or directory" - 2.7) When I try to start the postmaster, I get IpcMemoryCreate errors. - 2.8) I have changed a source file, but a recompile does not see the - change? - - 3) Operational questions - - 3.1) How do I specify a KEY or other constraints on a column? - 3.2) Does PostgreSQL support nested subqueries? - 3.3) How do I define a unique indices? - 3.4) I've having a lot of problems using rules. - 3.5) I can't seem to write into the middle of large objects reliably. - 3.6) Does PostgreSQL have a graphical user interface? A report - generator? A embedded query language interface? - 3.7) How can I write client applications to PostgreSQL? - 3.8) How do I prevent other hosts from accessing my PostgreSQL - 3.9) How do I set up a pg_group? - 3.10) What is the exact difference between binary cursors and normal - cursors? - 3.11) Why doesn't the != operator work? - 3.12) What is a R-tree index and what is it used for? - 3.13) What is the maximum size for a tuple? - 3.14) I defined indices but my queries don't seem to make use of them. - Why? - 3.15) Are there ODBC drivers for PostgreSQL? - 3.16) How do I use postgres for multi-dimensional indexing (> 2 - dimensions)? - 3.17) How do I do regular expression searches? case-insensitive regexp - searching? - 3.18) I can't access the database as the 'root' user. - 3.19) I experienced a server crash during a vacuum. How do I remove - the lock file? - 3.20) What is the difference between the various character types? - 3.21) In a query, how do I detect if a field is NULL? - 3.22) How do I see how the query optimizer is evaluating my query? - 3.23) How do I create a serial field? - 3.24) How do I create a multi-column index? - 3.25) What are the temp_XXX files in my database directory? - 3.26) Why are my table files not getting any smaller after a delete? - 3.27) Why can't I connect to my database from another machine? - 3.28) I get the error 'default index class unsupported' when creating - an index. How do I do it? - 3.29) Why does creating an index crash the backend server? - 3.30) How do I specify a decimal constant as a float8, or a string as - a text? Why am I getting poor precision? - 3.31) How do I find out what indexes or operations are defined in the - database? - 3.32) My database is corrupt. I can't do anything. What should I do? - 3.33) Createdb, destroydb, createuser, destroyuser don't run. Why? - 3.34) Why do statements require an extra character at the end? Why - does 'createuser' return 'unexpected last match in input()'? Why does - pg_dump fail? - 3.35) All my servers crash under concurrent table access. Why? - 3.36) What tools are available for hooking postgres to Web pages? - 3.37) What is the time-warp feature and how does it relate to vacuum? - 3.38) How do I tune the database engine for better performance? - 3.39) What debugging features are available in PostgreSQL? - 3.40) What is an oid? What is a tid? - 3.41) What is the meaning of some of the terms used in Postgres? - 3.42) What is Genetic Query Optimization? - 3.42) I am running Solaris and my dates display wrong. Why? - - 4) Questions about extending PostgreSQL - - 4.1) I wrote a user-defined function and when I run it in psql, it - dumps core. - 4.2) I get messages of the type NOTICE:PortalHeapMemoryFree: - 0x402251d0 - 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? - - 5) Bugs - - 5.1) How do I make a bug report? - _________________________________________________________________ - -Section 1: General Questions +<P> +PostgreSQL is an enhancement of the POSTGRES database management system, +a next-generation DBMS research prototype. While PostgreSQL retains the +powerful data model and rich data types of POSTGRES, it replaces the +PostQuel query language with an extended subset of SQL. PostgreSQL is +free and the complete source is available. +<P> +PostgreSQL development is being performed by a team of Internet +developers who all subscribe to the PostgreSQL development mailing list. +The current coordinator is Marc G. Fournier (<a +href="mailto:scrappy@postgreSQL.org">scrappy@postgreSQL.org</a>). (See +below on how to join). This team is now responsible for all current and +future development of PostgreSQL. +<P> +The authors of PostgreSQL 1.01 were Andrew Yu and Jolly Chen. Many +others have contributed to the porting, testing, debugging and +enhancement of the code. The original Postgres code, from which +PostgreSQL is derived, was the effort of many graduate students, +undergraduate students, and staff programmers working under the +direction of Professor Michael Stonebraker at the University of +California, Berkeley. +<P> +The original name of the software at Berkeley was Postgres. When SQL +functionality was added in 1995, its name was changed to Postgres95. The +name was changed at the end of 1996 to PostgreSQL. +<P> +<H3><a name="1.2">1.2</a>) What does PostgreSQL run +on?</H3> +<P> +The authors have compiled and tested PostgreSQL on the following +platforms(some of these compiles require gcc 2.7.0): +<UL> +<LI> aix - IBM on AIX 3.2.5 +<LI> alpha - DEC Alpha AXP on OSF/1 2.0 +<LI> BSD44_derived - OSs derived from 4.4-lite BSD (NetBSD, FreeBSD) +<LI> bsdi - BSD/OS 2.0, 2.01, 2.1, 3.0 +<LI> dgux - DG/UX 5.4R3.10 +<LI> hpux - HP PA-RISC on HP-UX 9.0 +<LI> i386_solaris - i386 Solaris +<LI> irix5 - SGI MIPS on IRIX 5.3 +<LI> linux - Intel x86 on Linux 1.2 and Linux ELF + (For non-ELF Linux, see LINUX_ELF below). +<LI> sparc_solaris - SUN SPARC on Solaris 2.4 +<LI> sunos4 - SUN SPARC on SunOS 4.1.3 +<LI> svr4 - Intel x86 on Intel SVR4 +<LI> ultrix4 - DEC MIPS on Ultrix 4.4 +</UL> +The following platforms have known problems/bugs: +<UL> +<LI> nextstep - Motorola MC68K or Intel x86 on NeXTSTEP 3.2 +</UL> +<P> +<H3><a name="1.3">1.3</a>) Where can I get PostgreSQL?</H3> +<P> The primary anonymous ftp site for PostgreSQL is: +<UL> +<LI> <a +href="ftp://ftp.postgreSQL.org/pub">ftp://ftp.postgreSQL.org/pub</a> +</UL> +<P> A mirror site exists at: +<UL> +<LI> <a +href="ftp://postgres95.vnet.net/pub/postgres95">ftp://postgres95.vnet.net/pub/postgres95</a> +<LI> <a +href="ftp://ftp.luga.or.at/pub/postgres95">ftp://ftp.luga.or.at/pub/postgres95</a> +<LI> <a +href="ftp://cal011111.student.utwente.nl/pub/postgres95">ftp://cal011111.student.utwente.nl/pub/postgres95</a> +<LI> <a +href="ftp://ftp.uni-trier.de/pub/database/rdbms/postgres/postgres95">ftp://ftp.uni-trier.de/pub/database/rdbms/postgres/postgres95</a> +<LI> <a +href="ftp://rocker.sch.bme.hu">ftp://rocker.sch.bme.hu</a> +</UL> +<H3><a name="1.4">1.4</a>) What's the copyright on +PostgreSQL?</H3> +<P> +PostgreSQL is subject to the following COPYRIGHT. +<P> +PostgreSQL Data Base Management System +<P> +Copyright (c) 1994-6 Regents of the University of California +<P> +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose, without fee, and without a written +agreement is hereby granted, provided that the above copyright notice +and this paragraph and the following two paragraphs appear in all +copies. +<P> +IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY +FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, +INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS +DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. +<P> +THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER +IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO +OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +MODIFICATIONS. +<P> +<H3><a name="1.5">1.5</a>) Support for PostgreSQL </H3> +<P> +There is no official support for PostgreSQL from the original +maintainers or from University of California, Berkeley. It is +maintained through volunteer effort only. +<P> +The main mailing list is: <a +href="mailto:questions@postgreSQL.org">questions@postgreSQL.org</a>. 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) +<PRE> +<CODE> + subscribe + end +</CODE> +</PRE> +<P> +to <a +href="mailto:questions-request@postgreSQL.org">questions-request@postgreSQL.org</a>. +<P> +There is also a digest list available. To subscribe to this list, send +email to: +<a +href="mailto:questions-digest-request@postgreSQL.org"> +questions-digest-request@postgreSQL.org</a> with a BODY of: +<PRE> +<KBD> + subscribe + end +</KBD> +</PRE> +Digests are sent out to members of this list whenever the main list has +received around 30k of messages. +<P> +There is a bugs mailing list available. To subscribe to this +list, send email to <a +href="mailto:bugs-request@postgreSQL.org">bugs-request@postgreSQL.org</a> +with a BODY of: +<P> +There is also a developers discussion mailing list available. To subscribe to this +list, send email to <a +href="mailto:hackers-request@postgreSQL.org">hackers-request@postgreSQL.org</a> +with a BODY of: +<P> +<PRE> +<KBD> + subscribe + end +</KBD> +</PRE> +<P> +Additional information about PostgreSQL can be found via the PostgreSQL +WWW home page at: +<BLOCKQUOTE> + <a +href="http://postgreSQL.org">http://postgreSQL.org</a> +</BLOCKQUOTE> +<P> +<H3><a name="1.6">1.6</a>) Latest release of PostgreSQL</H3> +<P> +The latest release of PostgreSQL is version 6.0, which was released on +January 31, 1997. 6.1 is scheduled for release soon. For information +about what is new in 6.1, see our TODO list on our WWW page. +<P> +We expect a 7.0 release in several months that will remove time-travel +and reduce by 50% the size of on-disk system columns maintained for each +row in a table. This release will also require a dump and restore. +<P> +<H3><a name="1.7">1.7</a>) Is there a commercial version of PostgreSQL?</H3> +<P> +Illustra Information Technology (a wholly owned subsidiary of Informix +Software, Inc.) sells an object-relational DBMS called Illustra that was +originally based on postgres. Illustra has cosmetic similarities to +PostgreSQL but has more features, is more robust, performs better, and +offers real documentation and support. On the flip side, it costs +money. For more information, contact <a +href="mailto:sales@illustra.com">sales@illustra.com</a> +<P> +<H3><a name="1.8">1.8</a>) What documentation is available for PostgreSQL?</H3> +<P> +A user manual, manual pages, and some small test examples are included +in the distribution. The sql and built-in manual pages are particularly +important. +<P> +The www page contains pointers to an implementation guide and five +papers written about postgres design concepts and features. +<P> +<H3><a name="1.9">1.9</a>) What version of SQL does PostgreSQL use?</H3> +<P> +PostgreSQL supports a subset of SQL-92. It has most of the important +constructs but lacks some of the functionality. The most visible +differences are: +<UL> +<LI> no support for nested subqueries +<LI> no HAVING clause under a GROUP BY +</UL> +<P> +On the other hand, you get to create user-defined types, functions, +inheritance etc. If you're willing to help with PostgreSQL coding, +eventually we can also add the missing features listed above. +<P> +<H3><a name="1.10">1.10</a>) Does PostgreSQL work with databases from +earlier versions of postgres?</H3> +<P> +PostgreSQL v1.09 is compatible with databases created with v1.01. Those +upgrading from 1.0 should read the directions in the +MIGRATION_1.0_TO_1.02 directory. +<P> +Upgrading to 6.0 requires a dump and restore from previous releases. +<P> +Upgrading to 6.1 requires a dump and restore from previous releases. +<P> +Those ugrading from versions earlier than 1.09 must upgrade to 1.09 +first without a dump/reload, then dump the data from 1.09, and then load +it into 6.0 or 6.1. +<P> +<H3><a name="1.11">1.11</a>) How many people use PostgreSQL?</H3> +<P> +Since we don't have any licensing or registration scheme, it's +impossible to tell. We do know hundreds copies of PostgreSQL v1.* have +been downloaded, and that there many hundreds of subscribers to the +mailing lists. +<P> +<HR> +<H2> Section 2: Installation Questions +</H2> +<P> +<H3><a name="2.1">2.1</a>) initdb doesn't run</H3> +<P> +<UL> +<LI> check to see that you have the proper paths set +<LI> check that the 'postgres' user owns all the right files +<LI> ensure that there are files in $PGDATA/files, and that they +are non-empty. If they aren't, then "gmake install" failed for +some reason +</UL> +<P> +<H3><a name="2.2">2.2</a>) when I start up the postmaster, I get + "FindBackend: could not find a backend to execute..." + "postmaster: could not find backend to execute..."</H3> +<P> +You probably do not have the right path set up. The 'postgres' +executable needs to be in your path. +<P> +<H3><a name="2.3">2.3</a>) The system seems to be confused about commas, +decimal points, and date formats.</H3> +<P> +Check your locale configuration. PostgreSQL uses the locale settings of +the user that ran the postmaster process. Set those accordingly for +your operating environment. +<P> +<H3><a name="2.4">2.4</a>) How do I install PostgreSQL somewhere other than +/usr/local/pgsql?</H3> +<P> +You need to edit Makefile.global and change POSTGRESDIR accordingly, or +create a Makefile.custom and define POSTGRESDIR there. +<P> +<H3><a name="2.5">2.5</a>) When I run postmaster, I get a Bad System +Call core dumped message.</H3> +<P> +It could be a variety of problems, but first check to see that you have +system V extensions installed on your kernel. PostgreSQL requires kernel +support for shared memory. +<P> +<H3><a name="2.6">2.6</a>) When I try to start the postmaster, I get +IpcMemoryCreate errors.</H3> +<P> +You either do not have shared memory configured properly in kernel or +you need to enlarge the shared memory available in the kernel. The +exact amount you need depends on your architecture and how many buffers +you configure postmaster to run with. For most systems, with default +buffer sizes, you need a minimum of ~760K. +<P> +<H3><a name="2.7">2.7</a>) I have changed a source file, but a +recompile does not see the change?</H3> +<P> +The Makefiles do not have the proper dependencies for include files. You +have to do a 'make clean' and then another 'make'. +<P> +<HR> +<H2> Section 3: PostgreSQL Features +</H2> - 1.1) What is PostgreSQL? - - PostgreSQL is an enhancement of the POSTGRES database management - system, a next-generation DBMS research prototype. While PostgreSQL - retains the powerful data model and rich data types of POSTGRES, it - replaces the PostQuel query language with an extended subset of SQL. - PostgreSQL is free and the complete source is available. - - PostgreSQL development is being performed by a team of Internet - developers who all subscribe to the PostgreSQL development mailing - list. The current coordinator is Marc G. Fournier - (scrappy@postgreSQL.org). (See below on how to join). This team is now - responsible for all current and future development of PostgreSQL. - - The authors of PostgreSQL 1.01 were Andrew Yu and Jolly Chen. Many - others have contributed to the porting, testing, debugging and - enhancement of the code. The original Postgres code, from which - PostgreSQL is derived, was the effort of many graduate students, - undergraduate students, and staff programmers working under the - direction of Professor Michael Stonebraker at the University of - California, Berkeley. - - The original name of the software at Berkeley was Postgres. When SQL - functionality was added in 1995, its name was changed to Postgres95. - The name was changed at the end of 1996 to PostgreSQL. - - 1.2) What does PostgreSQL run on? - - The authors have compiled and tested PostgreSQL on the following - platforms(some of these compiles require gcc 2.7.0): - * aix - IBM on AIX 3.2.5 - * alpha - DEC Alpha AXP on OSF/1 2.0 - * BSD44_derived - OSs derived from 4.4-lite BSD (NetBSD, FreeBSD) - * bsdi - BSD/OS 2.0, 2.01, 2.1, 3.0 - * dgux - DG/UX 5.4R3.10 - * hpux - HP PA-RISC on HP-UX 9.0 - * i386_solaris - i386 Solaris - * irix5 - SGI MIPS on IRIX 5.3 - * linux - Intel x86 on Linux 1.2 and Linux ELF (For non-ELF Linux, - see LINUX_ELF below). - * sparc_solaris - SUN SPARC on Solaris 2.4 - * sunos4 - SUN SPARC on SunOS 4.1.3 - * svr4 - Intel x86 on Intel SVR4 - * ultrix4 - DEC MIPS on Ultrix 4.4 - - The following platforms have known problems/bugs: - * nextstep - Motorola MC68K or Intel x86 on NeXTSTEP 3.2 - - 1.3) Where can I get PostgreSQL? - - The primary anonymous ftp site for PostgreSQL is: - * ftp://ftp.postgreSQL.org/pub - - A mirror site exists at: - * ftp://postgres95.vnet.net/pub/postgres95 - * ftp://ftp.luga.or.at/pub/postgres95 - * ftp://cal011111.student.utwente.nl/pub/postgres95 - * ftp://ftp.uni-trier.de/pub/database/rdbms/postgres/postgres95 - * ftp://rocker.sch.bme.hu - - 1.4) What's the copyright on PostgreSQL? - - PostgreSQL is subject to the following COPYRIGHT. - - PostgreSQL Data Base Management System - - Copyright (c) 1994-6 Regents of the University of California - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose, without fee, and without a written - agreement is hereby granted, provided that the above copyright notice - and this paragraph and the following two paragraphs appear in all - copies. - - IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY - FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, - INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND - ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE - PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF - CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, - UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - - 1.5) Support for PostgreSQL - - There is no official support for PostgreSQL from the original - maintainers or from University of California, Berkeley. It is - maintained through volunteer 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) - - - subscribe - end - - to questions-request@postgreSQL.org. - - There is also a digest list available. To subscribe to this list, send - email to: questions-digest-request@postgreSQL.org with a BODY of: - - - subscribe - end - - Digests are sent out to members of this list whenever the main list - has received around 30k of messages. - - There is a bugs mailing list available. To subscribe to this list, - send 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: - - - subscribe - end - - Additional information about PostgreSQL can be found via the - PostgreSQL WWW home page at: - - http://postgreSQL.org - - 1.6) Latest release of PostgreSQL - - The latest release of PostgreSQL is version 6.0, which was released on - January 31, 1997. 6.1 is scheduled for release soon. For information - about what is new in 6.1, see our TODO list on our WWW page. - - We expect a 7.0 release in several months that will remove time-travel - and reduce by 50% the size of on-disk system columns maintained for - each row in a table. This release will also require a dump and - restore. - - 1.7) Is there a commercial version of PostgreSQL? - - Illustra Information Technology (a wholly owned subsidiary of Informix - Software, Inc.) sells an object-relational DBMS called Illustra that - was originally based on postgres. Illustra has cosmetic similarities - to PostgreSQL but has more features, is more robust, performs better, - and offers real documentation and support. On the flip side, it costs - money. For more information, contact sales@illustra.com - - 1.8) What documentation is available for PostgreSQL? - - A user manual, manual pages, and some small test examples are included - in the distribution. The sql and built-in manual pages are - particularly important. - - The www page contains pointers to an implementation guide and five - papers written about postgres design concepts and features. - - 1.9) What version of SQL does PostgreSQL use? - - PostgreSQL supports a subset of SQL-92. It has most of the important - constructs but lacks some of the functionality. The most visible - differences are: - * no support for nested subqueries - * no HAVING clause under a GROUP BY - - On the other hand, you get to create user-defined types, functions, - inheritance etc. If you're willing to help with PostgreSQL coding, - eventually we can also add the missing features listed above. - - 1.10) Does PostgreSQL work with databases from earlier versions of postgres? - - PostgreSQL v1.09 is compatible with databases created with v1.01. - Those upgrading from 1.0 should read the directions in the - MIGRATION_1.0_TO_1.02 directory. - - Upgrading to 6.0 requires a dump and restore from previous releases. - - 1.11) How many people use PostgreSQL? - - Since we don't have any licensing or registration scheme, it's - impossible to tell. We do know hundreds copies of PostgreSQL v1.* have - been downloaded, and that there many hundreds of subscribers to the - mailing lists. - - _________________________________________________________________ - -Section 2: Installation Questions - - 2.1) initdb doesn't run - - * check to see that you have the proper paths set - * check that the 'postgres' user owns all the right files - * ensure that there are files in $PGDATA/files, and that they are - non-empty. If they aren't, then "gmake install" failed for some - reason - - 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..." - - You probably do not have the right path set up. The 'postgres' - executable needs to be in your path. - - 2.3) The system seems to be confused about commas, decimal points, and date - formats. - - Check your locale configuration. PostgreSQL uses the locale settings - of the user that ran the postmaster process. Set those accordingly for - your operating environment. - - 2.4) How do I install PostgreSQL somewhere other than /usr/local/pgsql? - - You need to edit Makefile.global and change POSTGRESDIR accordingly, - or create a Makefile.custom and define POSTGRESDIR there. - - 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 - have system V extensions installed on your kernel. PostgreSQL requires - kernel support for shared memory. - - 2.6) I get the error message "obj/fmgr.h: No such file or directory" - - This indicates that you did not generate the file fmgr.h properly. - Something failed in the running of the - src/backend/utils/Gen_fmgrtab.sh script. Check to see the paths used - in that script is appropriate to your system. - - 2.7) When I try to start the postmaster, I get IpcMemoryCreate errors. - - You either do not have shared memory configured properly in kernel or - you need to enlarge the shared memory available in the kernel. The - exact amount you need depends on your architecture and how many - buffers you configure postmaster to run with. For most systems, with - default buffer sizes, you need a minimum of ~760K. - - 2.8) 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. - You have to do a 'make clean' and then another 'make'. - - _________________________________________________________________ - -Section 3: PostgreSQL Features - - 3.1) How do I specify a KEY or other constraints on a column? - - Column constraints are not supported in PostgreSQL. As a consequence, - the system does not check for duplicates. - - Under 6.0, create a unique index on the column. Attempts to create - duplicate of that column will report an error. - - 3.2) Does PostgreSQL support nested subqueries? - - Subqueries are not implemented, but they can be simulated using sql - functions. - - 3.3) How do I define a unique indices? - - PostgreSQL 6.0 supports unique indices. - - 3.4) I've having a lot of problems using rules. - - Currently, the rule system in PostgreSQL is mostly broken. It works - enough to support the view mechanism, but that's about it. Use - PostgreSQL rules at your own peril. - - 3.5) I can't seem to write into the middle of large objects reliably. - - The Inversion large object system in PostgreSQL is also mostly broken. - It works well enough for storing large wads of data and reading them - back out, but the implementation has some underlying problems. Use - PostgreSQL large objects at your own peril. - - 3.6) Does PostgreSQL have a graphical user interface? A report generator? A - embedded query language interface? - - No. No. No. Not in the official distribution at least. Some users have - reported some success at using 'pgbrowse' and 'onyx' as frontends to - PostgreSQL. Several contributions are working on tk based frontend - tools. Ask on the mailing list. - - 3.7) How can I write client applications to PostgreSQL? - - PostgreSQL supports a C-callable library interface called libpq as - well as a Tcl-based library interface called libtcl. - - Others have contributed a perl interface and a WWW gateway to - PostgreSQL. See the PostgreSQL home pages for more details. - - 3.8) How do I prevent other hosts from accessing my PostgreSQL backend? - - Use host-based authentication by modifying the file $PGDATA/pg_hba - accordingly. - - 3.9) How do I set up a pg_group? - - Currently, there is no easy interface to set up user groups. You have - to explicitly insert/update the pg_group table. For example: - - - jolly=> insert into pg_group (groname, grosysid, grolist) - jolly=> values ('posthackers', '1234', '{5443, 8261}'); - INSERT 548224 - jolly=> grant insert on foo to group posthackers; - CHANGE - jolly=> - - The fields in pg_group are: - * groname: the group name. This a char16 and should be purely - alphanumeric. Do not include underscores or other punctuation. - * grosysid: the group id. This is an int4. This should be unique for - each group. - * grolist: the list of pg_user id's that belong in the group. This - is an int4[]. - - 3.10) What is the exact difference between binary cursors and normal cursors? - - Normal cursors return data back in ASCII format. Since data is stored - natively in binary format, the system must do a conversion to produce - the ASCII format. In addition, ASCII formats are often large in size - than binary format. Once the attributes come back in ASCII, often the - client application then has to convert it to a binary format to - manipulate it anyway. - - Binary cursors give you back the data in the native binary - representation. Thus, binary cursors will tend to be a little faster - since there's less overhead of conversion. - - However, ASCII is architectural neutral whereas binary representation - can differ between different machine architecture. Thus, if your - client machine uses a different representation than you server - machine, getting back attributes in binary format is probably not what - you want. Also, if your main purpose is displaying the data in ASCII, - then getting it back in ASCII will save you some effort on the client - side. - - 3.11) Why doesn't the != operator work? - - SQL specifies <> as the inequality operator, and that is what we have - defined for the built-in types. - - In 6.0, != is equivalent to <>. - - 3.12) 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 - handle range searches. A B-tree index only handles range searches in a - single dimension. R-tree's can handle multi-dimensional data. For - example, if a R-tree index can be built on an attribute of type - 'point', the system can more efficient answer queries like select all - points within a bounding rectangle. - - The canonical paper that describes the original R-Tree design is: - - Guttman, A. "R-Trees: A Dynamic Index Structure for Spatial - Searching." Proc of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, - 45-57. - - You can also find this paper in Stonebraker's "Readings in Database - Systems" - - 3.13) What is the maximum size for a tuple? - - Tuples are limited to 8K bytes. Taking into account system attributes - and other overhead, one should stay well shy of 8,000 bytes to be on - the safe side. To use attributes larger than 8K, try using the large - objects interface. - - Tuples do not cross 8k boundaries so a 5k tuple will require 8k of - storage. - - 3.14) 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 - an explicit 'vacuum' call to update the statistics. After statistics - are updated, the optimizer has a better shot at using indices. Note - that the optimizer is limited and does not use indices in some - circumstances (such as OR clauses). - - If the system still does not see the index, it is probably because you - have created an index on a field with the improper *_ops type. For - example, you have created a CHAR(4) field, but have specified a - char_ops index type_class. - - See the create_index manual page for information on what type classes - are available. It must match the field type. - - Postgres does not warn the user when the improper index is created. - - Indexes not used for ORDER BY operations. - - 3.15) Are there ODBC drivers for PostgreSQL? - - There are two ODBC drivers available, PostODBC and OpenLink ODBC. - - For all people being interested in PostODBC, there are now two mailing - lists devoted to the discussion of PostODBC. The mailing lists are: - * postodbc-users@listserv.direct. net - * postodbc-developers@listse rv.direct.net - - these lists are ordinary majordomo mailing lists. You can subscribe by - sending a mail to: - * majordomo@listserv.direct.net - - OpenLink ODBC is currently in beta under Linux. You can get it from - http://www.openlinksw.com/postgres.html. It works with our standard - ODBC client software so you'll have Postgres ODBC available on every - client platform we support (Win, Mac, Unix, VMS). - - We will probably be selling this product to people who need - commercial-quality support, but a freeware version will always be - available. Questions to postgres95@openlink.co.uk. - - 3.16) How do I use postgres for multi-dimensional indexing (> 2 dimensions)? - - Builtin R-Trees can handle polygons and boxes. In theory, R-trees can - be extended to handle higher number of dimensions. In practice, - extending R-trees require a bit of work and we don't currently have - any documentation on how to do it. - - 3.17) How do I do regular expression searches? case-insensitive regexp - searching? - - PostgreSQL supports the SQL LIKE syntax as well as more general - regular expression searching with the ~ operator. The !~ is the - negated regexp operator. ~* and !~* are the case-insensitive regular - expression operators. - - 3.18) I can't access the database as the 'root' user. - - You should not create database users with user id 0(root). They will - be unable to access the database. This is a security precaution - because of the ability of any user to dynamically link object modules - into the database engine. - - 3.19) I experienced a server crash during a vacuum. How do I remove the lock - file? - - If the server crashes during a vacuum command, chances are it will - leave a lock file hanging around. Attempts to re-run the vacuum - command result in - - - WARN:can't create lock file -- another vacuum cleaner running? - - If you are sure that no vacuum is actually running, you can remove the - file called "pg_vlock" in your database directory (which is - $PGDATA/base/<dbName>) - - 3.20) What is the difference between the various character types? - +<P> +<H3><a name="3.1">3.1</a>) How do I specify a KEY or other constraints on a +column?</H3> +<P> +Column constraints are not supported in PostgreSQL. As a consequence, +the system does not check for duplicates. +<P> +Under 6.0, create a unique index on the column. Attempts to create +duplicate of that column will report an error. +<P> +<H3><a name="3.2">3.2</a>) Does PostgreSQL support nested subqueries?</H3> +<P> +Subqueries are not implemented, but they can be simulated using sql +functions. +<P> +<H3><a name="3.3">3.3</a>) How do I define a unique indices?</H3> +<P> +PostgreSQL 6.0 supports unique indices. +<P> +<H3><a name="3.4">3.4</a>) I've having a lot of problems using rules.</H3> +<P> +Currently, the rule system in PostgreSQL is mostly broken. It works +enough to support the view mechanism, but that's about it. Use +PostgreSQL rules at your own peril. +<P> +<H3><a name="3.5">3.5</a>) I can't seem to write into the middle of large +objects reliably.</H3> +<P> +The Inversion large object system in PostgreSQL is also mostly broken. +It works well enough for storing large wads of data and reading them +back out, but the implementation has some underlying problems. Use +PostgreSQL large objects at your own peril. +<P> +<H3><a name="3.6">3.6</a>) Does PostgreSQL have a graphical user interface? +A report generator? A embedded query language interface?</H3> +<P> +No. No. No. Not in the official distribution at least. Some users have +reported some success at using 'pgbrowse' and 'onyx' as frontends to +PostgreSQL. Several contributions are working on tk based frontend +tools. Ask on the mailing list. +<P> +<H3><a name="3.7">3.7</a>) How can I write client applications to PostgreSQL?</H3> +<P> +PostgreSQL supports a C-callable library interface called libpq as well +as a Tcl-based library interface called libtcl. +<P> +Others have contributed a perl interface and a WWW gateway to +PostgreSQL. See the PostgreSQL home pages for more details. +<P> +<H3><a name="3.8">3.8</a>) How do I prevent other hosts from accessing my +PostgreSQL backend?</H3> +<P> +Use host-based authentication by modifying the file $PGDATA/pg_hba +accordingly. +<P> +<H3><a name="3.9">3.9</a>) How do I set up a pg_group?</H3> +<P> +Currently, there is no easy interface to set up user groups. You have to +explicitly insert/update the pg_group table. For example: +<PRE> +<CODE> + jolly=> insert into pg_group (groname, grosysid, grolist) + jolly=> values ('posthackers', '1234', '{5443, 8261}'); + INSERT 548224 + jolly=> grant insert on foo to group posthackers; + CHANGE + jolly=> +</CODE> +</PRE> +<P> + The fields in pg_group are: +<UL> +<LI> groname: the group name. This a char16 and should + be purely alphanumeric. Do not include underscores + or other punctuation. +<LI> grosysid: the group id. This is an int4. + This should be unique for each group. +<LI> grolist: the list of pg_user id's that belong in the group. + This is an int4[]. +</UL> +<P> +<H3><a name="3.10">3.10</a>) What is the exact difference between binary +cursors and normal cursors?</H3> +<P> +Normal cursors return data back in ASCII format. Since data is stored +natively in binary format, the system must do a conversion to produce +the ASCII format. In addition, ASCII formats are often large in size +than binary format. Once the attributes come back in ASCII, often the +client application then has to convert it to a binary format to +manipulate it anyway. +<P> +Binary cursors give you back the data in the native binary +representation. Thus, binary cursors will tend to be a little faster +since there's less overhead of conversion. +<P> +However, ASCII is architectural neutral whereas binary representation +can differ between different machine architecture. Thus, if your client +machine uses a different representation than you server machine, getting +back attributes in binary format is probably not what you want. Also, if +your main purpose is displaying the data in ASCII, then getting it back +in ASCII will save you some effort on the client side. +<P> +<H3><a name="3.11">3.11</a>) Why doesn't the != operator work?</H3> +<P> +SQL specifies <> as the inequality operator, and that is what we +have defined for the built-in types. +<P> +In 6.0, != is equivalent to <>. +<P> +<H3><a name="3.12">3.12</a>) What is a R-tree index and what is it used for?</H3> +<P> +An r-tree index is used for indexing spatial data. A hash index can't +handle range searches. A B-tree index only handles range searches in a +single dimension. R-tree's can handle multi-dimensional data. For +example, if a R-tree index can be built on an attribute of type 'point', +the system can more efficient answer queries like select all points +within a bounding rectangle. +<P> +The canonical paper that describes the original R-Tree design is: +<P> +Guttman, A. "R-Trees: A Dynamic Index Structure for Spatial Searching." +Proc of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57. +<P> +You can also find this paper in Stonebraker's "Readings in Database +Systems" +<P> +<H3><a name="3.13">3.13</a>) What is the maximum size for a tuple?</H3> +<P> +Tuples are limited to 8K bytes. Taking into account system attributes +and other overhead, one should stay well shy of 8,000 bytes to be on the +safe side. To use attributes larger than 8K, try using the large +objects interface. +<P> +Tuples do not cross 8k boundaries so a 5k tuple will require 8k of +storage. +<P> +<H3><a name="3.14">3.14</a>) I defined indices but my queries don't seem +to make use of them. Why?</H3> +<P> +PostgreSQL does not automatically maintain statistics. One has to make +an explicit 'vacuum' call to update the statistics. After statistics +are updated, the optimizer has a better shot at using indices. Note +that the optimizer is limited and does not use indices in some +circumstances (such as OR clauses). +<P> +If the system still does not see the index, it is probably because you +have created an index on a field with the improper *_ops type. For +example, you have created a CHAR(4) field, but have specified a char_ops +index type_class. +<P> +See the create_index manual page for information on what type classes +are available. It must match the field type. +<P> +Postgres does not warn the user when the improper index is created. +<P> +Indexes not used for ORDER BY operations. +<P> +<H3><a name="3.15">3.15</a>) Are there ODBC drivers for PostgreSQL?</H3> +<P> +There are two ODBC drivers available, PostODBC and OpenLink ODBC. +<P> +For all people being interested in PostODBC, there are now two mailing +lists devoted to the discussion of PostODBC. The mailing lists are: +<UL> +<LI> <a +href="mailto:postodbc-users@listserv.direct.net">postodbc-users@listserv.direct. +net</a> +<LI> <a +href="mailto:postodbc-developers@listserv.direct.net">postodbc-developers@listse +rv.direct.net</a> +</UL> +<P> +these lists are ordinary majordomo mailing lists. You can subscribe by +sending a mail to: +<UL> +<LI> <a +href="mailto:majordomo@listserv.direct.net">majordomo@listserv.direct.net</a> +</UL> +<P> +OpenLink ODBC is currently in beta under Linux. You can get it from <a +href="http://www.openlinksw.com/postgres.html"> +http://www.openlinksw.com/postgres.html</a>. It works with our standard +ODBC client software so you'll have Postgres ODBC available on every +client platform we support (Win, Mac, Unix, VMS). +<P> +We will probably be selling this product to people who need +commercial-quality support, but a freeware version will always be +available. Questions to <a +href="mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</a>. +<P> +<H3><a name="3.16">3.16</a>) How do I use postgres for multi-dimensional +indexing (> 2 dimensions)?</H3> +<P> +Builtin R-Trees can handle polygons and boxes. In theory, R-trees can +be extended to handle higher number of dimensions. In practice, +extending R-trees require a bit of work and we don't currently have any +documentation on how to do it. +<P> +<H3><a name="3.17">3.17</a>) How do I do regular expression searches? +case-insensitive regexp searching?</H3> +<P> +PostgreSQL supports the SQL LIKE syntax as well as more general regular +expression searching with the ~ operator. The !~ is the negated regexp +operator. ~* and !~* are the case-insensitive regular expression +operators. +<P> +<H3><a name="3.18">3.18</a>) I can't access the database as the 'root' user.</H3> +<P> +You should not create database users with user id 0(root). They will be +unable to access the database. This is a security precaution because +of the ability of any user to dynamically link object modules into the +database engine. +<P> +<H3><a name="3.19">3.19</a>) I experienced a server crash during a +vacuum. How do I remove the lock file?</H3> +<P> +If the server crashes during a vacuum command, chances are it will leave +a lock file hanging around. Attempts to re-run the vacuum command +result in +<PRE> +<SAMP> + WARN:can't create lock file -- another vacuum cleaner running? +</SAMP> +</PRE> +<P> +If you are sure that no vacuum is actually running, you can remove the +file called "pg_vlock" in your database directory (which is +$PGDATA/base/<dbName>) +<P> +<H3><a name="3.20">3.20</a>) What is the difference between the various +character types?</H3> +<PRE> Type Internal Name Notes -------------------------------------------------- CHAR char 1 character } @@ -592,343 +676,368 @@ CHAR(#) bpchar blank padded to the specified fixed length VARCHAR(#) varchar size specifies maximum length, no padding TEXT text length limited only by maximum tuple length BYTEA bytea variable-length array of bytes +</PRE> +<P> +Remember, you need to use the internal name when creating indexes on +these fields or when doing other internal operations. +<P> +The last four types above are "varlena" types (i.e. the first four bytes +is the length, followed by the data). CHAR(#) and VARCHAR(#) allocate +the maximum number of bytes no matter how much data is stored in the +field. TEXT and BYTEA are the only character types that have variable +length on the disk. +<P> +<H3><a name="3.21">3.21</a>) In a query, how do I detect if a field is NULL?</H3> +<P> +PostgreSQL has two builtin keywords, "isnull" and "notnull" (note no +spaces). Version 1.05 and later and 6.* understand IS NULL and IS NOT +NULL. +<P> +<H3><a name="3.22">3.22</a>) How do I see how the query optimizer is +evaluating my query?</H3> +<P> +Place the word 'EXPLAIN' at the beginning of the query, for example: +<PRE> +<CODE> + EXPLAIN SELECT * FROM table1 WHERE age = 23; +</CODE> +</PRE> +<P> +<H3><a name="3.23">3.23</a>) How do I create a serial field?</H3> +<P> +Postgres does not allow the user to specifiy a user column as type +SERIAL. Instead, you can use each row's oid field as a unique value. +However, if you need to dump and reload the database, you need to be +using postgres version 1.07 or later or 6.* with pgdump's -o option or +COPY's WITH OIDS option to preserver the oids. +<P> +Another valid way of doing this is to create a function: +<PRE> +<CODE> + create table my_oids (f1 int4); + insert into my_oids values (1); + create function new_oid () returns int4 as + 'update my_oids set f1 = f1 + 1; select f1 from my_oids; ' + language 'sql'; +</CODE> +</PRE> +<P> +then: +<PRE> +<CODE> + create table my_stuff (my_key int4, value text); + insert into my_stuff values (new_oid(), 'hello'); +</CODE> +</PRE> +<P> +However, keep in mind there is a race condition here where one server +could do the update, then another one do an update, and they both could +select the same new id. This statement should be performed within a +transaction. +<P> +Sequences are implemented in 6.1 +<P> +<H3><a name="3.24">3.24</a>) How do I create a multi-column index?</H3> +<P> - Remember, you need to use the internal name when creating indexes on - these fields or when doing other internal operations. - - The last four types above are "varlena" types (i.e. the first four - bytes is the length, followed by the data). CHAR(#) and VARCHAR(#) - allocate the maximum number of bytes no matter how much data is stored - in the field. TEXT and BYTEA are the only character types that have - variable length on the disk. - - 3.21) In a query, how do I detect if a field is NULL? - - PostgreSQL has two builtin keywords, "isnull" and "notnull" (note no - spaces). Version 1.05 and later and 6.* understand IS NULL and IS NOT - NULL. - - 3.22) How do I see how the query optimizer is evaluating my query? - - Place the word 'EXPLAIN' at the beginning of the query, for example: - - EXPLAIN SELECT * FROM table1 WHERE age = 23; - - 3.23) How do I create a serial field? - - Postgres does not allow the user to specifiy a user column as type - SERIAL. Instead, you can use each row's oid field as a unique value. - However, if you need to dump and reload the database, you need to be - using postgres version 1.07 or later or 6.* with pgdump's -o option or - COPY's WITH OIDS option to preserver the oids. - - Another valid way of doing this is to create a function: - - create table my_oids (f1 int4); - insert into my_oids values (1); - create function new_oid () returns int4 as - 'update my_oids set f1 = f1 + 1; select f1 from my_oids; ' - language 'sql'; - - then: - - create table my_stuff (my_key int4, value text); - insert into my_stuff values (new_oid(), 'hello'); - - However, keep in mind there is a race condition here where one server - could do the update, then another one do an update, and they both - could select the same new id. This statement should be performed - within a transaction. - - 3.24) How do I create a multi-column index? - - In 6.0, you can not directly create a multi-column index using create - index. You need to define a function which acts on the multiple - columns, then use create index with that function. - - In 6.1, this feature is available. - - 3.25) What are the temp_XXX files in my database directory? - - They are temp_ files generated by the query executor. For example, if - a sort needs to be done to satisfy an ORDER BY, some temp files are - generated as a result of the sort. - - If you have no transactions or sorts running at the time, it is safe - to delete the temp_ files. - - 3.26) Why are my table files not getting any smaller after a delete? - - If you run vacuum in pre-6.0, unused rows will be marked for reuse, - but the file blocks are not released. - - In 6.0, vacuum properly shrinks tables. - - 3.27) Why can't I connect to my database from another machine? - - 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. - - 3.28) I get the error 'default index class unsupported' when creating an - index. How do I do it? - - You probably used: - - create index idx1 on person using btree (name); - - PostgreSQL indexes are extensible, and therefore in pre-6.0, you must - specify a class_type when creating an index. Read the manual page for - create index (called create_index). - - Version 6.0, if you do not specify a class_type, it defaults to the - proper type for the column. - - 3.29) Why does creating an index crash the backend server? - - You have probably defined an incorrect *_ops type class for the field - you are indexing. - - 3.30) How do I specify a decimal constant as a float8, or a string as a text? - Why am I getting poor precision? - - Use the :: operator. It is needed only when the default promotion - rules fail. i.e.: - - - insert into tab1 values (4.23::float8, '2343'::text) - - The default floating-point constant is a float4 in releases prior to - 1.05. Later releases default to float8. - - 3.31) How do I find out what indexes or operations are defined in the - database? - - Run the file pgsql/src/tutorial/syscat.source. It illustrates many of - the 'select's needed to get information out of the database system - tables. - - 3.32) My database is corrupt. I can't do anything. What should I do? - - The 1.02 release has a README file and utility that describes a - possible cause of the problem and a workaround. - - This bug is fixed in 1.02.1. - - 3.33) Createdb, destroydb, createuser,destroyuser don't run. Why? - - Release 1.02 does not have this problem. - - The 1.01 release of PostgreSQL uses a variable called PAGER to filter - the output of SELECT statements. Unfortunately, this PAGER is used - even when the standard output is not a terminal. - - 3.34) Why do statements require an extra character at the end? Why does - 'createuser' return 'unexpected last match in input()'? Why does pg_dump - fail? - - You have compile postgres with flex version 2.5.3. There is bug in - this version of flex. Use flex version 2.5.2 or flex 2.5.4 instead. - There is a doc/README.flex file which will properly patch the flex - 2.5.3 source code. - - 3.35) All my servers crash under concurrent table access. Why? - - This problem can be caused by a kernel that is not configured to - support semaphores. - - 3.36) What tools are available for hooking postgres to Web pages? - - For web integration, PHP/FI is an excellent interface. The URL for - that is http://www.vex.net/php/ - - PHP is great for simple stuff, but for more complex stuff, some still - use the perl interface and CGI.pm. - - An example of using WWW with C to talk to Postgres is can be tried at: - * http://postgreSQL.org/~mlc - - An WWW gatway based on WDB using perl can be downloaded from: - * http://www.eol.ists.ca/~dunlop/wdb -p95 - - 3.37) What is the time-warp feature and how does it relate to vacuum? - - PostgreSQL handles data changes differently than most database - systems. When a row is changed in a table, the original row is marked - with the time it was changed, and a new row is created with the - current data. By default, only current rows are used in a table. If - you specify a date/time after the table name in a FROM clause, you can - access the data that was current at that time, i.e. - - - SELECT * - FROM employees ['July 24, 1996 09:00:00'] - - displays employee rows in the table at the specified time. You can - specify intervals like [date,date], [date,], [,date], or [,]. This - last option accesses all rows that ever existed. - - INSERTed rows get a timestamp too, so rows that were not in the table - at the desired time will not appear. - - Vacuum removes rows that are no longer current. This time-warp feature - is used by the engine for rollback and crash recovery. Expiration - times can be set with purge. - - In 6.0, once a table is vacuumed, the creation time of a row may be - incorrect, causing time-traval to fail. - - The time-travel feature will be removed in 7.0. - - 3.38) How do I tune the database engine for better performance? - - There are two things that can be done. You can use Openlink's option - to disable fsync() by starting the postmaster with a '-o -F' option. - This will prevent fsync()'s from flushing to disk after every - transaction. - - You can also use the postmaster -B option to increase the number of - shared memory buffers shared among the backend processes. If you make - this parameter too high, the process will not start or crash - unexpectedly. Each buffer is 8K and the defualt is 64 buffers. - - 3.39) What debugging features are available in PostgreSQL? - - PostgreSQL has several features that report status information that - can be valuable for debugging purposes. - - First, by compiling with DEBUG defined, 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, whenever you start the postmaster, make sure you send the - standard output and error to a log file, like: - - - cd /usr/local/pgsql - ./bin/postmaster >server.log 2>&1 & - - This will put a server.log file in the top-level PostgreSQL directory. - This file can contain useful information about problems or errors - encountered by the server. Postmaster has a -d option that allows even - more detailed information to be reported. The -d option takes a number - 1-3 that specifies the debug level. The query plans in a verbose debug - file can be formatted using the 'indent' program. (You may need to - remove the '====' lines in 1.* releases.) Be warned that a debug level - greater than one generates large log files in 1.* releases. - - You can actuall 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 - perhaps use a debugger to see what is happening. Because the backend - was not started from the postmaster, it is not running in an identical - environment and locking/backend interaction problems may not be - duplicated. Some operating system can attach to a running backend - directly to diagnose problems. - - The postgres program has a -s, -A, -t options that can be very usefull - for debugging and performance measurements. - - The EXPLAIN command (see this FAQ) allows you to see how PostgreSQL is - iterpreting your query. - - 3.40) What is an oid? What is a tid? - - Oids are Postgres's answer to unique row ids or serial columns. Every - row that is created in Postgres gets a unique oid. All oids generated - by initdb are less than 16384 (from backend/access/transam.h). All - post-initdb (user-created) oids are equal or greater that this. All - these oids are unique not only within a table, or database, but unique - within the entire postgres installation. - - Postgres uses oids in its internal system tables to link rows in - separate tables. These oids can be used to identify specific user rows - and used in joins. It is recommended you use column type oid to store - oid values. See the sql(l) manual page to see the other internal - columns. - - Tids are used to indentify specific physical rows with block and - offset values. Tids change after rows are modified or reloaded. They - are used by index entries to point to physical rows. They can not be - accessed through sql. - - 3.41) What is the meaning of some of the terms used in Postgres? - - Some of the source code and older documentation use terms that have - more common usage. Here are some: - * row, record, tuple - * attribute, field, column - * table, class - * retrieve, select - * replace, update - * append, insert - * oid, serial value - * portal, cursor - * range variable, table name, table alias - - Please let me know if you think of any more. - - 3.42) What is Genetic Query Optimization? - - The GEQO module in PostgreSQL is intended to solve the query - optimization problem of joining many tables by means of a Genetic - Algorithm (GA). It allows the handling of large join queries through - non-exhaustive search. - - For further information see README.GEQO <utesch@aut.tu-freiberg.de>. - - 3.43) I am running Solaris and my dates display wrong. Why? - - Gcc under Solaris has an bug when compiled with optimization level 2. - Edit 'configure', and change -O2 to -O, and recompile. If 'configure' - does not exist in your top level source directory, make the change to - Makefile.global. - - _________________________________________________________________ - -Section 4: Extending PostgreSQL - - 4.1) I wrote a user-defined function and when I run it in psql, it dumps - core. - - 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 - not sending elog NOTICES when the front-end is expecting data, such as - during a type_in() or type_out() functions - - 4.2) I get messages of the type NOTICE:PortalHeapMemoryFree: 0x402251d0 not - in alloc set! - - 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 - will cause your palloc to be a malloc instead of a free. Then, when - the backend pfrees the storage, you get the notice message. - - 4.3) I've written some nifty new types and functions for PostgreSQL. - - Please share them with other PostgreSQL users. Send your extensions to - mailing list, and they will eventually end up in the contrib/ - subdirectory. - - 4.4) How do I write a C function to return a tuple? - - This requires extreme wizardry, so extreme that the authors have not - ever tried it, though in principle it can be done. The short answer is - ... you can't. This capability is forthcoming in the future. - - _________________________________________________________________ - -Section 5: Bugs - - 5.1) How do I make a bug report? - - Check the current FAQ at http://postgreSQL.org - - Also check out our ftp site ftp://ftp.postgreSQL.org/pub to see if - there is a more recent PostgreSQL version. - - You can also fill out the "bug-template" file and send it to: - * bugs@postgreSQL.org - - This is the address of the developers mailing list. +In 6.0, you can not directly create a multi-column index using create +index. You need to define a function which acts on the multiple columns, +then use create index with that function. +<P> +In 6.1, this feature is available. +<P> +<H3><a name="3.25">3.25</a>) What are the temp_XXX files in my database +directory?</H3> +<P> +They are temp_ files generated by the query executor. For example, if a +sort needs to be done to satisfy an ORDER BY, some temp files are +generated as a result of the sort. +<P> +If you have no transactions or sorts running at the time, it is safe to +delete the temp_ files. +<P> +<H3><a name="3.26">3.26</a>) Why are my table files not getting any +smaller after a delete?</H3> +<P> +If you run vacuum in pre-6.0, unused rows will be marked for reuse, but +the file blocks are not released. +<P> +In 6.0, vacuum properly shrinks tables. +<P> +<H3><a name="3.27">3.27</a>) Why can't I connect to my database from +another machine?</H3> +<P> +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. +<P> +<H3><a name="3.28">3.28</a>) I get the error 'default index class +unsupported' when creating an index. How do I do it?</H3> +<P> +You probably used: +<PRE> +<CODE> + create index idx1 on person using btree (name); +</CODE> +</PRE> +<P> +PostgreSQL indexes are extensible, and therefore in pre-6.0, you must +specify a class_type when creating an index. Read the manual page for +create index (called create_index). +<P> +Version 6.0, if you do not specify a class_type, it defaults to the +proper type for the column. +<P> +<H3><a name="3.29">3.29</a>) Why does creating an index crash the +backend server?</H3> +<P> +You have probably defined an incorrect *_ops type class for the field +you are indexing. +<P> +<H3><a name="3.30">3.30</a>) How do I find out what indexes or +operations are defined in the database?</H3> +<P> +Run the file pgsql/src/tutorial/syscat.source. It illustrates many of +the 'select's needed to get information out of the database system +tables. +<P> +<H3><a name="3.31">3.31</a>) Why do statements require an extra character at +the end? Why does 'createuser' return 'unexpected last match in input()'? +Why does pg_dump fail?</H3> +<P> +You have compile postgres with flex version 2.5.3. There is bug in this +version of flex. Use flex version 2.5.2 or flex 2.5.4 instead. There +is a doc/README.flex file which will properly patch the flex 2.5.3 +source code. +<P> +<H3><a name="3.32">3.32</a>) All my servers crash under concurrent table +access. Why?</H3> +<P> +This problem can be caused by a kernel that is not configured to support +semaphores. +<P> +<H3><a name="3.33">3.33</a>) What tools are available for hooking +postgres to Web pages?</H3> +<P> +For web integration, PHP/FI is an excellent interface. The URL for that +is <a href="http://www.vex.net/php/">http://www.vex.net/php/</a> +<P> +PHP is great for simple stuff, but for more complex stuff, some still +use the perl interface and CGI.pm. +<P> +An example of using WWW with C to talk to Postgres is can be tried at: +<UL> +<LI> + <a href="http://postgreSQL.org/%7Emlc">http://postgreSQL.org/~mlc</a> +</UL> +<P> +An WWW gatway based on WDB using perl can be downloaded from: +<UL> +<LI> + <a +href="http://www.eol.ists.ca/~dunlop/wdb-p95">http://www.eol.ists.ca/~dunlop/wdb +-p95</a> +</UL> +<H3><a name="3.34">3.34</a>) What is the time-warp feature and how does +it relate to vacuum?</H3> +<P> +PostgreSQL handles data changes differently than most database systems. +When a row is changed in a table, the original row is marked with the +time it was changed, and a new row is created with the current data. By +default, only current rows are used in a table. If you specify a +date/time after the table name in a FROM clause, you can access the data +that was current at that time, i.e. +<PRE> +<CODE> + SELECT * + FROM employees ['July 24, 1996 09:00:00'] +</CODE> +</PRE> +<P> +displays employee rows in the table at the specified time. You can +specify intervals like [date,date], [date,], [,date], or [,]. This last +option accesses all rows that ever existed. +<P> +INSERTed rows get a timestamp too, so rows that were not in the table at +the desired time will not appear. +<P> +Vacuum removes rows that are no longer current. This time-warp feature +is used by the engine for rollback and crash recovery. Expiration times +can be set with purge. +<P> +In 6.0, once a table is vacuumed, the creation time of a row may be +incorrect, causing time-traval to fail. +<P> +The time-travel feature will be removed in 7.0. +<P> +<H3><a name="3.35">3.35</a>) How do I tune the database engine for +better performance?</H3> +<P> +There are two things that can be done. You can use Openlink's option to +disable fsync() by starting the postmaster with a '-o -F' option. This +will prevent fsync()'s from flushing to disk after every transaction. +<P> +You can also use the postmaster -B option to increase the number of +shared memory buffers shared among the backend processes. If you make +this parameter too high, the process will not start or crash +unexpectedly. Each buffer is 8K and the defualt is 64 buffers. +<P> +<H3><a name="3.36">3.36</a>) What debugging features are available in +PostgreSQL?</H3> +<P> +PostgreSQL has several features that report status information that can +be valuable for debugging purposes. +<P> +First, by compiling with DEBUG defined, many assert()'s monitor the +progress of the backend and halt the program when something unexpected +occurs. +<P> +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: +<PRE> +<KBD> + cd /usr/local/pgsql + ./bin/postmaster >server.log 2>&1 & +</KBD> +</PRE> +<P> +This will put a server.log file in the top-level PostgreSQL directory. +This file can contain useful information about problems or errors +encountered by the server. Postmaster has a -d option that allows even +more detailed information to be reported. The -d option takes a number +1-3 that specifies the debug level. The query plans in a verbose debug +file can be formatted using the 'indent' program. (You may need to +remove the '====' lines in 1.* releases.) Be warned that a debug level +greater than one generates large log files in 1.* releases. +<P> +You can actuall 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 perhaps use a debugger +to see what is happening. Because the backend was not started from the +postmaster, it is not running in an identical environment and +locking/backend interaction problems may not be duplicated. Some +operating system can attach to a running backend directly to diagnose +problems. +<P> +The postgres program has a -s, -A, -t options that can be very usefull +for debugging and performance measurements. +<P> +The EXPLAIN command (see this FAQ) allows you to see how PostgreSQL is +iterpreting your query. +<P> +<H3><a name="3.37">3.37</a>) What is an oid? What is a tid?</H3> +<P> +Oids are Postgres's answer to unique row ids or serial columns. Every +row that is created in Postgres gets a unique oid. All oids generated +by initdb are less than 16384 (from backend/access/transam.h). All +post-initdb (user-created) oids are equal or greater that this. All +these oids are unique not only within a table, or database, but unique +within the entire postgres installation. +<P> +Postgres uses oids in its internal system tables to link rows in +separate tables. These oids can be used to identify specific user rows +and used in joins. It is recommended you use column type oid to store +oid values. See the sql(l) manual page to see the other internal +columns. +<P> +Tids are used to indentify specific physical rows with block and offset +values. Tids change after rows are modified or reloaded. They are used +by index entries to point to physical rows. They can not be accessed +through sql. +<P> +<H3><a name="3.38">3.38</a>) What is the meaning of some of the terms +used in Postgres?</H3> +<P> +Some of the source code and older documentation use terms that have more +common usage. Here are some: +<UL> +<LI> row, record, tuple +<LI> attribute, field, column +<LI> table, class +<LI> retrieve, select +<LI> replace, update +<LI> append, insert +<LI> oid, serial value +<LI> portal, cursor +<LI> range variable, table name, table alias +</UL> +<P> +Please let me know if you think of any more. +<P> +<H3><a name="3.39">3.39</a>) What is Genetic Query Optimization?</H3> +<P> +The GEQO module in PostgreSQL is intended to solve the query +optimization problem of joining many tables by means of a Genetic +Algorithm (GA). It allows the handling of large join queries through +non-exhaustive search. +<P> +For further information see README.GEQO <utesch@aut.tu-freiberg.de>. +<P> +<H3><a name="3.40">3.40</a>) I am running Solaris and my dates +display wrong. Why?</H3> +<P> +There was a bug in 6.0 that caused this problem under Solaris with -O2 +optimization. +Upgrade to 6.1. +<P> +<H3><a name="3.41">3.41</a>) How do I enable more than 32 concurrent +backends?</H3> +<P> +Edit include/storage/sinvaladt.h, and change the value of MaxBackendId. +In the future, we plan to make this a configurable prameter. +<P> +<HR> +<H2> Section 4: Extending PostgreSQL +</H2> +<P> +<H3><a name="4.1">4.1</a>) I wrote a user-defined function and when I run it +in psql, it dumps core.</H3> +<P> +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 +not sending elog NOTICES when the front-end is expecting data, such as +during a type_in() or type_out() functions +<P> +<H3><a name="4.2">4.2</a>) I get messages of the type + NOTICE:PortalHeapMemoryFree: 0x402251d0 not in alloc set!</H3> +<P> +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 +will cause your palloc to be a malloc instead of a free. Then, when the +backend pfrees the storage, you get the notice message. +<P> +<H3><a name="4.3">4.3</a>) I've written some nifty new types and functions for +PostgreSQL.</H3> +<P> +Please share them with other PostgreSQL users. Send your extensions to +mailing list, and they will eventually end up in the contrib/ +subdirectory. +<P> +<H3><a name="4.4">4.4</a>) How do I write a C function to return a tuple?</H3> +<P> +This requires extreme wizardry, so extreme that the authors have not +ever tried it, though in principle it can be done. The short answer is +... you can't. This capability is forthcoming in the future. +<P> +<HR> +<H2> Section 5: Bugs +</H2> +<P> +<H3><a name="5.1">5.1</a>) How do I make a bug report?</H3> +<P> +Check the current FAQ at <a +href="http://postgreSQL.org">http://postgreSQL.org</a> +<P> +Also check out our ftp site <a +href="ftp://ftp.postgreSQL.org/pub">ftp://ftp.postgreSQL.org/pub</a> to +see if there is a more recent PostgreSQL version. +<P> +You can also fill out the "bug-template" file and send it to: +<UL> +<LI> <a href="mailto:bugs@postgreSQL.org">bugs@postgreSQL.org</a> +</UL> +<P> +This is the address of the developers mailing list. +</BODY> +</HTML> diff --git a/doc/TODO b/doc/TODO index 519d7903f7c139a904ea35972c0c54091aecb7c4..4257a9cb26321572d826d543efa1a9d3c49a7419 100644 --- a/doc/TODO +++ b/doc/TODO @@ -122,6 +122,8 @@ add pg_type attribute to identify types that need length (bpchar, varchar) add UNIQUE capability to non-btree indexes make pg_dumpall preserve table ownership, not just database ownership make large objects have their own reltype +make number of backends a config parameter, storage/sinvaladt.h:MaxBackendId +certain indexes will not shrink, i.e. oid indexes with many inserts PERFORMANCE -----------