diff options
author | Bruce Momjian | 2009-04-07 21:20:49 +0000 |
---|---|---|
committer | Bruce Momjian | 2009-04-07 21:20:49 +0000 |
commit | bf4497cc61ff1616afe74c0140dcc850857e0dc8 (patch) | |
tree | 1da8067ce7bf07a501d99cb7c467a4290f72ab10 /doc/src/FAQ/FAQ.html | |
parent | 2762e5555ca3c850c76b70d5b174de6937e2a866 (diff) |
Remove FAQ and FAQ_DEV ASCII and HTML files from CVS; now on the wiki.
Per-language files kept for transator usage.
Diffstat (limited to 'doc/src/FAQ/FAQ.html')
-rw-r--r-- | doc/src/FAQ/FAQ.html | 1139 |
1 files changed, 0 insertions, 1139 deletions
diff --git a/doc/src/FAQ/FAQ.html b/doc/src/FAQ/FAQ.html deleted file mode 100644 index 2a5ad212106..00000000000 --- a/doc/src/FAQ/FAQ.html +++ /dev/null @@ -1,1139 +0,0 @@ - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<HTML> - <HEAD> - <META name="generator" content="HTML Tidy, see www.w3.org"> - <META http-equiv="Content-Type" content="text/html; charset=US-ASCII"> - <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: Tue Sep 23 16:19:49 EDT 2008</P> - - <P>Current maintainer: Bruce Momjian (<A href= - "mailto:bruce@momjian.us">bruce@momjian.us</A>) - </P> - - <P>The most recent version of this document can be viewed at <A href= - "http://www.postgresql.org/files/documentation/faqs/FAQ.html"> - http://www.postgresql.org/files/documentation/faqs/FAQ.html</A>.</P> - - <P>Platform-specific questions are answered at <A href= - "http://www.postgresql.org/docs/faq/"> - http://www.postgresql.org/docs/faq/</A>.</P> - <HR> - - <H2 align="center">General Questions</H2> - <A href="#item1.1">1.1</A>) What is PostgreSQL? How is it pronounced? - What is Postgres?<BR> - <A href="#item1.2">1.2</A>) Who controls PostgreSQL?<BR> - <A href="#item1.3">1.3</A>) What is the copyright of PostgreSQL?<BR> - <A href="#item1.4">1.4</A>) What platforms does PostgreSQL support?<BR> - <A href="#item1.5">1.5</A>) Where can I get PostgreSQL?<BR> - <A href="#item1.6">1.6</A>) What is the most recent release?<BR> - <A href="#item1.7">1.7</A>) Where can I get support?<BR> - <A href="#item1.8">1.8</A>) How do I submit a bug report?<BR> - <A href="#item1.9">1.9</A>) How do I find out about known bugs or - missing features?<BR> - <A href="#item1.10">1.10</A>) What documentation is available?<BR> - <A href="#item1.11">1.11</A>) How can I learn <SMALL>SQL</SMALL>?<BR> - <A href="#item1.12">1.12</A>) How do I submit a patch or join the - development team?<BR> - <A href="#item1.13">1.13</A>) How does PostgreSQL compare to other - <SMALL>DBMS</SMALL>s? Can PostgreSQL be embedded?<BR> - <A href="#item1.14">1.14</A>) Will PostgreSQL handle recent daylight - saving time changes in various countries?<BR> - <A href="#item1.15">1.15</A>) How do I unsubscribe from the - PostgreSQL email lists? How do I avoid receiving duplicate emails?<BR> - - - <H2 align="center">User Client Questions</H2> - <A href="#item2.1">2.1</A>) What interfaces are available for - PostgreSQL?<BR> - <A href="#item2.2">2.2</A>) What tools are available for using - PostgreSQL with Web pages?<BR> - <A href="#item2.3">2.3</A>) Does PostgreSQL have a graphical user - interface?<BR> - - - <H2 align="center">Administrative Questions</H2> - <A href="#item3.1">3.1</A>) How do I install PostgreSQL somewhere other - than <I>/usr/local/pgsql</I>?<BR> - <A href="#item3.2">3.2</A>) How do I control connections from other - hosts?<BR> - <A href="#item3.3">3.3</A>) How do I tune the database engine for - better performance?<BR> - <A href="#item3.4">3.4</A>) What debugging features are available?<BR> - <A href="#item3.5">3.5</A>) Why do I get <I>"Sorry, too many - clients"</I> when trying to connect?<BR> - <A href="#item3.6">3.6</A> What is the upgrade process for PostgreSQL?<BR> - <A href="#item3.7">3.7</A>) What computer hardware should I use?<BR> - - - <H2 align="center">Operational Questions</H2> - <A href="#item4.1">4.1</A>) How do I <SMALL>SELECT</SMALL> only the - first few rows of a query? A random row?<BR> - <A href="#item4.2">4.2</A>) How do I find out what tables, indexes, - databases, and users are defined? How do I see the queries used - by <I>psql</I> to display them?<BR> - <A href="#item4.3">4.3</A>) How do you change a column's data type?<BR> - <A href="#item4.4">4.4</A>) What is the maximum size for a row, a - table, and a database?<BR> - <A href="#item4.5">4.5</A>) How much database disk space is required - to store data from a typical text file?<BR> - <A href="#item4.6">4.6</A>) Why are my queries slow? Why don't they - use my indexes?<BR> - <A href="#item4.7">4.7</A>) How do I see how the query optimizer is - evaluating my query?<BR> - <A href="#item4.8">4.8</A>) How do I perform regular expression - searches and case-insensitive regular expression searches? How do I - use an index for case-insensitive searches?<BR> - <A href="#item4.9">4.9</A>) In a query, how do I detect if a field - is <SMALL>NULL</SMALL>? How do I concatenate possible <SMALL>NULL</SMALL>s? - How can I sort on whether a field is <SMALL> NULL</SMALL> or not?<BR> - <A href="#item4.10">4.10</A>) What is the difference between the - various character types?<BR> - <A href="#item4.11.1">4.11.1</A>) How do I create a - serial/auto-incrementing field?<BR> - <A href="#item4.11.2">4.11.2</A>) How do I get the value of a - <SMALL>SERIAL</SMALL> insert?<BR> - <A href="#item4.11.3">4.11.3</A>) Doesn't <I>currval()</I> - lead to a race condition with other users?<BR> - <A href="#item4.11.4">4.11.4</A>) Why aren't my sequence numbers - reused on transaction abort? Why are there gaps in the numbering of - my sequence/SERIAL column?<BR> - <A href="#item4.12">4.12</A>) What is an <SMALL>OID</SMALL>? What is a - <SMALL>CTID</SMALL>?<BR> - <A href="#item4.13">4.13</A>) Why do I get the error <I>"ERROR: Memory - exhausted in AllocSetAlloc()"</I>?<BR> - <A href="#item4.14">4.14</A>) How do I tell what PostgreSQL version I - am running?<BR> - <A href="#item4.15">4.15</A>) How do I create a column that will - default to the current time?<BR> - <A href="#item4.16">4.16</A>) How do I perform an outer join?<BR> - <A href="#item4.17">4.17</A>) How do I perform queries using multiple - databases?<BR> - <A href="#item4.18">4.18</A>) How do I return multiple rows or columns - from a function?<BR> - <A href="#item4.19">4.19</A>) Why do I get "relation with OID ##### - does not exist" errors when accessing temporary tables in PL/PgSQL - functions?<BR> - <A href="#item4.20">4.20</A>) What replication solutions are available?<BR> - <A href="#item4.21">4.21</A>) Why are my table and column names not - recognized in my query? Why is capitalization not preserved?<BR> - - - <HR> - - <H2 align="center">General Questions</H2> - - <H3 id="item1.1">1.1) What is PostgreSQL? How is it pronounced? What is Postgres?</H3> - - <P>PostgreSQL is pronounced <I>Post-Gres-Q-L</I>. (For those curious - about how to say "PostgreSQL", an <a - href="http://www.postgresql.org/files/postgresql.mp3">audio file</a> - is available.)</P> - - <P>PostgreSQL is an object-relational database system that has the - features of traditional commercial database systems with - enhancements to be found in next-generation <SMALL>DBMS</SMALL> - systems. PostgreSQL is free and the complete source code is - available.</P> - - <P>PostgreSQL development is performed by a team of mostly volunteer - developers spread throughout the world and communicating via the - Internet. It is a community project and is not controlled by any - company. To get involved, see the developer's FAQ at <A href= - "http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> - http://www.postgresql.org/docs/faqs.FAQ_DEV.html</A> - </P> - - <P>Postgres is a widely-used nickname for PostgreSQL. It was the - original name of the project at Berkeley and is strongly preferred - over other nicknames. If you find 'PostgreSQL' hard to pronounce, call - it 'Postgres' instead.</P> - - <H3 id="item1.2">1.2) Who controls PostgreSQL?<BR></H3> - - <P>If you are looking for a PostgreSQL gatekeeper, central committee, - or controlling company, give up --- there isn't one. We do have a - core committee and CVS committers, but these groups are more for - administrative purposes than control. The project is directed by - the community of developers and users, which anyone can join. All - you need to do is subscribe to the mailing lists and participate in the - discussions. (See the <a href="http://wiki.postgresql.org/wiki/Developer_FAQ"> - Developer's FAQ</A> for information on how to get involved in PostgreSQL - development.)</P> - - <H3 id="item1.3">1.3) What is the copyright of - PostgreSQL?</H3> - - <P>PostgreSQL is distributed under the classic BSD license. Basically, - it allows users to do anything they want with the code, including - reselling binaries without the source code. The only restriction is - that you not hold us legally liable for problems with the software. - There is also the requirement that this copyright appear in all copies - of the software. Here is the actual BSD license we use:</P> - - <P>PostgreSQL Data Base Management System</P> - - <P>Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group - Portions Copyright (c) 1994-1996 Regents of the University of California</P> - - <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> - - <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> - - <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 id="item1.4">1.4) What platforms does PostgreSQL support?</H3> - - <P>In general, any modern Unix-compatible platform should be able to - run PostgreSQL. The platforms that had received explicit testing at - the time of release are listed in the installation - instructions.</P> - - <P>PostgreSQL also runs natively on Microsoft Windows NT-based operating - systems like Win2000 SP4, WinXP, and Win2003. A prepackaged installer is - available at <a href= "http://www.postgresql.org/download/windows"> - http://www.postgresql.org/download/windows</a>. MSDOS-based versions - of Windows (Win95, Win98, WinMe) can run PostgreSQL using Cygwin.</P> - - <p>There is also a Novell Netware 6 port at - <a href="http://developer.novell.com/wiki/index.php/Postgresql">http://developer.novell.com/wiki/index.php/Postgresql</a>, - and an OS/2 (eComStation) version at <a href= - "http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F"> - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a>.</p> - - <H3 id="item1.5">1.5) Where can I get PostgreSQL?</H3> - - <P>Via web browser, use <a href="http://www.postgresql.org/ftp/"> - http://www.postgresql.org/ftp/</a>, and via ftp, use - <A href="ftp://ftp.postgresql.org/pub/"> - ftp://ftp.postgresql.org/pub/</A>.</P> - - <H3 id="item1.6">1.6) What is the most recent release?</H3> - - <P>The latest release of PostgreSQL is version 8.3.3.</P> - - <P>We plan to have a major release every year, with minor releases - every few months.</P> - - <H3 id="item1.7">1.7) Where can I get support?</H3> - - <P>The PostgreSQL community provides assistance to many of its users - via email. The main web site to subscribe to the email lists is - <a href="http://www.postgresql.org/community/lists/"> - http://www.postgresql.org/community/lists/</a>. The <I>general</I> - or <I>bugs</I> lists are a good place to start.</P> - - <P>The major IRC channel is <I>#postgresql</I> on Freenode - (<I>irc.freenode.net</I>). To connect you can use the Unix - program <CODE>irc -c '#postgresql' "$USER" irc.freenode.net</CODE> - or use any other IRC clients. A Spanish one also exists - on the same network, (<I>#postgresql-es</I>), a French one, - (<I>#postgresqlfr</I>), and a Brazilian one, (<I>#postgresql-br</I>). - There is also a PostgreSQL channel on EFNet.</P> - - <P>A list of commercial support companies is available at <A href= - "http://www.postgresql.org/support/professional_support"> - http://www.postgresql.org/support/professional_support</A>.</P> - - <H3 id="item1.8">1.8) How do I submit a bug report?</H3> - - <P>Visit the PostgreSQL bug form at <A href= - "http://www.postgresql.org/support/submitbug"> - http://www.postgresql.org/support/submitbug</A>. - 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> - - <P>Bugs submitted using the bug form or posted to any PostgreSQL mailing - list typically generates one of the following replies:</P> - <ul> - <li>It is not a bug, and why</li> - <li>It is a known bug and is already on the - <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A> list</li> - <li>The bug has been fixed in the current release</li> - <li>The bug has been fixed but is not packaged yet in an official - release</li> - <li>A request is made for more detailed information: - <ul> - <li>Operating system</li> - <li>PostgreSQL version</li> - <li>Reproducible test case</li> - <li>Debugging information</li> - <li>Debugger backtrace output</li> - </ul> - </li> - <li>The bug is new. The following might happen: - <ul> - <li>A patch is created and will be included in the next major - or minor release</li> - <li>The bug cannot be fixed immediately and is added - to the <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A> - list</li> - </ul> - </li> - </ul> - - <H3 id="item1.9">1.9) How do I find out about known bugs or - missing features?</H3> - - <P>PostgreSQL supports an extended subset of <SMALL>SQL:2003</SMALL>. - See our <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A> - list for known bugs, missing features, and future plans.</P> - - <P>A feature request usually results in one of the following - replies:</P> - <ul> - <li>The feature is already on the - <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A> - list</li> - <li>The feature is not desired because: - <ul> - <li>It duplicates existing functionality that already - follows the SQL standard</li> - <li>The feature would increase code complexity but add little - benefit</li> - <li>The feature would be insecure or unreliable</li> - </ul> - </li> - <li>The new feature is added to the - <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A> list</li> - </ul> - - <P>PostgreSQL does not use a bug tracking system because we find - it more efficient to respond directly to email and keep the - <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A> - list up-to-date. In practice, bugs don't last very long in the - software, and bugs that affect a large number of users are fixed - rapidly. The only place to find all changes, improvements, and - fixes in a PostgreSQL release is to read the - <a href="http://www.postgresql.org/developer/sourcecode/">CVS</a> - log messages. Even the release notes do not list every change - made to the software.</P> - - <H3 id="item1.10">1.10) What documentation is available?</H3> - - <P>PostgreSQL includes extensive documentation, including a large - manual, manual pages, and some test examples. See the <I>/doc</I> - directory. You can also browse the manuals online at <A href= - "http://www.postgresql.org/docs">http://www.postgresql.org/docs</A>. - </P> - - <P>There are two PostgreSQL books available online at <A href= - "http://www.postgresql.org/docs/books/awbook.html">http://www.postgresql.org/docs/books/awbook.html</A> - and <A href= - "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>. - There are a number of PostgreSQL books available for purchase. One - of the most popular ones is by Korry Douglas. A list of book reviews - can be found at <A href= - "http://www.postgresql.org/docs/books/">http://www.postgresql.org/docs/books/</A>. - There is also a collection of PostgreSQL technical articles at <A - href= - "http://wiki.postgresql.org/wiki/Community_Generated_Articles%2C_Guides%2C_and_Documentation">http://wiki.postgresql.org/wiki/Community_Generated_Articles%2C_Guides%2C_and_Documentation</A>.</P> - - <P>The command line client program <I>psql</I> has some \d commands to show - information about types, operators, functions, aggregates, etc. - use \? to - display the available commands.</P> - - <P>Our web site contains even more documentation.</P> - - <H3 id="item1.11">1.11) How can I learn - <SMALL>SQL</SMALL>?</H3> - - <P>First, consider the PostgreSQL-specific books mentioned above. - Many of our users also like <I>The Practical SQL Handbook</I>, - Bowman, Judith S., et al., Addison-Wesley. Others like <I>The - Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P> - - <P>There are also many nice tutorials available online: - <UL> - <LI> <A href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</A> - </LI> - <LI> - <A href="http://sqlcourse.com/">http://sqlcourse.com</A> - </LI> - <LI> - <A href="http://www.w3schools.com/sql/default.asp">http://www.w3schools.com/sql/default.asp</A> - </LI> - <LI><A href= - "http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html</A> - </LI> - <LI><A href= - "http://sqlzoo.net">http://sqlzoo.net</A> - </LI> - </UL> - - <H3 id="item1.12">1.12) How do I submit a patch or join the development - team?</H3> - - <P>See the <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> - Developer's FAQ</A>.</P> - - <H3 id="item1.13">1.13) How does PostgreSQL compare to other - <SMALL>DBMS</SMALL>s? Can PostgreSQL be embedded?</H3> - - <P>There are several ways of measuring software: features, - performance, reliability, support, and price.</P> - - <DL> - <DT><B>Features</B></DT> - - <DD>PostgreSQL has most features present in large commercial - <SMALL>DBMS</SMALL>s, like transactions, subselects, triggers, - views, foreign key referential integrity, and sophisticated - locking. We have some features they do not have, like - user-defined types, inheritance, rules, and multi-version - concurrency control to reduce lock contention.<BR> - <BR> - </DD> - - <DT><B>Performance</B></DT> - - <DD>PostgreSQL's performance is comparable to other commercial and - open source databases. It is faster for some things, slower for - others. Our performance is usually +/-10% compared to other databases. - <BR> - </DD> - - <DT><B>Reliability</B></DT> - - <DD>We realize that a <SMALL>DBMS</SMALL> must be reliable, or it - is worthless. We strive to release well-tested, stable code that - has a minimum of bugs. Each release has at least one month of - beta testing, and our release history shows that we can provide - stable, solid releases that are ready for production use. We - believe we compare favorably to other database software in this - area.<BR> - <BR> - </DD> - - <DT><B>Support</B></DT> - - <DD>Our mailing lists provide contact with a large group of developers - and users to help resolve any problems encountered. While we cannot - guarantee a fix, commercial <SMALL>DBMS</SMALL>s do not always - supply a fix either. Direct access to developers, the user - community, manuals, and the source code often make PostgreSQL - support superior to other <SMALL>DBMS</SMALL>s. There is - commercial per-incident support available for those who need it. - (See <A href="#item1.7">FAQ section 1.7</A>.)<BR> - <BR> - </DD> - - <DT><B>Price</B></DT> - - <DD>We are free for all use, both commercial and non-commercial. - You can add our code to your product with no limitations, except - those outlined in our BSD-style license stated above.<BR> - <BR> - </DD> - </DL> - - <P>PostgreSQL is designed as a client/server architecture, which - requires separate processes for each client and server, and various - helper processes. Many embedded architectures can support such - requirements. However, if your embedded architecture requires the - database server to run inside the application process, you cannot use - Postgres and should select a lighter-weight database solution.</P> - - <H3 id="item1.14">1.14) Will PostgreSQL handle recent daylight - saving time changes in various countries?</H3> - - <P>USA daylight saving time changes are included in PostgreSQL release - 8.0.[4+], and all later major releases, e.g. 8.1. Canada and Western - Australia changes are included in 8.0.[10+], 8.1.[6+], and all later - major releases. PostgreSQL releases prior to 8.0 use the operating - system's timezone database for daylight saving information.</P> - - <H3 id="item1.15">1.15) How do I unsubscribe from the - PostgreSQL email lists? How do I avoid receiving duplicate emails?</H3> - - <P>The PostgreSQL <a - href="http://mail.postgresql.org/mj/mj_wwwusr/domain=postgresql.org?user=&passw=&func=login">Majordomo</a> - page allows subscribing or unsubscribing from any of the PostgreSQL - email lists. (You might need to have your Majordomo password emailed - to you to log in.)</P> - - <P>All PostgreSQL email lists are configured so a group reply goes to - the email list <I>and</I> the original email author. This is done so - users receive the quickest possible email replies. If you would prefer - not to receive duplicate email from the list in cases where you already - receive an email directly, check <I>eliminatecc</I> from the Majordomo - <I>Change Settings</I> page. You can also prevent yourself from - receiving copies of emails you post to the lists by unchecking - <I>selfcopy</I>.</P> - - - <HR> - - <H2 align="center">User Client Questions</H2> - - <H3 id="item2.1">2.1) What interfaces are available for - PostgreSQL?</H3> - - <P>The PostgreSQL install includes only the <SMALL>C</SMALL> and embedded - <SMALL>C</SMALL> interfaces. All other interfaces are independent projects - that are downloaded separately; being separate allows them to have their - own release schedule and development teams.</P> - - <P>Some programming languages like <SMALL>PHP</SMALL> include an - interface to PostgreSQL. Interfaces for languages like Perl, - <SMALL>TCL</SMALL>, Python, and many others are available at - <a href="http://pgfoundry.org">http://pgfoundry.org</A>.</P> - - <H3 id="item2.2">2.2) What tools are available for using - PostgreSQL with Web pages?</H3> - - <P>A nice introduction to Database-backed Web pages can be seen at: - <A href="http://www.webreview.com">http://www.webreview.com</A></P> - - <P>For Web integration, PHP (<A - href="http://www.php.net">http://www.php.net</A>) is an excellent - interface.</P> - - <P>For complex cases, many use the Perl and DBD::Pg with CGI.pm or - mod_perl.</P> - - <H3 id="item2.3">2.3) Does PostgreSQL have a graphical user - interface?</H3> - - <P>There are a large number of GUI Tools that are available for PostgreSQL - from both commercial and open source developers. A detailed list can be - found in the <A href="http://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools"> - Community Guide to PostgreSQL GUI Tools</A>.</P> - - <HR> - - - <H2 align="center">Administrative Questions</H2> - - <H3 id="item3.1">3.1) How do I install PostgreSQL somewhere - other than <I>/usr/local/pgsql</I>?</H3> - - <P>Specify the <I>--prefix</I> option when running - <I>configure</I>.</P> - - <H3 id="item3.2">3.2) How do I control connections from other - hosts?</H3> - - <P>By default, PostgreSQL only allows connections from the local - machine using Unix domain sockets or TCP/IP connections. Other - machines will not be able to connect unless you modify - <I>listen_addresses</I> in the <I>postgresql.conf</I> file, enable - host-based authentication by modifying the - <I>$PGDATA/pg_hba.conf</I> file, and restart the database server.</P> - - <H3 id="item3.3">3.3) How do I tune the database engine for - better performance?</H3> - - <P>There are three major areas for potential performance - improvement:</P> - - <DL> - <DT><B>Query Changes</B></DT> - - <DD>This involves modifying queries to obtain better - performance: - <ul> - <li>Creation of indexes, including expression and partial - indexes</li> - <li>Use of COPY instead of multiple <SMALL>INSERT</SMALL>s</li> - <li>Grouping of multiple statements into a single transaction to - reduce commit overhead</li> - <li>Use of <SMALL>CLUSTER</SMALL> when retrieving many rows from an - index</li> - <li>Use of <SMALL>LIMIT</SMALL> for returning a subset of a query's - output</li> - <li>Use of Prepared queries</li> - <li>Use of <SMALL>ANALYZE</SMALL> to maintain accurate optimizer - statistics</li> - <li>Regular use of <SMALL>VACUUM</SMALL> or <I>pg_autovacuum</I></li> - <li>Dropping of indexes during large data changes</li> - </ul><BR> - <BR> - </DD> - - <DT><B>Server Configuration</B></DT> - - <DD>A number of <I>postgresql.conf</I> settings affect performance. - For more details, see <a href= - "http://www.postgresql.org/docs/current/static/runtime-config.html"> - Administration Guide/Server Run-time Environment/Run-time - Configuration</a> for a full listing, and for commentary see <a - href="http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html"> - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</a> - and <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html"> - http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</a>. - <BR> - <BR> - </DD> - - <DT><B>Hardware Selection</B></DT> - - <DD>The effect of hardware on performance is detailed in - <a href="http://www.powerpostgresql.com/PerfList/"> - http://www.powerpostgresql.com/PerfList/</a> and <a - href="http://momjian.us/main/writings/pgsql/hw_performance/index.html"> - http://momjian.us/main/writings/pgsql/hw_performance/index.html</a>. - <BR> - <BR> - </DD> - </DL> - - <H3 id="item3.4">3.4) What debugging features are - available?</H3> - - <P>There are many <CODE>log_*</CODE> server configuration - variables at <a - href="http://www.postgresql.org/docs/current/interactive/runtime-config-logging.html">http://www.postgresql.org/docs/current/interactive/runtime-config-logging.html</a> - that enable printing of query and process statistics which - can be very useful for debugging and performance measurements.</P> - - <H3 id="item3.5">3.5) Why do I get <I>"Sorry, too many - clients"</I> when trying to connect?</H3> - - <P>You have reached the default limit of 100 database sessions. You - need to increase the server's limit on how many - concurrent backend processes it can start by changing the - <I>max_connections</I> value in <I>postgresql.conf</I> and - restarting the server.</P> - - <H3 id="item3.6">3.6) What is the upgrade process for PostgreSQL?</H3> - - <P>See <a - href="http://www.postgresql.org/support/versioning">http://www.postgresql.org/support/versioning</a> - for a general discussion about upgrading, and <a href= - "http://www.postgresql.org/docs/current/static/install-upgrading.html"> - http://www.postgresql.org/docs/current/static/install-upgrading.html</a> - for specific instructions.</P> - - <H3 id="item3.7">3.7) What computer hardware should I use?</H3> - - <P>Because PC hardware is mostly compatible, people tend to believe that - all PC hardware is of equal quality. It is not. ECC RAM, SCSI, and - quality motherboards are more reliable and have better performance than - less expensive hardware. PostgreSQL will run on almost any hardware, - but if reliability and performance are important it is wise to - research your hardware options thoroughly. A disk controller with a - battery-backed cache is also useful. Our email lists can be used - to discuss hardware options and tradeoffs.</P> - - <HR> - - <H2 align="center">Operational Questions</H2> - - <H3 id="item4.1">4.1) How do I <SMALL>SELECT</SMALL> only the - first few rows of a query? A random row?</H3> - - <P>To retrieve only a few rows, if you know at the number of rows - needed at the time of the <SMALL>SELECT</SMALL> use - <SMALL>LIMIT</SMALL> . If an index matches the <SMALL>ORDER - BY</SMALL> it is possible the entire query does not have to be - executed. If you don't know the number of rows at - <SMALL>SELECT</SMALL> time, use a cursor and - <SMALL>FETCH</SMALL>.</P> - - <P>To <SMALL>SELECT</SMALL> a random row, use:</P> -<PRE> - SELECT col - FROM tab - ORDER BY random() - LIMIT 1; -</PRE> - - <H3 id="item4.2">4.2) How do I find out what tables, indexes, - databases, and users are defined? How do I see the queries used - by <I>psql</I> to display them?</H3> - - <P>Use the \dt command to see tables in <I>psql</I>. For a complete list of - commands inside psql you can use \?. Alternatively you can read the source - code for <I>psql</I> in file <I>pgsql/src/bin/psql/describe.c</I>, it - contains <SMALL>SQL</SMALL> commands that generate the output for - <I>psql</I>'s backslash commands. You can also start <I>psql</I> with the - <I>-E</I> option so it will print out the queries it uses to execute the - commands you give. PostgreSQL also provides an <SMALL>SQL</SMALL> compliant - INFORMATION SCHEMA interface you can query to get information about the - database.</P> - - <P>There are also system tables beginning with <I>pg_</I> that describe - these too.</P> - - <P>Use <I>psql -l</I> will list all databases.</P> - - <P>Also try the file <I>pgsql/src/tutorial/syscat.source</I>. It - illustrates many of the <SMALL>SELECT</SMALL>s needed to get - information from the database system tables.</P> - - <H3 id="item4.3">4.3) How do you change a column's data type?</H3> - - <P>Changing the data type of a column can be done easily in 8.0 - and later with <SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>.</P> - - <P>In earlier releases, do this:</P> -<PRE> - BEGIN; - ALTER TABLE tab ADD COLUMN new_col <i>new_data_type</i>; - UPDATE tab SET new_col = CAST(old_col AS <i>new_data_type</i>); - ALTER TABLE tab DROP COLUMN old_col; - COMMIT; -</PRE> - <P>You might then want to do <I>VACUUM FULL tab</I> to reclaim the - disk space used by the expired rows.</P> - - <H3 id="item4.4">4.4) What is the maximum size for a row, a - table, and a database?</H3> - - <P>These are the limits:</P> -<BLOCKQUOTE> -<TABLE> -<TR><TD>Maximum size for a database?</TD><TD>unlimited (32 TB databases -exist)</TD></TR> -<TR><TD>Maximum size for a table?</TD><TD>32 TB</TD></TR> -<TR><TD>Maximum size for a row?</TD><TD>400 GB</TD></TR> -<TR><TD>Maximum size for a field?</TD><TD>1 GB</TD></TR> -<TR><TD>Maximum number of rows in a table?</TD><TD>unlimited</TD></TR> -<TR><TD>Maximum number of columns in a table?</TD><TD>250-1600 depending -on column types</TD></TR> -<TR><TD>Maximum number of indexes on a -table?</TD><TD>unlimited</TD></TR> -</TABLE> -</BLOCKQUOTE> - - <P>Of course, these are not actually unlimited, but limited to - available disk space and memory/swap space. Performance may suffer - when these values get unusually large.</P> - - <P>The maximum table size of 32 TB does not require large file - support from the operating system. Large tables are stored as - multiple 1 GB files so file system size limits are not - important.</P> - - <P>The maximum table size, row size, and maximum number of columns - can be quadrupled by increasing the default block size to 32k. The - maximum table size can also be increased using table partitioning.</P> - - <P>One limitation is that indexes can not be created on columns - longer than about 2,000 characters. Fortunately, such indexes are - rarely needed. Uniqueness is best guaranteed by a function index - of an MD5 hash of the long column, and full text indexing - allows for searching of words within the column.</P> - - <H3 id="item4.5">4.5) How much database disk space is required - to store data from a typical text file?</H3> - - <P>A PostgreSQL database may require up to five times the disk - space to store data from a text file.</P> - - <P>As an example, consider a file of 100,000 lines with an integer - and text description on each line. Suppose the text string - avergages twenty bytes in length. The flat file would be 2.8 MB. - The size of the PostgreSQL database file containing this data can - be estimated as 5.2 MB:</P> -<PRE> - 24 bytes: each row header (approximate) - 24 bytes: one int field and one text field - + 4 bytes: pointer on page to tuple - ---------------------------------------- - 52 bytes per row - - The data page size in PostgreSQL is 8192 bytes (8 KB), so: - - 8192 bytes per page - ------------------- = 158 rows per database page (rounded down) - 52 bytes per row - - 100000 data rows - -------------------- = 633 database pages (rounded up) - 158 rows per page - -633 database pages * 8192 bytes per page = 5,185,536 bytes (5.2 MB) -</PRE> - - <P>Indexes do not require as much overhead, but do contain the data - that is being indexed, so they can be large also.</P> - - <P><SMALL>NULL</SMALL>s are stored as bitmaps, so they - use very little space.</P> - - <H3 id="item4.6">4.6) Why are my queries slow? Why don't they - use my indexes?</H3> - - <P>Indexes are not used by every query. Indexes are used only if the - table is larger than a minimum size, and the query selects only a - small percentage of the rows in the table. This is because the random - disk access caused by an index scan can be slower than a straight read - through the table, or sequential scan. </P> - - <P>To determine if an index should be used, PostgreSQL must have - statistics about the table. These statistics are collected using - <SMALL>VACUUM ANALYZE</SMALL>, or simply <SMALL>ANALYZE</SMALL>. - Using statistics, the optimizer knows how many rows are in the - table, and can better determine if indexes should be used. - Statistics are also valuable in determining optimal join order and - join methods. Statistics collection should be performed - periodically as the contents of the table change.</P> - - <P>Indexes are normally not used for <SMALL>ORDER BY</SMALL> or to - perform joins. A sequential scan followed by an explicit sort is - usually faster than an index scan of a large table. - However, <SMALL>LIMIT</SMALL> combined with <SMALL>ORDER BY</SMALL> - often will use an index because only a small portion of the table - is returned.</P> - - <P>If you believe the optimizer is incorrect in choosing a - sequential scan, use <CODE>SET enable_seqscan TO 'off'</CODE> and - run query again to see if an index scan is indeed faster.</P> - - <P>When using wild-card operators such as <SMALL>LIKE</SMALL> or - <I>~</I>, indexes can only be used in certain circumstances:</P> - <UL> - <LI>The beginning of the search string must be anchored to the start - of the string, i.e. - <UL> - <LI><SMALL>LIKE</SMALL> patterns must not start with <I>%</I>.</LI> - <LI><I>~</I> (regular expression) patterns must start with - <I>^</I>.</LI> - </UL></LI> - <LI>The search string can not start with a character class, - e.g. [a-e].</LI> - <LI>Case-insensitive searches such as <SMALL>ILIKE</SMALL> and - <I>~*</I> do not utilize indexes. Instead, use expression - indexes, which are described in section <a href="#item4.8">4.8</a>.</LI> - <LI>The default <I>C</I> locale must be used during - <i>initdb</i> because it is not possible to know the next-greatest - character in a non-C locale. You can create a special - <CODE>text_pattern_ops</CODE> index for such cases that work only - for <SMALL>LIKE</SMALL> indexing. It is also possible to use - full text indexing for word searches. - </LI> - </UL> - - <H3 id="item4.7">4.7) How do I see how the query optimizer is - evaluating my query?</H3> - - <P>See the <SMALL>EXPLAIN</SMALL> manual page.</P> - - <H3 id="item4.8">4.8) How do I perform regular expression - searches and case-insensitive regular expression searches? How do I - use an index for case-insensitive searches?</H3> - - <P>The <I>~</I> operator does regular expression matching, and - <I>~*</I> does case-insensitive regular expression matching. The - case-insensitive variant of <SMALL>LIKE</SMALL> is called - <SMALL>ILIKE</SMALL>.</P> - - <P>Case-insensitive equality comparisons are normally expressed - as:</P> -<PRE> - SELECT * - FROM tab - WHERE lower(col) = 'abc'; -</PRE> - This will not use an standard index. However, if you create an - expression index, it will be used: -<PRE> - CREATE INDEX tabindex ON tab (lower(col)); -</PRE> - <P>If the above index is created as <SMALL>UNIQUE</SMALL>, though - the column can store upper and lowercase characters, it can not have - identical values that differ only in case. To force a particular - case to be stored in the column, use a <SMALL>CHECK</SMALL> - constraint or a trigger.</P> - - <H3 id="item4.9">4.9) In a query, how do I detect if a field - is <SMALL>NULL</SMALL>? How do I concatenate possible <SMALL>NULL</SMALL>s? - How can I sort on whether a field is <SMALL> NULL</SMALL> or not?</H3> - - <P>You test the column with <SMALL>IS NULL</SMALL> and <SMALL>IS - NOT NULL</SMALL>, like this:</P> - -<PRE> - SELECT * - FROM tab - WHERE col IS NULL; -</PRE> - - <P>To concatentate with possible <SMALL>NULL</SMALL>s, use <I>COALESCE()</I>, - like this:</P> -<PRE> - SELECT COALESCE(col1, '') || COALESCE(col2, '') - FROM tab -</PRE> - - <P>To sort by the <SMALL>NULL</SMALL> status, use the <SMALL>IS NULL</SMALL> - and <SMALL>IS NOT NULL</SMALL> modifiers in your <SMALL>ORDER BY</SMALL> clause. - Things that are <I>true</I> will sort higher than things that are <I>false</I>, - so the following will put NULL entries at the top of the resulting list:</P> - -<PRE> - SELECT * - FROM tab - ORDER BY (col IS NOT NULL) -</PRE> - - <H3 id="item4.10">4.10) What is the difference between the - various character types?</H3> -<BLOCKQUOTE> -<TABLE> -<TR><TH>Type</TH><TH>Internal Name</TH><TH>Notes</TH></TR> -<TR><TD>VARCHAR(n)</TD><TD>varchar</TD><TD>size specifies maximum -length, no padding</TD></TR> -<TR><TD>CHAR(n)</TD><TD>bpchar</TD><TD>blank padded to the specified -fixed length</TD></TR> -<TR><TD>TEXT</TD><TD>text</TD><TD>no specific upper limit on -length</TD></TR> -<TR><TD>BYTEA</TD><TD>bytea</TD><TD>variable-length byte array -(null-byte safe)</TD></TR> -<TR><TD>"char"</TD><TD>char</TD><TD>one character</TD></TR> -</TABLE> -</BLOCKQUOTE> - - <P>You will see the internal name when examining system catalogs - and in some error messages.</P> - - <P>The first four types above are "varlena" types (i.e., the first - four bytes on disk are the length, followed by the data). Thus the - actual space used is slightly greater than the declared size. - However, long values are also subject to compression, so the space - on disk might also be less than expected.</P> - - <SMALL>VARCHAR(n)</SMALL> is best when storing variable-length - strings and it limits how long a string can be. <SMALL>TEXT</SMALL> - is for strings of unlimited length, with a maximum of one gigabyte. - <P><SMALL>CHAR(n)</SMALL> is for storing strings that are all the - same length. <SMALL>CHAR(n)</SMALL> pads with blanks to the specified - length, while <SMALL>VARCHAR(n)</SMALL> only stores the characters - supplied. <SMALL>BYTEA</SMALL> is for storing binary data, - particularly values that include <SMALL>NULL</SMALL> bytes. All the - types described here have similar performance characteristics.</P> - - <H3 id="item4.11.1">4.11.1) How do I create a - serial/auto-incrementing field?</H3> - - <P>PostgreSQL supports a <SMALL>SERIAL</SMALL> data type. It - auto-creates a sequence. For example, this:</P> -<PRE> - CREATE TABLE person ( - id SERIAL, - name TEXT - ); -</PRE> - - is automatically translated into this: - -<PRE> - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); -</PRE> - - <P>Automatically created sequence are named - <<I>table</I>>_<<I>serialcolumn</I>>_<I>seq</I>, where - <I>table</I> and <I>serialcolumn</I> are the names of the table and - <SMALL>SERIAL</SMALL> column, respectively. See the - <I>create_sequence</I> manual page for more information about - sequences.</P> - - <H3 id="item4.11.2">4.11.2) How do I get the value of a - <SMALL>SERIAL</SMALL> insert?</H3> - - <P>The simplest way is to retrieve the assigned <SMALL>SERIAL</SMALL> - value with <SMALL>RETURNING</SMALL>. Using the example table in <A - href="#item4.11.1">4.11.1</A>, it would look like this:</P> - -<PRE> - INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id; -</PRE> - - You can also call <I>nextval()</I> and use that value in the - <SMALL>INSERT</SMALL>, or call <I>currval()</I> <I>after</I> the - <SMALL>INSERT</SMALL>. - - <H3 id="item4.11.3">4.11.3) Doesn't <I>currval()</I> - lead to a race condition with other users?</H3> - - <P>No. <I>currval()</I> returns the current value assigned by your - session, not by all sessions.</P> - - <H3 id="item4.11.4">4.11.4) Why aren't my sequence numbers - reused on transaction abort? Why are there gaps in the numbering of - my sequence/SERIAL column?</H3> - - <P>To improve concurrency, sequence values are given out to running - transactions as needed and are not locked until the transaction - completes. This causes gaps in numbering from aborted - transactions.</P> - - <H3 id="item4.12">4.12) What is an <SMALL>OID</SMALL>? What is - a <SMALL>CTID</SMALL>?</H3> - - <P>If a table is created <SMALL>WITH OIDS</SMALL>, each row - gets a unique a <SMALL>OID</SMALL>. O<SMALL>ID</SMALL>s are - automatically assigned unique 4-byte integers that are unique - across the entire installation. However, they overflow at 4 - billion, and then the O<SMALL>ID</SMALL>s start being duplicated. - PostgreSQL uses <SMALL>OID</SMALL>s to link its internal system - tables together.</P> - - <P>To uniquely number rows in user tables, it is best to use - <SMALL>SERIAL</SMALL> rather than O<SMALL>ID</SMALL>s because - <SMALL>SERIAL</SMALL> sequences are unique only within a single - table. and are therefore less likely to overflow. - <SMALL>SERIAL8</SMALL> is available for storing eight-byte sequence - values.</P> - - <P>C<SMALL>TID</SMALL>s are used to identify specific physical rows - with block and offset values. C<SMALL>TID</SMALL>s change after rows - are modified or reloaded. They are used by index entries to point - to physical rows.</P> - - <H3 id="item4.13">4.13) Why do I get the error <I>"ERROR: - Memory exhausted in AllocSetAlloc()"</I>?</H3> - - <P>You probably have run out of virtual memory on your system, - or your kernel has a low limit for certain resources. Try this - before starting the server:</P> -<PRE> - ulimit -d 262144 - limit datasize 256m -</PRE> - - Depending on your shell, only one of these may succeed, but it will - set your process data segment limit much higher and perhaps allow - the query to complete. This command applies to the current process, - and all subprocesses created after the command is run. If you are - having a problem with the <SMALL>SQL</SMALL> client because the - backend is returning too much data, try it before starting the - client. - - <H3 id="item4.14">4.14) How do I tell what PostgreSQL version - I am running?</H3> - - <P>From <I>psql</I>, type <CODE>SELECT version();</CODE></P> - - <H3 id="item4.15">4.15) How do I create a column that will - default to the current time?</H3> - - <P>Use <I>CURRENT_TIMESTAMP</I>:</P> -<PRE> - CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -</PRE> - - <H3 id="item4.16">4.16) How do I perform an outer join?</H3> - - <P>PostgreSQL supports outer joins using the SQL standard syntax. - Here are two examples:</P> -<PRE> - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); -</PRE> - or -<PRE> - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); -</PRE> - - <P>These identical queries join t1.col to t2.col, and also return - any unjoined rows in t1 (those with no match in t2). A - <SMALL>RIGHT</SMALL> join would add unjoined rows of t2. A - <SMALL>FULL</SMALL> join would return the matched rows plus all - unjoined rows from t1 and t2. The word <SMALL>OUTER</SMALL> is - optional and is assumed in <SMALL>LEFT</SMALL>, - <SMALL>RIGHT</SMALL>, and <SMALL>FULL</SMALL> joins. Ordinary joins - are called <SMALL>INNER</SMALL> joins.</P> - - <H3 id="item4.17">4.17) How do I perform queries using - multiple databases?</H3> - - <P>There is no way to query a database other than the current one. - Because PostgreSQL loads database-specific system catalogs, it is - uncertain how a cross-database query should even behave.</P> - - <P><I>contrib/dblink</I> allows cross-database queries using - function calls. Of course, a client can also make simultaneous - connections to different databases and merge the results on the - client side.</P> - - <H3 id="item4.18">4.18) How do I return multiple rows or - columns from a function?</H3> - - <P>It is easy using set-returning functions, - <a href="http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL/pgSQL_functions"> - http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL/pgSQL_functions</a>.</P> - - <H3 id="item4.19">4.19) Why do I get "relation with OID ##### - does not exist" errors when accessing temporary tables in PL/PgSQL - functions?</H3> - - <P>In PostgreSQL versions < 8.3, PL/PgSQL caches function scripts, and - an unfortunate side effect is that if a PL/PgSQL function accesses a - temporary table, and that table is later dropped and recreated, and - the function called again, the function will fail because the cached - function contents still point to the old temporary table. The solution - is to use <SMALL>EXECUTE</SMALL> for temporary table access in - PL/PgSQL. This will cause the query to be reparsed every time.</P> - - <P>This problem does not occur in PostgreSQL 8.3 and later.</P> - - <H3 id="item4.20">4.20) What replication solutions are available? - </H3> - - <P>Though "replication" is a single term, there are several technologies - for doing replication, with advantages and disadvantages for each.</P> - - <P>Master/slave replication allows a single master to receive read/write - queries, while slaves can only accept read/<SMALL>SELECT</SMALL> - queries. The most popular freely available master-slave PostgreSQL - replication solution is <A - href="http://main.slony.info/"> - Slony-I</A>.</P> - - <P>Multi-master replication allows read/write queries to be sent to - multiple replicated computers. This capability also has a severe impact - on performance due to the need to synchronize changes between servers. - <A href="http://pgfoundry.org/projects/pgcluster/">PGCluster</a> is the - most popular such solution freely available for PostgreSQL.</P> - - <P>There are also commercial and hardware-based replication solutions - available supporting a variety of replication models.</P> - - <H3 id="item4.21">4.21) Why are my table and column names not - recognized in my query? Why is capitalization not preserved?</H3> - - <P>The most common cause of unrecognized names is the use of - double-quotes around table or column names during table creation. - When double-quotes are used, table and column names (called - identifiers) are stored <a - href="http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS"> - case-sensitive</a>, meaning you must use double-quotes when - referencing the names in a query. Some interfaces, like pgAdmin, - automatically double-quote identifiers during table creation. - So, for identifiers to be recognized, you must either: - <UL> - <LI>Avoid double-quoting identifiers when creating tables</LI> - <LI>Use only lowercase characters in identifiers</LI> - <LI>Double-quote identifiers when referencing them in queries</LI> - </UL> - - </BODY> -</HTML> |