summaryrefslogtreecommitdiff
path: root/doc/src/FAQ
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/FAQ')
-rw-r--r--doc/src/FAQ/FAQ.html1349
-rw-r--r--doc/src/FAQ/FAQ_DEV.html840
-rw-r--r--doc/src/FAQ/FAQ_german.html1136
-rw-r--r--doc/src/FAQ/FAQ_japanese.html1418
-rw-r--r--doc/src/FAQ/FAQ_polish.html1448
-rw-r--r--doc/src/FAQ/FAQ_russian.html1387
6 files changed, 0 insertions, 7578 deletions
diff --git a/doc/src/FAQ/FAQ.html b/doc/src/FAQ/FAQ.html
deleted file mode 100644
index 32762e38ea2..00000000000
--- a/doc/src/FAQ/FAQ.html
+++ /dev/null
@@ -1,1349 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD html 4.01 transitional//EN">
-
-<HTML>
- <!-- DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN" -->
- <!-- HTML -->
-
- <HEAD>
- <META name="generator" content="HTML Tidy, see www.w3.org">
-
- <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 Jun 11 06:36:10 EDT 2002</P>
-
- <P>Current maintainer: Bruce Momjian (<A href=
- "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
- </P>
-
- <P>The most recent version of this document can be viewed at <A
- href=
- "http://www.Postgresql.org/docs/faq-english.html">http://www.PostgreSQL.org/docs/faq-english.html</A>.</P>
-
- <P>Platform-specific questions are answered at <A href=
- "http://www.PostgreSQL.org/users-lounge/docs/faq.html">http://www.PostgreSQL.org/users-lounge/docs/faq.html</A>.</P>
- <HR>
-
- <H2 align="center">General Questions</H2>
- <A href="#1.1">1.1</A>) What is PostgreSQL? How is it
- pronounced?<BR>
- <A href="#1.2">1.2</A>) What is the copyright on PostgreSQL?<BR>
- <A href="#1.3">1.3</A>) What Unix platforms does PostgreSQL run
- on?<BR>
- <A href="#1.4">1.4</A>) What non-Unix ports are available?<BR>
- <A href="#1.5">1.5</A>) Where can I get PostgreSQL?<BR>
- <A href="#1.6">1.6</A>) Where can I get support?<BR>
- <A href="#1.7">1.7</A>) What is the latest release?<BR>
- <A href="#1.8">1.8</A>) What documentation is available?<BR>
- <A href="#1.9">1.9</A>) How do I find out about known bugs or
- missing features?<BR>
- <A href="#1.10">1.10</A>) How can I learn <SMALL>SQL</SMALL>?<BR>
- <A href="#1.11">1.11</A>) Is PostgreSQL Y2K compliant?<BR>
- <A href="#1.12">1.12</A>) How do I join the development team?<BR>
- <A href="#1.13">1.13</A>) How do I submit a bug report?<BR>
- <A href="#1.14">1.14</A>) How does PostgreSQL compare to other
- <SMALL>DBMS</SMALL>s?<BR>
- <A href="#1.15">1.15</A>) How can I financially assist
- PostgreSQL?<BR>
-
-
- <H2 align="center">User Client Questions</H2>
- <A href="#2.1">2.1</A>) Are there <SMALL>ODBC</SMALL> drivers for
- PostgreSQL?<BR>
- <A href="#2.2">2.2</A>) What tools are available for using
- PostgreSQL with Web pages?<BR>
- <A href="#2.3">2.3</A>) Does PostgreSQL have a graphical user
- interface? A report generator? An embedded query language
- interface?<BR>
- <A href="#2.4">2.4</A>) What languages are available to
- communicate with PostgreSQL?<BR>
-
-
- <H2 align="center">Administrative Questions</H2>
- <A href="#3.1">3.1</A>) How do I install PostgreSQL somewhere other
- than <I>/usr/local/pgsql</I>?<BR>
- <A href="#3.2">3.2</A>) When I start <I>postmaster</I>, I get a
- <I>Bad System Call</I> or core dumped message. Why?<BR>
- <A href="#3.3">3.3</A>) When I try to start <I>postmaster</I>, I
- get <I>IpcMemoryCreate</I> errors. Why?<BR>
- <A href="#3.4">3.4</A>) When I try to start <I>postmaster</I>, I
- get <I>IpcSemaphoreCreate</I> errors. Why?<BR>
- <A href="#3.5">3.5</A>) How do I control connections from other
- hosts?<BR>
- <A href="#3.6">3.6</A>) How do I tune the database engine for
- better performance?<BR>
- <A href="#3.7">3.7</A>) What debugging features are available?<BR>
- <A href="#3.8">3.8</A>) Why do I get <I>"Sorry, too many
- clients"</I> when trying to connect?<BR>
- <A href="#3.9">3.9</A>) What are the <I>pg_sorttempNNN.NN</I>
- files in my database directory?<BR>
-
-
- <H2 align="center">Operational Questions</H2>
- <A href="#4.1">4.1</A>) What is the difference between binary
- cursors and normal cursors?<BR>
- <A href="#4.2">4.2</A>) How do I <SMALL>SELECT</SMALL> only the
- first few rows of a query?<BR>
- <A href="#4.3">4.3</A>) How do I get a list of tables or other
- things I can see in <I>psql</I>?<BR>
- <A href="#4.4">4.4</A>) How do you remove a column from a
- table?<BR>
- <A href="#4.5">4.5</A>) What is the maximum size for a row, a
- table, and a database?<BR>
- <A href="#4.6">4.6</A>) How much database disk space is required
- to store data from a typical text file?<BR>
- <A href="#4.7">4.7</A>) How do I find out what tables, indexes,
- databases, and users are defined?<BR>
- <A href="#4.8">4.8</A>) My queries are slow or don't make use of
- the indexes. Why?<BR>
- <A href="#4.9">4.9</A>) How do I see how the query optimizer is
- evaluating my query?<BR>
- <A href="#4.10">4.10</A>) What is an R-tree index?<BR>
- <A href="#4.11">4.11</A>) What is the Genetic Query Optimizer?<BR>
- <A href="#4.12">4.12</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="#4.13">4.13</A>) In a query, how do I detect if a field
- is <SMALL>NULL</SMALL>?<BR>
- <A href="#4.14">4.14</A>) What is the difference between the
- various character types?<BR>
- <A href="#4.15.1">4.15.1</A>) How do I create a
- serial/auto-incrementing field?<BR>
- <A href="#4.15.2">4.15.2</A>) How do I get the value of a
- <SMALL>SERIAL</SMALL> insert?<BR>
- <A href="#4.15.3">4.15.3</A>) Don't <I>currval()</I> and
- <I>nextval()</I> lead to a race condition with other users?<BR>
- <A href="#4.15.4">4.15.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="#4.16">4.16</A>) What is an <SMALL>OID</SMALL>? What is a
- <SMALL>TID</SMALL>?<BR>
- <A href="#4.17">4.17</A>) What is the meaning of some of the terms
- used in PostgreSQL?<BR>
- <A href="#4.18">4.18</A>) Why do I get the error <I>"ERROR: Memory
- exhausted in AllocSetAlloc()"</I>?<BR>
- <A href="#4.19">4.19</A>) How do I tell what PostgreSQL version I
- am running?<BR>
- <A href="#4.20">4.20</A>) Why does my large-object operations get
- <I>"invalid large obj descriptor"</I>?<BR>
- <A href="#4.21">4.21</A>) How do I create a column that will
- default to the current time?<BR>
- <A href="#4.22">4.22</A>) Why are my subqueries using
- <CODE><SMALL>IN</SMALL></CODE> so slow?<BR>
- <A href="#4.23">4.23</A>) How do I perform an outer join?<BR>
- <A href="#4.24">4.24</A>) How do I perform queries using multiple
- databases?<BR>
- <A href="#4.25">4.25</A>) How do I return multiple rows or columns
- from a function?<BR>
- <A href="#4.26">4.26</A>) Why can't I reliably create/drop
- temporary tables in PL/PgSQL functions?<BR>
-
-
- <H2 align="center">Extending PostgreSQL</H2>
- <A href="#5.1">5.1</A>) I wrote a user-defined function. When I run
- it in <I>psql</I>, why does it dump core?<BR>
- <A href="#5.2">5.2</A>) How can I contribute some nifty new types
- and functions to PostgreSQL?<BR>
- <A href="#5.3">5.3</A>) How do I write a C function to return a
- tuple?<BR>
- <A href="#5.4">5.4</A>) I have changed a source file. Why does the
- recompile not see the change?<BR>
-
- <HR>
-
- <H2 align="center">General Questions</H2>
-
- <H4><A name="1.1">1.1</A>) What is PostgreSQL?</H4>
-
- <P>PostgreSQL is pronounced <I>Post-Gres-Q-L</I>.</P>
-
- <P>PostgreSQL is an enhancement of the POSTGRES database management
- system, a next-generation <SMALL>DBMS</SMALL> 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 <SMALL>SQL</SMALL>. PostgreSQL is free and the
- complete source is available.</P>
-
- <P>PostgreSQL development is 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
- development of PostgreSQL.</P>
-
- <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>
-
- <P>The original name of the software at Berkeley was Postgres. When
- <SMALL>SQL</SMALL> functionality was added in 1995, its name was
- changed to Postgres95. The name was changed at the end of 1996 to
- PostgreSQL.</P>
-
- <H4><A name="1.2">1.2</A>) What is the copyright on
- PostgreSQL?</H4>
-
- <P>PostgreSQL is subject to the following COPYRIGHT:</P>
-
- <P>PostgreSQL Data Base Management System</P>
-
- <P>Portions copyright (c) 1996-2002, PostgreSQL Global Development
- Group Portions Copyright (c) 1994-6 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>
-
- <P>The above is the BSD license, the classic open-source license.
- It has no restrictions on how the source code may be used. We like
- it and have no intention of changing it.</P>
-
- <H4><A name="1.3">1.3</A>) What Unix platforms does PostgreSQL run
- on?</H4>
-
- <P>In general, a 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>
-
- <H4><A name="1.4">1.4</A>) What non-Unix ports are available?</H4>
-
- <P><STRONG>Client</STRONG></P>
-
- <P>It is possible to compile the <I>libpq</I> C library, psql, and
- other interfaces and binaries to run on MS Windows platforms. In
- this case, the client is running on MS Windows, and communicates
- via TCP/IP to a server running on one of our supported Unix
- platforms. A file <I>win31.mak</I> is included in the distribution
- for making a Win32 <I>libpq</I> library and <I>psql</I>. PostgreSQL
- also communicates with <SMALL>ODBC</SMALL> clients.</P>
-
- <P><STRONG>Server</STRONG></P>
-
- <P>The database server can run on Windows NT and Win2k using
- Cygwin, the Cygnus Unix/NT porting library. See
- <I>pgsql/doc/FAQ_MSWIN</I> in the distribution or the <A href=
- "http://www.postgresql.org/docs/faq-mswin.html">MS Windows FAQ</A>
- on our web site. We have no plan to do a native port to any
- Microsoft platform.</P>
-
- <H4><A name="1.5">1.5</A>) Where can I get PostgreSQL?</H4>
-
- <P>The primary anonymous ftp site for PostgreSQL is <A href=
- "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>.
- For mirror sites, see our main web site.</P>
-
- <H4><A name="1.6">1.6</A>) Where can I get support?</H4>
-
- <P>The main mailing list is: <A href=
- "mailto:pgsql-general@PostgreSQL.org">pgsql-general@PostgreSQL.org</A>.
- It is available for discussion of matters pertaining to PostgreSQL.
- To subscribe, send mail with the following lines in the body (not
- the subject line):</P>
-<PRE>
- subscribe
- end
-</PRE>
-
- <P>to <A href=
- "mailto:pgsql-general-request@PostgreSQL.org">pgsql-general-request@PostgreSQL.org</A>.</P>
-
- <P>There is also a digest list available. To subscribe to this
- list, send email to: <A href=
- "mailto:pgsql-general-digest-request@PostgreSQL.org">pgsql-general-digest-request@PostgreSQL.org</A>
- with a body of:</P>
-<PRE>
- subscribe
- end
-</PRE>
- Digests are sent out to members of this list whenever the main list
- has received around 30k of messages.
-
- <P>The bugs mailing list is available. To subscribe to this list,
- send email to <A href=
- "mailto:pgsql-bugs-request@PostgreSQL.org">pgsql-bugs-request@PostgreSQL.org</A>
- with a body of:</P>
-<PRE>
- subscribe
- end
-</PRE>
- There is also a developers discussion mailing list available. To
- subscribe to this list, send email to <A href=
- "mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</A>
- with a body of:
-<PRE>
- subscribe
- end
-</PRE>
-
- <P>Additional mailing lists and information about PostgreSQL can be
- found via the PostgreSQL WWW home page at:</P>
-
- <BLOCKQUOTE>
- <A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A>
- </BLOCKQUOTE>
-
- <P>There is also an IRC channel on EFNet, channel
- <I>#PostgreSQL</I>. I use the Unix command <CODE>irc -c
- '#PostgreSQL' "$USER" irc.phoenix.net.</CODE></P>
-
- <P>A list of commercial support companies is available at <A href=
- "http://www.postgresql.org/users-lounge/commercial-support.html">http://www.postgresql.org/users-lounge/commercial-support.html</A>.</P>
-
- <H4><A name="1.7">1.7</A>) What is the latest release?</H4>
-
- <P>The latest release of PostgreSQL is version 7.2.1.</P>
-
- <P>We plan to have major releases every four months.</P>
-
- <H4><A name="1.8">1.8</A>) What documentation is available?</H4>
-
- <P>Several manuals, manual pages, and some small test examples are
- included in the distribution. See the <I>/doc</I> directory. You
- can also browse the manual online at <A href=
- "http://www.PostgreSQL.org/users-lounge/docs/">http://www.PostgreSQL.org/users-lounge/docs/</A>.</P>
-
- <P>There are two PostgreSQL books available online at <A href=
- "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
- and <A href=
- "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>.
- There is a list of PostgreSQL books available for purchase at <A
- href=
- "http://www.postgresql.org/books/">http://www.postgresql.org/books/</A>.
- There is also a collection of PostgreSQL technical articles at <A
- href=
- "http://techdocs.postgresql.org/">http://techdocs.postgresql.org/</A>.</P>
-
- <P><I>psql</I> has some nice \d commands to show information about
- types, operators, functions, aggregates, etc.</P>
-
- <P>Our web site contains even more documentation.</P>
-
- <H4><A name="1.9">1.9</A>) How do I find out about known bugs or
- missing features?</H4>
-
- <P>PostgreSQL supports an extended subset of <SMALL>SQL</SMALL>-92.
- See our <A href="http://developer.PostgreSQL.org/todo.php">TODO</A>
- list for known bugs, missing features, and future plans.</P>
-
- <H4><A name="1.10">1.10</A>) How can I learn
- <SMALL>SQL</SMALL>?</H4>
-
- <P>The PostgreSQL book at <A href=
- "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
- teaches <SMALL>SQL</SMALL>. There is another PostgreSQL book at <A
- href=
- "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook.</A>
- There is a nice tutorial at <A href=
- "http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A>
- at <A href=
- "http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">
- http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,</A>
- and at <A href=
- "http://sqlcourse.com/">http://sqlcourse.com.</A></P>
-
- <P>Another one is "Teach Yourself SQL in 21 Days, Second Edition"
- at <A href=
- "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A></P>
-
- <P>Many of our users like <I>The Practical SQL Handbook</I>,
- Bowman, Judith S., et al., Addison-Wesley. Others like <I>The
- Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>
-
- <H4><A name="1.11">1.11</A>) Is PostgreSQL Y2K compliant?</H4>
-
- <P>Yes, we easily handle dates past the year 2000 AD, and before
- 2000 BC.</P>
-
- <H4><A name="1.12">1.12</A>) How do I join the development
- team?</H4>
-
- <P>First, download the latest source and read the PostgreSQL
- Developers documentation on our web site, or in the distribution.
- Second, subscribe to the <I>pgsql-hackers</I> and
- <I>pgsql-patches</I> mailing lists. Third, submit high quality
- patches to pgsql-patches.</P>
-
- <P>There are about a dozen people who have commit privileges to the
- PostgreSQL <SMALL>CVS</SMALL> archive. They each have submitted so
- many high-quality patches that it was impossible for the existing
- committers to keep up, and we had confidence that patches they
- committed were of high quality.</P>
-
- <H4><A name="1.13">1.13</A>) How do I submit a bug report?</H4>
-
- <P>Please visit the <A href=
- "http://www.postgresql.org/bugs/bugs.php">PostgreSQL BugTool</A>
- page, which gives guidelines and directions on how to submit a
- bug.</P>
-
- <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 or patches.</P>
-
- <H4><A name="1.14">1.14</A>) How does PostgreSQL compare to other
- <SMALL>DBMS</SMALL>s?</H4>
-
- <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 has performance similar to other commercial and
- open source databases. it is faster for some things, slower for
- others. In comparison to MySQL or leaner database systems, we are
- slower on inserts/updates because of transaction overhead. Of
- course, MySQL does not have any of the features mentioned in the
- <I>Features</I> section above. We are built for reliability and
- features, though we continue to improve performance in every
- release. There is an interesting Web page comparing PostgreSQL to
- MySQL at <A href= "http://openacs.org/why-not-mysql.html">
-
- http://openacs.org/why-not-mysql.html</A><BR>
-
- <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 list provides a large group of developers and
- users to help resolve any problems encountered. While we can not
- 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="#1.6">support FAQ item</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>
-
- <H4><A name="1.15">1.15</A>) How can I financially assist
- PostgreSQL?</H4>
-
- <P>PostgreSQL has had a first-class infrastructure since we started
- six years ago. This is all thanks to Marc Fournier, who has created
- and managed this infrastructure over the years.</P>
-
- <P>Quality infrastructure is very important to an open-source
- project. It prevents disruptions that can greatly delay forward
- movement of the project.</P>
-
- <P>Of course, this infrastructure is not cheap. There are a variety
- of monthly and one-time expenses that are required to keep it
- going. If you or your company has money it can donate to help fund
- this effort, please go to <A href=
- "http://www.pgsql.com/pg_goodies">http://www.pgsql.com/pg_goodies</A>
- and make a donation.</P>
-
- <P>Although the web page mentions PostgreSQL, Inc, the
- "contributions" item is solely to support the PostgreSQL project
- and does not fund any specific company. If you prefer, you can also
- send a check to the contact address.</P>
- <HR>
-
- <H2 align="center">User Client Questions</H2>
-
- <H4><A name="2.1">2.1</A>) Are there <SMALL>ODBC</SMALL> drivers
- for PostgreSQL?</H4>
-
- <P>There are two <SMALL>ODBC</SMALL> drivers available, PsqlODBC
- and OpenLink <SMALL>ODBC</SMALL>.</P>
-
- <P>PsqlODBC is included in the distribution. More information about
- it can be gotten from <A href=
- "ftp://ftp.PostgreSQL.org/pub/odbc/">ftp://ftp.PostgreSQL.org/pub/odbc/</A>.</P>
-
- <P>OpenLink <SMALL>ODBC</SMALL> can be gotten from <A href=
- "http://www.openlinksw.com/">http://www.openlinksw.com</A>. It
- works with their standard <SMALL>ODBC</SMALL> client software so
- you'll have PostgreSQL <SMALL>ODBC</SMALL> available on every
- client platform they support (Win, Mac, Unix, VMS).</P>
-
- <P>They will probably be selling this product to people who need
- commercial-quality support, but a freeware version will always be
- available. Please send questions to <A href=
- "mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>.</P>
-
- <P>See also the <A href=
- "http://www.postgresql.org/devel-corner/docs/programmer/odbc.html">ODBC
- chapter of the Programmer's Guide</A>.</P>
-
- <H4><A name="2.2">2.2</A>) What tools are available for using
- PostgreSQL with Web pages?</H4>
-
- <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>There is also one at <A href=
- "http://www.phone.net/home/mwm/hotlist/">http://www.phone.net/home/mwm/hotlist/.</A></P>
-
- <P>For Web integration, PHP is an excellent interface. It is at <A
- href="http://www.php.net">http://www.php.net</A>.</P>
-
- <P>For complex cases, many use the Perl interface and CGI.pm.</P>
-
- <H4><A name="2.3">2.3</A>) Does PostgreSQL have a graphical user
- interface? A report generator? An embedded query language
- interface?</H4>
-
- <P>We have a nice graphical user interface called <I>pgaccess</I>,
- which is shipped as part of the distribution. <I>pgaccess</I> also
- has a report generator. The Web page is <A href=
- "http://www.flex.ro/pgaccess">http://www.flex.ro/pgaccess</A></P>
-
- <P>We also include <I>ecpg</I>, which is an embedded SQL query
- language interface for C.</P>
-
- <H4><A name="2.4">2.4</A>) What languages are available to
- communicate with PostgreSQL?</H4>
-
- <P>We have:</P>
-
- <UL>
- <LI>C (libpq)</LI>
-
- <LI>C++ (libpq++)</LI>
-
- <LI>Embedded C (ecpg)</LI>
-
- <LI>Java (jdbc)</LI>
-
- <LI>Perl (perl5)</LI>
-
- <LI>ODBC (odbc)</LI>
-
- <LI>Python (PyGreSQL)</LI>
-
- <LI>TCL (libpgtcl)</LI>
-
- <LI>C Easy API (libpgeasy)</LI>
-
- <LI>Embedded <SMALL>HTML</SMALL> (<A href=
- "http://www.php.net">PHP from http://www.php.net</A>)</LI>
- </UL>
- <HR>
-
- <H2 align="center">Administrative Questions</H2>
-
- <H4><A name="3.1">3.1</A>) How do I install PostgreSQL somewhere
- other than <I>/usr/local/pgsql</I>?</H4>
-
- <P>Specify the <I>--prefix</I> option when running
- <I>configure</I>.</P>
-
- <H4><A name="3.2">3.2</A>) When I start <I>postmaster</I>, I get a
- <I>Bad System Call</I> or core dumped message. Why?</H4>
-
- <P>It could be a variety of problems, but first check to see that
- you have System V extensions installed in your kernel. PostgreSQL
- requires kernel support for shared memory and semaphores.</P>
-
- <H4><A name="3.3">3.3</A>) When I try to start <I>postmaster</I>, I
- get <I>IpcMemoryCreate</I> errors. Why?</H4>
-
- <P>You either do not have shared memory configured properly in your
- 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 and backend processes you configure for
- <I>postmaster</I>. For most systems, with default numbers of
- buffers and processes, you need a minimum of ~1 MB. See the <A
- href=
- "http://www.postgresql.org/idocs/index.php?kernel-resources.html">PostgreSQL
- Administrator's Guide</A> for more detailed information about
- shared memory and semaphores.</P>
-
- <H4><A name="3.4">3.4</A>) When I try to start <I>postmaster</I>, I
- get <I>IpcSemaphoreCreate</I> errors. Why?</H4>
-
- <P>If the error message is <I>IpcSemaphoreCreate: semget failed (No
- space left on device)</I> then your kernel is not configured with
- enough semaphores. Postgres needs one semaphore per potential
- backend process. A temporary solution is to start <I>postmaster</I>
- with a smaller limit on the number of backend processes. Use
- <I>-N</I> with a parameter less than the default of 32. A more
- permanent solution is to increase your kernel's
- <SMALL>SEMMNS</SMALL> and <SMALL>SEMMNI</SMALL> parameters.</P>
-
- <P>Inoperative semaphores can also cause crashes during heavy
- database access.</P>
-
- <P>If the error message is something else, you might not have
- semaphore support configured in your kernel at all. See the
- PostgreSQL Administrator's Guide for more detailed information
- about shared memory and semaphores.</P>
-
- <H4><A name="3.5">3.5</A>) How do I control connections from other
- hosts?</H4>
-
- <P>By default, PostgreSQL only allows connections from the local
- machine using Unix domain sockets. Other machines will not be able
- to connect unless you add the <I>-i</I> flag to <I>postmaster</I>,
- <B>and</B> enable host-based authentication by modifying the file
- <I>$PGDATA/pg_hba.conf</I> accordingly. This will allow TCP/IP
- connections.</P>
-
- <H4><A name="3.6">3.6</A>) How do I tune the database engine for
- better performance?</H4>
-
- <P>Certainly, indexes can speed up queries. The
- <SMALL>EXPLAIN</SMALL> command allows you to see how PostgreSQL is
- interpreting your query, and which indexes are being used.</P>
-
- <P>If you are doing many <SMALL>INSERTs</SMALL>, consider doing
- them in a large batch using the <SMALL>COPY</SMALL> command. This
- is much faster than individual <SMALL>INSERTS.</SMALL> Second,
- statements not in a <SMALL>BEGIN WORK/COMMIT</SMALL> transaction
- block are considered to be in their own transaction. Consider
- performing several statements in a single transaction block. This
- reduces the transaction overhead. Also, consider dropping and
- recreating indexes when making large data changes.</P>
-
- <P>There are several tuning options. You can disable <I>fsync()</I>
- by starting <I>postmaster</I> with a <I>-o -F</I> option. This will
- prevent <I>fsync()</I>s from flushing to disk after every
- transaction.</P>
-
- <P>You can also use the <I>postmaster</I> <I>-B</I> option to
- increase the number of shared memory buffers used by the backend
- processes. If you make this parameter too high, the
- <I>postmaster</I> may not start because you have exceeded your
- kernel's limit on shared memory space. Each buffer is 8K and the
- default is 64 buffers.</P>
-
- <P>You can also use the backend <I>-S</I> option to increase the
- maximum amount of memory used by the backend process for temporary
- sorts. The <I>-S</I> value is measured in kilobytes, and the
- default is 512 (i.e. 512K).</P>
-
- <P>You can also use the <SMALL>CLUSTER</SMALL> command to group
- data in tables to match an index. See the <SMALL>CLUSTER</SMALL>
- manual page for more details.</P>
-
- <H4><A name="3.7">3.7</A>) What debugging features are
- available?</H4>
-
- <P>PostgreSQL has several features that report status information
- that can be valuable for debugging purposes.</P>
-
- <P>First, by running <I>configure</I> with the --enable-cassert
- option, many <I>assert()</I>s monitor the progress of the backend
- and halt the program when something unexpected occurs.</P>
-
- <P>Both <I>postmaster</I> and <I>postgres</I> have several debug
- options available. First, whenever you start <I>postmaster</I>,
- make sure you send the standard output and error to a log file,
- like:</P>
-<PRE>
- cd /usr/local/pgsql
- ./bin/postmaster &gt;server.log 2&gt;&amp;1 &amp;
-</PRE>
-
- <P>This will put a server.log file in the top-level PostgreSQL
- directory. This file contains useful information about problems or
- errors encountered by the server. <I>Postmaster</I> has a <I>-d</I>
- option that allows even more detailed information to be reported.
- The <I>-d</I> option takes a number that specifies the debug level.
- Be warned that high debug level values generate large log
- files.</P>
-
- <P>If <I>postmaster</I> is not running, you can actually run the
- <I>postgres</I> backend from the command line, and type your
- <SMALL>SQL</SMALL> statement directly. This is recommended
- <B>only</B> for debugging purposes. Note that a newline terminates
- the query, not a semicolon. If you have compiled with debugging
- symbols, you can use a debugger to see what is happening. Because
- the backend was not started from <I>postmaster</I>, it is not
- running in an identical environment and locking/backend interaction
- problems may not be duplicated.</P>
-
- <P>If <I>postmaster</I> is running, start <I>psql</I> in one
- window, then find the <SMALL>PID</SMALL> of the <I>postgres</I>
- process used by <I>psql</I>. Use a debugger to attach to the
- <I>postgres</I> <SMALL>PID.</SMALL> You can set breakpoints in the
- debugger and issue queries from <I>psql</I>. If you are debugging
- <I>postgres</I> startup, you can set PGOPTIONS="-W n", then start
- <I>psql</I>. This will cause startup to delay for <I>n</I> seconds
- so you can attach to the process with the debugger, set any
- breakpoints, and continue through the startup sequence.</P>
-
- <P>The <I>postgres</I> program has <I>-s, -A</I>, and <I>-t</I>
- options that can be very useful for debugging and performance
- measurements.</P>
-
- <P>You can also compile with profiling to see what functions are
- taking execution time. The backend profile files will be deposited
- in the <I>pgsql/data/base/dbname</I> directory. The client profile
- file will be put in the client's current directory. Linux requires
- a compile with <I>-DLINUX_PROFILE</I> for proper profiling.</P>
-
- <H4><A name="3.8">3.8</A>) Why do I get <I>"Sorry, too many
- clients"</I> when trying to connect?</H4>
-
- <P>You need to increase <I>postmaster</I>'s limit on how many
- concurrent backend processes it can start.</P>
-
- <P>The default limit is 32 processes. You can increase it by
- restarting <I>postmaster</I> with a suitable <I>-N</I> value or
- modifying <I>postgresql.conf</I>.</P>
-
- <P>Note that if you make <I>-N</I> larger than 32, you must also
- increase <I>-B</I> beyond its default of 64; <I>-B</I> must be at
- least twice <I>-N</I>, and probably should be more than that for
- best performance. For large numbers of backend processes, you are
- also likely to find that you need to increase various Unix kernel
- configuration parameters. Things to check include the maximum size
- of shared memory blocks, <SMALL>SHMMAX;</SMALL> the maximum number
- of semaphores, <SMALL>SEMMNS</SMALL> and <SMALL>SEMMNI;</SMALL> the
- maximum number of processes, <SMALL>NPROC;</SMALL> the maximum
- number of processes per user, <SMALL>MAXUPRC;</SMALL> and the
- maximum number of open files, <SMALL>NFILE</SMALL> and
- <SMALL>NINODE.</SMALL> The reason that PostgreSQL has a limit on
- the number of allowed backend processes is so your system won't run
- out of resources.</P>
-
- <P>In PostgreSQL versions prior to 6.5, the maximum number of
- backends was 64, and changing it required a rebuild after altering
- the MaxBackendId constant in
- <I>include/storage/sinvaladt.h</I>.</P>
-
- <H4><A name="3.9">3.9</A>) What are the <I>pg_sorttempNNN.NN</I>
- files in my database directory?</H4>
-
- <P>They are temporary files generated by the query executor. For
- example, if a sort needs to be done to satisfy an <SMALL>ORDER
- BY,</SMALL> and the sort requires more space than the backend's
- <I>-S</I> parameter allows, then temporary files are created to
- hold the extra data.</P>
-
- <P>The temporary files should be deleted automatically, but might
- not if a backend crashes during a sort. If you have no backends
- running at the time, it is safe to delete the pg_tempNNN.NN
- files.</P>
- <HR>
-
- <H2 align="center">Operational Questions</H2>
-
- <H4><A name="4.1">4.1</A>) What is the difference between binary
- cursors and normal cursors?</H4>
-
- <P>See the <SMALL>DECLARE</SMALL> manual page for a
- description.</P>
-
- <H4><A name="4.2">4.2</A>) How do I <SMALL>SELECT</SMALL> only the
- first few rows of a query?</H4>
-
- <P>See the <SMALL>FETCH</SMALL> manual page, or use
- <SMALL>SELECT</SMALL> ... <SMALL>LIMIT</SMALL>....</P>
-
- <P>The entire query may have to be evaluated, even if you only want
- the first few rows. Consider a query that has an <SMALL>ORDER
- BY.</SMALL> If there is an index that matches the <SMALL>ORDER
- BY</SMALL>, PostgreSQL may be able to evaluate only the first few
- records requested, or the entire query may have to be evaluated
- until the desired rows have been generated.</P>
-
- <H4><A name="4.3">4.3</A>) How do I get a list of tables or other
- things I can see in <I>psql</I>?</H4>
-
- <P>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 psql'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.</P>
-
- <H4><A name="4.4">4.4</A>) How do you remove a column from a
- table?</H4>
-
- <P>We do not support <SMALL>ALTER TABLE DROP COLUMN,</SMALL> but do
- this:</P>
-<PRE>
- BEGIN;
- LOCK TABLE old_table;
- SELECT ... -- select all columns but the one you want to remove
- INTO TABLE new_table
- FROM old_table;
- DROP TABLE old_table;
- ALTER TABLE new_table RENAME TO old_table;
- COMMIT;
-</PRE>
-
- <H4><A name="4.5">4.5</A>) What is the maximum size for a row, a
- table, and a database?</H4>
-
- <P>These are the limits:</P>
-<PRE>
- Maximum size for a database? unlimited (500 GB databases exist)
- Maximum size for a table? 16 TB
- Maximum size for a row? unlimited in 7.1 and later
- Maximum size for a field? 1 GB in 7.1 and later
- Maximum number of rows in a table? unlimited
- Maximum number of columns in a table? 250-1600 depending on column types
- Maximum number of indexes on a table? unlimited
-</PRE>
- 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>The maximum table size of 16 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 and maximum number of columns can be
- increased if the default block size is increased to 32k.</P>
-
- <H4><A name="4.6">4.6</A>) How much database disk space is required
- to store data from a typical text file?</H4>
-
- <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 6.4 MB:</P>
-<PRE>
- 36 bytes: each row header (approximate)
- 24 bytes: one int field and one text filed
- + 4 bytes: pointer on page to tuple
- ----------------------------------------
- 64 bytes per row
-
- The data page size in PostgreSQL is 8192 bytes (8 KB), so:
-
- 8192 bytes per page
- ------------------- = 128 rows per database page (rounded down)
- 64 bytes per row
-
- 100000 data rows
- -------------------- = 782 database pages (rounded up)
- 128 rows per page
-
-782 database pages * 8192 bytes per page = 6,406,144 bytes (6.4 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>
-
- <H4><A name="4.7">4.7</A>) How do I find out what tables, indexes,
- databases, and users are defined?</H4>
-
- <P><I>psql</I> has a variety of backslash commands to show such
- information. Use \? to see them. There are also system tables
- beginning with <I>pg_</I> that describe these too. Also, <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>
-
- <H4><A name="4.8">4.8</A>) My queries are slow or don't make use of
- the indexes. Why?</H4>
- Indexes are not automatically used by every query. Indexes are only
- used if the table is larger than a minimum size, and the query
- selects only a small percentage of the rows in the table. This is
- because the random disk access caused by an index scan is sometimes
- slower than a straight read through the table, or sequential scan.
-
- <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.</P>
- 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>When using wild-card operators such as <SMALL>LIKE</SMALL> or
- <I>~</I>, indexes can only be used if the beginning of the search
- is anchored to the start of the string. Therefore, to use indexes,
- <SMALL>LIKE</SMALL> patterns must not start with <I>%</I>, and
- <I>~</I>(regular expression) patterns must start with <I>^</I>.</P>
-
- <H4><A name="4.9">4.9</A>) How do I see how the query optimizer is
- evaluating my query?</H4>
-
- <P>See the <SMALL>EXPLAIN</SMALL> manual page.</P>
-
- <H4><A name="4.10">4.10</A>) What is an R-tree index?</H4>
-
- <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-trees can handle
- multi-dimensional data. For example, if an R-tree index can be
- built on an attribute of type <I>point</I>, the system can more
- efficiently answer queries such as "select all points within a
- bounding rectangle."</P>
-
- <P>The canonical paper that describes the original R-tree design
- is:</P>
-
- <P>Guttman, A. "R-trees: A Dynamic Index Structure for Spatial
- Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt
- of Data, 45-57.</P>
-
- <P>You can also find this paper in Stonebraker's "Readings in
- Database Systems".</P>
-
- <P>Built-in 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 requires a bit of work and we don't
- currently have any documentation on how to do it.</P>
-
- <H4><A name="4.11">4.11</A>) What is the Genetic Query
- Optimizer?</H4>
-
- <P>The <SMALL>GEQO</SMALL> module speeds query optimization when
- joining many tables by means of a Genetic Algorithm (GA). It allows
- the handling of large join queries through nonexhaustive
- search.</P>
-
- <H4><A name="4.12">4.12</A>) How do I perform regular expression
- searches and case-insensitive regular expression searches? How do I
- use an index for case-insensitive searches?</H4>
-
- <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> in PostgreSQL 7.1 and later.</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 a
- functional index, it will be used:
-<PRE>
- CREATE INDEX tabindex on tab (lower(col));
-
-</PRE>
-
- <H4><A name="4.13">4.13</A>) In a query, how do I detect if a field
- is <SMALL>NULL</SMALL>?</H4>
-
- <P>You test the column with <SMALL>IS NULL</SMALL> and <SMALL>IS
- NOT NULL</SMALL>.</P>
-
- <H4><A name="4.14">4.14</A>) What is the difference between the
- various character types?</H4>
-<PRE>
-Type Internal Name Notes
---------------------------------------------------
-"char" char 1 character
-CHAR(#) bpchar blank padded to the specified fixed length
-VARCHAR(#) varchar size specifies maximum length, no padding
-TEXT text no specific upper limit on length
-BYTEA bytea variable-length byte array (null-byte safe)
-</PRE>
-
- <P>You will see the internal name when examining system catalogs
- and in some error messages.</P>
-
- <P>The last four types above are "varlena" types (i.e., the first
- four bytes on disk are the length, followed by the data). Thus the
- actual space used is slightly greater than the declared size.
- However, these data types are also subject to compression or being
- stored out-of-line by <SMALL>TOAST</SMALL>, so the space on disk
- might also be less than expected.</P>
-
- <P><SMALL>CHAR()</SMALL> is best when storing strings that are
- usually the same length. <SMALL>VARCHAR()</SMALL> is best when
- storing variable-length strings but it limits how long a string can
- be. <SMALL>TEXT</SMALL> is for strings of unlimited length, maximum
- 1 gigabyte. <SMALL>BYTEA</SMALL> is for storing binary data,
- particularly values that include <SMALL>NULL</SMALL> bytes.</P>
-
- <H4><A name="4.15.1">4.15.1</A>) How do I create a
- serial/auto-incrementing field?</H4>
-
- <P>PostgreSQL supports a <SMALL>SERIAL</SMALL> data type. It
- auto-creates a sequence and index on the column. 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
- );
- CREATE UNIQUE INDEX person_id_key ON person ( id );
-</PRE>
- See the <I>create_sequence</I> manual page for more information
- about sequences. You can also use each row's <I>OID</I> field as a
- unique value. However, if you need to dump and reload the database,
- you need to use <I>pg_dump</I>'s <I>-o</I> option or <SMALL>COPY
- WITH OIDS</SMALL> option to preserve the <SMALL>OID</SMALL>s.
-
- <H4><A name="4.15.2">4.15.2</A>) How do I get the value of a
- <SMALL>SERIAL</SMALL> insert?</H4>
-
- <P>One approach is to retrieve the next <SMALL>SERIAL</SMALL> value
- from the sequence object with the <I>nextval()</I> function
- <I>before</I> inserting and then insert it explicitly. Using the
- example table in <A href="#4.15.1">4.15.1</A>, that might look like
- this in Perl:</P>
-<PRE>
- new_id = output of "SELECT nextval('person_id_seq')"
- INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal');
-</PRE>
- You would then also have the new value stored in
- <CODE>new_id</CODE> for use in other queries (e.g., as a foreign
- key to the <CODE>person</CODE> table). Note that the name of the
- automatically created <SMALL>SEQUENCE</SMALL> object will be named
- &lt;<I>table</I>&gt;_&lt;<I>serialcolumn</I>&gt;_<I>seq</I>, where
- <I>table</I> and <I>serialcolumn</I> are the names of your table
- and your <SMALL>SERIAL</SMALL> column, respectively.
-
- <P>Alternatively, you could retrieve the assigned
- <SMALL>SERIAL</SMALL> value with the <I>currval</I>() function
- <I>after</I> it was inserted by default, e.g.,</P>
-<PRE>
- INSERT INTO person (name) VALUES ('Blaise Pascal');
- new_id = output of "SELECT currval('person_id_seq')";
-</PRE>
- Finally, you could use the <A href="#4.16"><SMALL>OID</SMALL></A>
- returned from the <SMALL>INSERT</SMALL> statement to look up the
- default value, though this is probably the least portable approach.
- In Perl, using DBI with Edmund Mergl's DBD::Pg module, the oid
- value is made available via <I>$sth-&gt;{pg_oid_status}</I> after
- <I>$sth-&gt;execute()</I>.
-
- <H4><A name="4.15.3">4.15.3</A>) Don't <I>currval()</I> and
- <I>nextval()</I> lead to a race condition with other users?</H4>
-
- <P>No. Currval() returns the current value assigned by your
- backend, not by all users.</P>
-
- <H4><A name="4.15.4">4.15.4</A>) Why aren't my sequence numbers
- reused on transaction abort? Why are there gaps in the numbering of
- my sequence/SERIAL column?</H4>
-
- <P>To improve concurrency, sequence values are given out to running
- transactions as needed and are not locked until the transaction
- completes. This causes gaps in numbering from aborted
- transactions.</P>
-
- <H4><A name="4.16">4.16</A>) What is an <SMALL>OID</SMALL>? What is
- a <SMALL>TID</SMALL>?</H4>
-
- <P><SMALL>OID</SMALL>s are PostgreSQL's answer to unique row ids.
- Every row that is created in PostgreSQL gets a unique
- <SMALL>OID</SMALL>. All <SMALL>OID</SMALL>s generated during
- <I>initdb</I> are less than 16384 (from
- <I>backend/access/transam.h</I>). All user-created
- <SMALL>OID</SMALL>s are equal to or greater than this. By default,
- all these <SMALL>OID</SMALL>s are unique not only within a table or
- database, but unique within the entire PostgreSQL installation.</P>
-
- <P>PostgreSQL uses <SMALL>OID</SMALL>s in its internal system
- tables to link rows between tables. These <SMALL>OID</SMALL>s can
- be used to identify specific user rows and used in joins. It is
- recommended you use column type <SMALL>OID</SMALL> to store
- <SMALL>OID</SMALL> values. You can create an index on the
- <SMALL>OID</SMALL> field for faster access.</P>
-
- <P>O<SMALL>ID</SMALL>s are assigned to all new rows from a central
- area that is used by all databases. If you want to change the
- <SMALL>OID</SMALL> to something else, or if you want to make a copy
- of the table, with the original <SMALL>OID</SMALL>s, there is no
- reason you can't do it:</P>
-<PRE>
- CREATE TABLE new_table(old_oid oid, mycol int);
- SELECT old_oid, mycol INTO new FROM old;
- COPY new TO '/tmp/pgtable';
- DELETE FROM new;
- COPY new WITH OIDS FROM '/tmp/pgtable';
-<!--
- CREATE TABLE new_table (mycol int);
- INSERT INTO new_table (oid, mycol) SELECT oid, mycol FROM old_table;
--->
-</PRE>
-
- <P>O<SMALL>ID</SMALL>s are stored as 4-byte integers, and will
- overflow at 4 billion. No one has reported this ever happening, and
- we plan to have the limit removed before anyone does.</P>
-
- <P>T<SMALL>ID</SMALL>s are used to identify specific physical rows
- with block and offset values. T<SMALL>ID</SMALL>s change after rows
- are modified or reloaded. They are used by index entries to point
- to physical rows.</P>
-
- <H4><A name="4.17">4.17</A>) What is the meaning of some of the
- terms used in PostgreSQL?</H4>
-
- <P>Some of the source code and older documentation use terms that
- have more common usage. Here are some:</P>
-
- <UL>
- <LI>table, relation, class</LI>
-
- <LI>row, record, tuple</LI>
-
- <LI>column, field, attribute</LI>
-
- <LI>retrieve, select</LI>
-
- <LI>replace, update</LI>
-
- <LI>append, insert</LI>
-
- <LI><SMALL>OID</SMALL>, serial value</LI>
-
- <LI>portal, cursor</LI>
-
- <LI>range variable, table name, table alias</LI>
- </UL>
-
- <P>A list of general database terms can be found at: <A href=
- "http://www.comptechnews.com/~reaster/dbdesign.html">http://www.comptechnews.com/~reaster/dbdesign.html</A></P>
-
- <H4><A name="4.18">4.18</A>) Why do I get the error <I>"ERROR:
- Memory exhausted in AllocSetAlloc()"</I>?</H4>
-
- <P>If you are running a version older than 7.1, an upgrade may fix
- the problem. Also it is possible you have run out of virtual memory
- on your system, or your kernel has a low limit for certain
- resources. Try this before starting <I>postmaster</I>:</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.
-
- <H4><A name="4.19">4.19</A>) How do I tell what PostgreSQL version
- I am running?</H4>
-
- <P>From <I>psql</I>, type <CODE>select version();</CODE></P>
-
- <H4><A name="4.20">4.20</A>) Why does my large-object operations
- get <I>"invalid large obj descriptor"</I>?</H4>
-
- <P>You need to put <CODE>BEGIN WORK</CODE> and <CODE>COMMIT</CODE>
- around any use of a large object handle, that is, surrounding
- <CODE>lo_open</CODE> ... <CODE>lo_close.</CODE></P>
-
- <P>Currently PostgreSQL enforces the rule by closing large object
- handles at transaction commit. So the first attempt to do anything
- with the handle will draw <I>invalid large obj descriptor</I>. So
- code that used to work (at least most of the time) will now
- generate that error message if you fail to use a transaction.</P>
-
- <P>If you are using a client interface like <SMALL>ODBC</SMALL> you
- may need to set <CODE>auto-commit off.</CODE></P>
-
- <H4><A name="4.21">4.21</A>) How do I create a column that will
- default to the current time?</H4>
-
- <P>Use <I>CURRENT_TIMESTAMP</I>:</P>
-<PRE>
-<CODE>CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
-</CODE>
-</PRE>
-
- <H4><A name="4.22">4.22</A>) Why are my subqueries using
- <CODE><SMALL>IN</SMALL></CODE> so slow?</H4>
-
- <P>Currently, we join subqueries to outer queries by sequentially
- scanning the result of the subquery for each row of the outer
- query. A workaround is to replace <CODE>IN</CODE> with
- <CODE>EXISTS</CODE>:</P>
-<PRE>
-<CODE>SELECT *
- FROM tab
- WHERE col1 IN (SELECT col2 FROM TAB2)
-</CODE>
-</PRE>
- to:
-<PRE>
-<CODE>SELECT *
- FROM tab
- WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2)
-</CODE>
-</PRE>
- We hope to fix this limitation in a future release.
-
- <H4><A name="4.23">4.23</A>) How do I perform an outer join?</H4>
-
- <P>PostgreSQL 7.1 and later 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>
-
- <P>In previous releases, outer joins can be simulated using
- <SMALL>UNION</SMALL> and <SMALL>NOT IN</SMALL>. For example, when
- joining <I>tab1</I> and <I>tab2</I>, the following query does an
- <I>outer</I> join of the two tables:<BR>
- <BR>
- </P>
-<PRE>
- SELECT tab1.col1, tab2.col2
- FROM tab1, tab2
- WHERE tab1.col1 = tab2.col1
- UNION ALL
- SELECT tab1.col1, NULL
- FROM tab1
- WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
- ORDER BY col1
-</PRE>
-
- <H4><A name="4.24">4.24</A>) How do I perform queries using
- multiple databases?</H4>
-
- <P>There is no way to query any database except the current one.
- Because PostgreSQL loads database-specific system catalogs, it is
- uncertain how a cross-database query should even behave.</P>
-
- <P>Of course, a client can make simultaneous connections to
- different databases and merge the information that way.</P>
-
- <H4><A name="4.25">4.25</A>) How do I return multiple rows or
- columns from a function?</H4>
-
- <P>You can return result sets from PL/pgSQL functions using
- <I>refcursors</I>. See <A href=
- "http://developer.postgresql.org/docs/postgres/plpgsql-cursors.html">
- http://developer.postgresql.org/docs/postgres/plpgsql-cursors.html,</A>
- section 23.7.3.3.</P>
-
- <H4><A name="4.26">4.26</A>) Why can't I reliably create/drop
- temporary tables in PL/PgSQL functions?</H4>
- PL/PgSQL caches function contents, 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.
-
- <HR>
-
- <H2 align="center">Extending PostgreSQL</H2>
-
- <H4><A name="5.1">5.1</A>) I wrote a user-defined function. When I
- run it in <I>psql</I>, why does it dump core?</H4>
-
- <P>The problem could be a number of things. Try testing your
- user-defined function in a stand-alone test program first.</P>
-
- <H4><A name="5.2">5.2</A>) How can I contribute some nifty new
- types and functions to PostgreSQL?</H4>
-
- <P>Send your extensions to the <I>pgsql-hackers</I> mailing list,
- and they will eventually end up in the <I>contrib/</I>
- subdirectory.</P>
-
- <H4><A name="5.3">5.3</A>) How do I write a C function to return a
- tuple?</H4>
-
- <P>This requires wizardry so extreme that the authors have never
- tried it, though in principle it can be done.</P>
-
- <H4><A name="5.4">5.4</A>) I have changed a source file. Why does
- the recompile not see the change?</H4>
-
- <P>The <I>Makefiles</I> do not have the proper dependencies for
- include files. You have to do a <I>make clean</I> and then another
- <I>make</I>. If you are using <SMALL>GCC</SMALL> you can use the
- <I>--enable-depend</I> option of <I>configure</I> to have the
- compiler compute the dependencies automatically.</P>
- </BODY>
-</HTML>
-
diff --git a/doc/src/FAQ/FAQ_DEV.html b/doc/src/FAQ/FAQ_DEV.html
deleted file mode 100644
index 3116d1169f2..00000000000
--- a/doc/src/FAQ/FAQ_DEV.html
+++ /dev/null
@@ -1,840 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
-
-<HTML>
- <HEAD>
- <META name="generator" content="HTML Tidy, see www.w3.org">
-
- <TITLE>PostgreSQL Developers FAQ</TITLE>
- </HEAD>
-
- <BODY bgcolor="#FFFFFF" text="#000000" link="#FF0000" vlink="#A00000"
- alink="#0000FF">
- <H1>Developer's Frequently Asked Questions (FAQ) for
- PostgreSQL</H1>
-
- <P>Last updated: Wed Apr 17 01:12:20 EDT 2002</P>
-
- <P>Current maintainer: Bruce Momjian (<A href=
- "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
- </P>
-
- <P>The most recent version of this document can be viewed at the
- postgreSQL Web site, <A href=
- "http://www.PostgreSQL.org">http://www.PostgreSQL.org</A>.<BR>
- </P>
- <HR>
- <BR>
-
-
- <CENTER>
- <H2>General Questions</H2>
- </CENTER>
- <A href="#1.1">1.1</A>) How do I get involved in PostgreSQL
- development?<BR>
- <A href="#1.2">1.2</A>) How do I add a feature or fix a bug?<BR>
- <A href="#1.3">1.3</A>) How do I download/update the current source
- tree?<BR>
- <A href="#1.4">1.4</A>) How do I test my changes?<BR>
- <A href="#1.5">1.5</A>) What tools are available for developers?<BR>
- <A href="#1.6">1.6</A>) What books are good for developers?<BR>
- <A href="#1.7">1.7</A>) What is configure all about?<BR>
- <A href="#1.8">1.8</A>) How do I add a new port?<BR>
- <A href="#1.9">1.9</A>) Why don't we use threads in the backend?<BR>
- <A href="#1.10">1.10</A>) How are RPM's packaged?<BR>
- <A href="#1.11">1.11</A>) How are CVS branches handled?<BR>
- <A href="#1.12">1.12</A>) Where can I get a copy of the SQL
- standards?<BR>
-
- <CENTER>
- <H2>Technical Questions</H2>
- </CENTER>
- <A href="#2.1">2.1</A>) How do I efficiently access information in
- tables from the backend code?<BR>
- <A href="#2.2">2.2</A>) Why are table, column, type, function, view
- names sometimes referenced as <I>Name</I> or <I>NameData,</I> and
- sometimes as <I>char *?</I><BR>
- <A href="#2.3">2.3</A>) Why do we use <I>Node</I> and <I>List</I> to
- make data structures?<BR>
- <A href="#2.4">2.4</A>) I just added a field to a structure. What else
- should I do?<BR>
- <A href="#2.5">2.5</A>) Why do we use <I>palloc</I>() and
- <I>pfree</I>() to allocate memory?<BR>
- <A href="#2.6">2.6</A>) What is elog()?<BR>
- <A href="#2.7">2.7</A>) What is CommandCounterIncrement()?<BR>
- <BR>
-
- <HR>
-
- <CENTER>
- <H2>General Questions</H2>
- </CENTER>
-
- <H3><A name="1.1">1.1</A>) How go I get involved in PostgreSQL
- development?</H3>
-
- <P>This was written by Lamar Owen:</P>
-
- <P>2001-06-22</P>
-
- <B>What open source development process is used by the PostgreSQL
- team?</B>
-
- <P>Read HACKERS for six months (or a full release cycle, whichever
- is longer). Really. HACKERS _is_the process. The process is not
- well documented (AFAIK -- it may be somewhere that I am not aware
- of) -- and it changes continually.</P>
-
- <B>What development environment (OS, system, compilers, etc) is
- required to develop code?</B>
-
- <P><A href="http://developers.postgresql.org">Developers Corner</A> on the
- website has links to this information. The distribution tarball
- itself includes all the extra tools and documents that go beyond a
- good Unix-like development environment. In general, a modern unix
- with a modern gcc, GNU make or equivalent, autoconf (of a
- particular version), and good working knowledge of those tools are
- required.</P>
-
- <B>What areas need support?</B>
-
- <P>The TODO list.</P>
-
- <P>You've made the first step, by finding and subscribing to
- HACKERS. Once you find an area to look at in the TODO, and have
- read the documentation on the internals, etc, then you check out a
- current CVS,write what you are going to write (keeping your CVS
- checkout up to date in the process), and make up a patch (as a
- context diff only) and send to the PATCHES list, prefereably.</P>
-
- <P>Discussion on the patch typically happens here. If the patch
- adds a major feature, it would be a good idea to talk about it
- first on the HACKERS list, in order to increase the chances of it
- being accepted, as well as toavoid duplication of effort. Note that
- experienced developers with a proven track record usually get the
- big jobs -- for more than one reason. Also note that PostgreSQL is
- highly portable -- nonportable code will likely be dismissed out of
- hand.</P>
-
- <P>Once your contributions get accepted, things move from there.
- Typically, you would be added as a developer on the list on the
- website when one of the other developers recommends it. Membership
- on the steering committee is by invitation only, by the other
- steering committee members, from what I have gathered watching
- froma distance.</P>
-
- <P>I make these statements from having watched the process for over
- two years.</P>
-
- <P>To see a good example of how one goes about this, search the
- archives for the name 'Tom Lane' and see what his first post
- consisted of, and where he took things. In particular, note that
- this hasn't been _that_ long ago -- and his bugfixing and general
- deep knowledge with this codebase is legendary. Take a few days to
- read after him. And pay special attention to both the sheer
- quantity as well as the painstaking quality of his work. Both are
- in high demand.</P>
-
- <H3><A name="1.2">1.2</A>) How do I add a feature or fix a bug?</H3>
-
- <P>The source code is over 350,000 lines. Many fixes/features
- are isolated to one specific area of the code. Others require
- knowledge of much of the source. If you are confused about where to
- start, ask the hackers list, and they will be glad to assess the
- complexity and give pointers on where to start.</P>
-
- <P>Another thing to keep in mind is that many fixes and features
- can be added with surprisingly little code. I often start by adding
- code, then looking at other areas in the code where similar things
- are done, and by the time I am finished, the patch is quite small
- and compact.</P>
-
- <P>When adding code, keep in mind that it should use the existing
- facilities in the source, for performance reasons and for
- simplicity. Often a review of existing code doing similar things is
- helpful.</P>
-
- <P>The usual process for source additions is:
- <UL>
- <LI>Review the TODO list.</LI>
- <LI>Discuss hackers the desirability of the fix/feature.</LI>
- <LI>How should it behave in complex circumstances?</LI>
- <LI>How should it be implemented?</LI>
- <LI>Submit the patch to the patches list.</LI>
- <LI>Answer email questions.</LI>
- <LI>Wait for the patch to be applied.</LI>
- </UL></P>
- <H3><A name="1.3">1.3</A>) How do I download/update the current source
- tree?</H3>
-
- <P>There are several ways to obtain the source tree. Occasional
- developers can just get the most recent source tree snapshot from
- ftp.postgresql.org. For regular developers, you can use CVS. CVS
- allows you to download the source tree, then occasionally update
- your copy of the source tree with any new changes. Using CVS, you
- don't have to download the entire source each time, only the
- changed files. Anonymous CVS does not allows developers to update
- the remote source tree, though privileged developers can do this.
- There is a CVS FAQ on our web site that describes how to use remote
- CVS. You can also use CVSup, which has similarly functionality, and
- is available from ftp.postgresql.org.</P>
-
- <P>To update the source tree, there are two ways. You can generate
- a patch against your current source tree, perhaps using the
- make_diff tools mentioned above, and send them to the patches list.
- They will be reviewed, and applied in a timely manner. If the patch
- is major, and we are in beta testing, the developers may wait for
- the final release before applying your patches.</P>
-
- <P>For hard-core developers, Marc(scrappy@postgresql.org) will give
- you a Unix shell account on postgresql.org, so you can use CVS to
- update the main source tree, or you can ftp your files into your
- account, patch, and cvs install the changes directly into the
- source tree.</P>
-
- <H3><A name="1.4">1.4</A>) How do I test my changes?</H3>
-
- <P>First, use <I>psql</I> to make sure it is working as you expect.
- Then run <I>src/test/regress</I> and get the output of
- <I>src/test/regress/checkresults</I> with and without your changes,
- to see that your patch does not change the regression test in
- unexpected ways. This practice has saved me many times. The
- regression tests test the code in ways I would never do, and has
- caught many bugs in my patches. By finding the problems now, you
- save yourself a lot of debugging later when things are broken, and
- you can't figure out when it happened.</P>
-
- <H3><A name="1.5">1.5</A>) What tools are available for
- developers?</H3>
-
- <P>Aside from the User documentation mentioned in the regular FAQ,
- there are several development tools available. First, all the files
- in the <I>/tools</I> directory are designed for developers.</P>
-<PRE>
- RELEASE_CHANGES changes we have to make for each release
- SQL_keywords standard SQL'92 keywords
- backend description/flowchart of the backend directories
- ccsym find standard defines made by your compiler
- entab converts tabs to spaces, used by pgindent
- find_static finds functions that could be made static
- find_typedef finds typedefs in the source code
- find_badmacros finds macros that use braces incorrectly
- make_ctags make vi 'tags' file in each directory
- make_diff make *.orig and diffs of source
- make_etags make emacs 'etags' files
- make_keywords make comparison of our keywords and SQL'92
- make_mkid make mkid ID files
- mkldexport create AIX exports file
- pgindent indents C source files
- pgjindent indents Java source files
- pginclude scripts for adding/removing include files
- unused_oids in pgsql/src/include/catalog
-</PRE>
- Let me note some of these. If you point your browser at the
- <I>file:/usr/local/src/pgsql/src/tools/backend/index.html</I>
- directory, you will see few paragraphs describing the data flow,
- the backend components in a flow chart, and a description of the
- shared memory area. You can click on any flowchart box to see a
- description. If you then click on the directory name, you will be
- taken to the source directory, to browse the actual source code
- behind it. We also have several README files in some source
- directories to describe the function of the module. The browser
- will display these when you enter the directory also. The
- <I>tools/backend</I> directory is also contained on our web page
- under the title <I>How PostgreSQL Processes a Query.</I>
-
- <P>Second, you really should have an editor that can handle tags,
- so you can tag a function call to see the function definition, and
- then tag inside that function to see an even lower-level function,
- and then back out twice to return to the original function. Most
- editors support this via <I>tags</I> or <I>etags</I> files.</P>
-
- <P>Third, you need to get <I>id-utils</I> from:</P>
-<PRE>
- <A href=
-"ftp://alpha.gnu.org/gnu/id-utils-3.2d.tar.gz">ftp://alpha.gnu.org/gnu/id-utils-3.2d.tar.gz</A>
- <A href=
-"ftp://tug.org/gnu/id-utils-3.2d.tar.gz">ftp://tug.org/gnu/id-utils-3.2d.tar.gz</A>
- <A href=
-"ftp://ftp.enst.fr/pub/gnu/gnits/id-utils-3.2d.tar.gz">ftp://ftp.enst.fr/pub/gnu/gnits/id-utils-3.2d.tar.gz</A>
-</PRE>
- By running <I>tools/make_mkid</I>, an archive of source symbols can
- be created that can be rapidly queried like <I>grep</I> or edited.
- Others prefer <I>glimpse.</I>
-
- <P><I>make_diff</I> has tools to create patch diff files that can
- be applied to the distribution. This produces context diffs, which
- is our preferred format.</P>
-
- <P>Our standard format is to indent each code level with one tab,
- where each tab is four spaces. You will need to set your editor to
- display tabs as four spaces:<BR>
- </P>
-<PRE>
- vi in ~/.exrc:
- set tabstop=4
- set sw=4
- more:
- more -x4
- less:
- less -x4
- emacs:
- M-x set-variable tab-width
- or
- ; Cmd to set tab stops &amp; indenting for working with PostgreSQL code
- (c-add-style "pgsql"
- '("bsd"
- (indent-tabs-mode . t)
- (c-basic-offset . 4)
- (tab-width . 4)
- (c-offsets-alist .
- ((case-label . +))))
- t) ; t = set this mode on
-
- and add this to your autoload list (modify file path in macro):
-
- (setq auto-mode-alist
- (cons '("\\`/usr/local/src/pgsql/.*\\.[chyl]\\'" . pgsql-c-mode)
- auto-mode-alist))
- or
- /*
- * Local variables:
- * tab-width: 4
- * c-indent-level: 4
- * c-basic-offset: 4
- * End:
- */
-</PRE>
- <BR>
- <I>pgindent</I> will the format code by specifying flags to your
- operating system's utility <I>indent.</I> This
- <A HREF="http://ezine.daemonnews.org/200112/single_coding_style.html">
- article</A> describes the value of a constent coding style.
-
- <P><I>pgindent</I> is run on all source files just before each beta
- test period. It auto-formats all source files to make them
- consistent. Comment blocks that need specific line breaks should be
- formatted as <I>block comments,</I> where the comment starts as
- <CODE>/*------</CODE>. These comments will not be reformatted in
- any way.</P>
-
- <P><I>pginclude</I> contains scripts used to add needed
- <CODE>#include</CODE>'s to include files, and removed unneeded
- <CODE>#include</CODE>'s.</P>
-
- <P>When adding system types, you will need to assign oids to them.
- There is also a script called <I>unused_oids</I> in
- <I>pgsql/src/include/catalog</I> that shows the unused oids.</P>
-
- <H3><A name="1.6">1.6</A>) What books are good for developers?</H3>
-
- <P>I have four good books, <I>An Introduction to Database
- Systems,</I> by C.J. Date, Addison, Wesley, <I>A Guide to the SQL
- Standard,</I> by C.J. Date, et. al, Addison, Wesley,
- <I>Fundamentals of Database Systems,</I> by Elmasri and Navathe,
- and <I>Transaction Processing,</I> by Jim Gray, Morgan,
- Kaufmann</P>
-
- <P>There is also a database performance site, with a handbook
- on-line written by Jim Gray at <A href=
- "http://www.benchmarkresources.com">http://www.benchmarkresources.com.</A></P>
-
- <H3><A name="1.7">1.7</A>) What is configure all about?</H3>
-
- <P>The files <I>configure</I> and <I>configure.in</I> are part of
- the GNU <I>autoconf</I> package. Configure allows us to test for
- various capabilities of the OS, and to set variables that can then
- be tested in C programs and Makefiles. Autoconf is installed on the
- PostgreSQL main server. To add options to configure, edit
- <I>configure.in,</I> and then run <I>autoconf</I> to generate
- <I>configure.</I></P>
-
- <P>When <I>configure</I> is run by the user, it tests various OS
- capabilities, stores those in <I>config.status</I> and
- <I>config.cache,</I> and modifies a list of <I>*.in</I> files. For
- example, if there exists a <I>Makefile.in,</I> configure generates
- a <I>Makefile</I> that contains substitutions for all @var@
- parameters found by configure.</P>
-
- <P>When you need to edit files, make sure you don't waste time
- modifying files generated by <I>configure.</I> Edit the <I>*.in</I>
- file, and re-run <I>configure</I> to recreate the needed file. If
- you run <I>make distclean</I> from the top-level source directory,
- all files derived by configure are removed, so you see only the
- file contained in the source distribution.</P>
-
- <H3><A name="1.8">1.8</A>) How do I add a new port?</H3>
-
- <P>There are a variety of places that need to be modified to add a
- new port. First, start in the <I>src/template</I> directory. Add an
- appropriate entry for your OS. Also, use <I>src/config.guess</I> to
- add your OS to <I>src/template/.similar.</I> You shouldn't match
- the OS version exactly. The <I>configure</I> test will look for an
- exact OS version number, and if not found, find a match without
- version number. Edit <I>src/configure.in</I> to add your new OS.
- (See configure item above.) You will need to run autoconf, or patch
- <I>src/configure</I> too.</P>
-
- <P>Then, check <I>src/include/port</I> and add your new OS file,
- with appropriate values. Hopefully, there is already locking code
- in <I>src/include/storage/s_lock.h</I> for your CPU. There is also
- a <I>src/makefiles</I> directory for port-specific Makefile
- handling. There is a <I>backend/port</I> directory if you need
- special files for your OS.</P>
-
- <H3><A name="1.9">1.9</A>) Why don't we use threads in the
- backend?</H3>
-
- <P>There are several reasons threads are not used:</P>
-
- <UL>
- <LI>Historically, threads were unsupported and buggy.</LI>
-
- <LI>An error in one backend can corrupt other backends.</LI>
-
- <LI>Speed improvements using threads are small compared to the
- remaining backend startup time.</LI>
-
- <LI>The backend code would be more complex.</LI>
- </UL>
-
- <H3><A name="1.10">1.10</A>) How are RPM's packaged?</H3>
-
- <P>This was written by Lamar Owen:</P>
-
- <P>2001-05-03</P>
-
- <P>As to how the RPMs are built -- to answer that question sanely
- requires me to know how much experience you have with the whole RPM
- paradigm. 'How is the RPM built?' is a multifaceted question. The
- obvious simple answer is that I maintain:</P>
-
- <OL>
- <LI>A set of patches to make certain portions of the source tree
- 'behave' in the different environment of the RPMset;</LI>
-
- <LI>The initscript;</LI>
-
- <LI>Any other ancilliary scripts and files;</LI>
-
- <LI>A README.rpm-dist document that tries to adequately document
- both the differences between the RPM build and the WHY of the
- differences, as well as useful RPM environment operations (like,
- using syslog, upgrading, getting postmaster to start at OS boot,
- etc);</LI>
-
- <LI>The spec file that throws it all together. This is not a
- trivial undertaking in a package of this size.</LI>
- </OL>
-
- <P>I then download and build on as many different canonical
- distributions as I can -- currently I am able to build on Red Hat
- 6.2, 7.0, and 7.1 on my personal hardware. Occasionally I receive
- opportunity from certain commercial enterprises such as Great
- Bridge and PostgreSQL, Inc. to build on other distributions.</P>
-
- <P>I test the build by installing the resulting packages and
- running the regression tests. Once the build passes these tests, I
- upload to the postgresql.org ftp server and make a release
- announcement. I am also responsible for maintaining the RPM
- download area on the ftp site.</P>
-
- <P>You'll notice I said 'canonical' distributions above. That
- simply means that the machine is as stock 'out of the box' as
- practical -- that is, everything (except select few programs) on
- these boxen are installed by RPM; only official Red Hat released
- RPMs are used (except in unusual circumstances involving software
- that will not alter the build -- for example, installing a newer
- non-RedHat version of the Dia diagramming package is OK --
- installing Python 2.1 on the box that has Python 1.5.2 installed is
- not, as that alters the PostgreSQL build). The RPM as uploaded is
- built to as close to out-of-the-box pristine as is possible. Only
- the standard released 'official to that release' compiler is used
- -- and only the standard official kernel is used as well.</P>
-
- <P>For a time I built on Mandrake for RedHat consumption -- no
- more. Nonstandard RPM building systems are worse than useless.
- Which is not to say that Mandrake is useless! By no means is
- Mandrake useless -- unless you are building Red Hat RPMs -- and Red
- Hat is useless if you're trying to build Mandrake or SuSE RPMs, for
- that matter. But I would be foolish to use 'Lamar Owen's Super
- Special RPM Blend Distro 0.1.2' to build for public consumption!
- :-)</P>
-
- <P>I _do_ attempt to make the _source_ RPM compatible with as many
- distributions as possible -- however, since I have limited
- resources (as a volunteer RPM maintainer) I am limited as to the
- amount of testing said build will get on other distributions,
- architectures, or systems.</P>
-
- <P>And, while I understand people's desire to immediately upgrade
- to the newest version, realize that I do this as a side interest --
- I have a regular, full-time job as a broadcast
- engineer/webmaster/sysadmin/Technical Director which occasionally
- prevents me from making timely RPM releases. This happened during
- the early part of the 7.1 beta cycle -- but I believe I was pretty
- much on the ball for the Release Candidates and the final
- release.</P>
-
- <P>I am working towards a more open RPM distribution -- I would
- dearly love to more fully document the process and put everything
- into CVS -- once I figure out how I want to represent things such
- as the spec file in a CVS form. It makes no sense to maintain a
- changelog, for instance, in the spec file in CVS when CVS does a
- better job of changelogs -- I will need to write a tool to generate
- a real spec file from a CVS spec-source file that would add version
- numbers, changelog entries, etc to the result before building the
- RPM. IOW, I need to rethink the process -- and then go through the
- motions of putting my long RPM history into CVS one version at a
- time so that version history information isn't lost.</P>
-
- <P>As to why all these files aren't part of the source tree, well,
- unless there was a large cry for it to happen, I don't believe it
- should. PostgreSQL is very platform-agnostic -- and I like that.
- Including the RPM stuff as part of the Official Tarball (TM) would,
- IMHO, slant that agnostic stance in a negative way. But maybe I'm
- too sensitive to that. I'm not opposed to doing that if that is the
- consensus of the core group -- and that would be a sneaky way to
- get the stuff into CVS :-). But if the core group isn't thrilled
- with the idea (and my instinct says they're not likely to be), I am
- opposed to the idea -- not to keep the stuff to myself, but to not
- hinder the platform-neutral stance. IMHO, of course.</P>
-
- <P>Of course, there are many projects that DO include all the files
- necessary to build RPMs from their Official Tarball (TM).</P>
-
- <H3><A name="1.11">1.11</A>) How are CVS branches managed?</H3>
-
- <P>This was written by Tom Lane:</P>
-
- <P>2001-05-07</P>
-
- <P>If you just do basic "cvs checkout", "cvs update", "cvs commit",
- then you'll always be dealing with the HEAD version of the files in
- CVS. That's what you want for development, but if you need to patch
- past stable releases then you have to be able to access and update
- the "branch" portions of our CVS repository. We normally fork off a
- branch for a stable release just before starting the development
- cycle for the next release.</P>
-
- <P>The first thing you have to know is the branch name for the
- branch you are interested in getting at. To do this, look at some
- long-lived file, say the top-level HISTORY file, with "cvs status
- -v" to see what the branch names are. (Thanks to Ian Lance Taylor
- for pointing out that this is the easiest way to do it.) Typical
- branch names are:</P>
-<PRE>
- REL7_1_STABLE
- REL7_0_PATCHES
- REL6_5_PATCHES
-</PRE>
-
- <P>OK, so how do you do work on a branch? By far the best way is to
- create a separate checkout tree for the branch and do your work in
- that. Not only is that the easiest way to deal with CVS, but you
- really need to have the whole past tree available anyway to test
- your work. (And you *better* test your work. Never forget that
- dot-releases tend to go out with very little beta testing --- so
- whenever you commit an update to a stable branch, you'd better be
- doubly sure that it's correct.)</P>
-
- <P>Normally, to checkout the head branch, you just cd to the place
- you want to contain the toplevel "pgsql" directory and say</P>
-<PRE>
- cvs ... checkout pgsql
-</PRE>
-
- <P>To get a past branch, you cd to whereever you want it and
- say</P>
-<PRE>
- cvs ... checkout -r BRANCHNAME pgsql
-</PRE>
-
- <P>For example, just a couple days ago I did</P>
-<PRE>
- mkdir ~postgres/REL7_1
- cd ~postgres/REL7_1
- cvs ... checkout -r REL7_1_STABLE pgsql
-</PRE>
-
- <P>and now I have a maintenance copy of 7.1.*.</P>
-
- <P>When you've done a checkout in this way, the branch name is
- "sticky": CVS automatically knows that this directory tree is for
- the branch, and whenever you do "cvs update" or "cvs commit" in
- this tree, you'll fetch or store the latest version in the branch,
- not the head version. Easy as can be.</P>
-
- <P>So, if you have a patch that needs to apply to both the head and
- a recent stable branch, you have to make the edits and do the
- commit twice, once in your development tree and once in your stable
- branch tree. This is kind of a pain, which is why we don't normally
- fork the tree right away after a major release --- we wait for a
- dot-release or two, so that we won't have to double-patch the first
- wave of fixes.</P>
-
- <H3><A name="1.12">1.12</A>) Where can I get a copy of the SQL
- standards?</H3>
-
- <P>There are two pertinent standards, SQL92 and SQL99. These
- standards are endorsed by ANSI and ISO. A draft of the SQL92
- standard is available at <a
- href="http://www.contrib.andrew.cmu.edu/~shadow/">
- http://www.contrib.andrew.cmu.edu/~shadow/</a>. The SQL99 standard
- must be purchased from ANSI at <a
- href="http://webstore.ansi.org/ansidocstore/default.asp">
- http://webstore.ansi.org/ansidocstore/default.asp</a>. The main
- standards documents are ANSI X3.135-1992 for SQL92 and ANSI/ISO/IEC
- 9075-2-1999 for SQL99.</P>
-
- <P>A summary of these standards is at <a
- href="http://dbs.uni-leipzig.de/en/lokal/standards.pdf">
- http://dbs.uni-leipzig.de/en/lokal/standards.pdf</a> and <a
- href="http://db.konkuk.ac.kr/present/SQL3.pdf">
- http://db.konkuk.ac.kr/present/SQL3.pdf</a>.</P>
-
- <CENTER>
- <H2>Technical Questions</H2>
- </CENTER>
-
- <H3><A name="2.1">2.1</A>) How do I efficiently access information in
- tables from the backend code?</H3>
-
- <P>You first need to find the tuples(rows) you are interested in.
- There are two ways. First, <I>SearchSysCache()</I> and related
- functions allow you to query the system catalogs. This is the
- preferred way to access system tables, because the first call to
- the cache loads the needed rows, and future requests can return the
- results without accessing the base table. The caches use system
- table indexes to look up tuples. A list of available caches is
- located in <I>src/backend/utils/cache/syscache.c.</I>
- <I>src/backend/utils/cache/lsyscache.c</I> contains many
- column-specific cache lookup functions.</P>
-
- <P>The rows returned are cache-owned versions of the heap rows.
- Therefore, you must not modify or delete the tuple returned by
- <I>SearchSysCache()</I>. What you <I>should</I> do is release it
- with <I>ReleaseSysCache()</I> when you are done using it; this
- informs the cache that it can discard that tuple if necessary. If
- you neglect to call <I>ReleaseSysCache()</I>, then the cache entry
- will remain locked in the cache until end of transaction, which is
- tolerable but not very desirable.</P>
-
- <P>If you can't use the system cache, you will need to retrieve the
- data directly from the heap table, using the buffer cache that is
- shared by all backends. The backend automatically takes care of
- loading the rows into the buffer cache.</P>
-
- <P>Open the table with <I>heap_open().</I> You can then start a
- table scan with <I>heap_beginscan(),</I> then use
- <I>heap_getnext()</I> and continue as long as
- <I>HeapTupleIsValid()</I> returns true. Then do a
- <I>heap_endscan().</I> <I>Keys</I> can be assigned to the
- <I>scan.</I> No indexes are used, so all rows are going to be
- compared to the keys, and only the valid rows returned.</P>
-
- <P>You can also use <I>heap_fetch()</I> to fetch rows by block
- number/offset. While scans automatically lock/unlock rows from the
- buffer cache, with <I>heap_fetch(),</I> you must pass a
- <I>Buffer</I> pointer, and <I>ReleaseBuffer()</I> it when
- completed.</P>
-
- <P>Once you have the row, you can get data that is common to all
- tuples, like <I>t_self</I> and <I>t_oid,</I> by merely accessing
- the <I>HeapTuple</I> structure entries. If you need a
- table-specific column, you should take the HeapTuple pointer, and
- use the <I>GETSTRUCT()</I> macro to access the table-specific start
- of the tuple. You then cast the pointer as a <I>Form_pg_proc</I>
- pointer if you are accessing the pg_proc table, or
- <I>Form_pg_type</I> if you are accessing pg_type. You can then
- access the columns by using a structure pointer:</P>
-<PRE>
-<CODE>((Form_pg_class) GETSTRUCT(tuple))-&gt;relnatts
-</CODE>
-</PRE>
- You must not directly change <I>live</I> tuples in this way. The
- best way is to use <I>heap_modifytuple()</I> and pass it your
- original tuple, and the values you want changed. It returns a
- palloc'ed tuple, which you pass to <I>heap_replace().</I> You can
- delete tuples by passing the tuple's <I>t_self</I> to
- <I>heap_destroy().</I> You use <I>t_self</I> for
- <I>heap_update()</I> too. Remember, tuples can be either system
- cache copies, which may go away after you call
- <I>ReleaseSysCache()</I>, or read directly from disk buffers, which
- go away when you <I>heap_getnext()</I>, <I>heap_endscan</I>, or
- <I>ReleaseBuffer()</I>, in the <I>heap_fetch()</I> case. Or it may
- be a palloc'ed tuple, that you must <I>pfree()</I> when finished.
-
- <H3><A name="2.2">2.2</A>) Why are table, column, type, function, view
- names sometimes referenced as <I>Name</I> or <I>NameData,</I> and
- sometimes as <I>char *?</I></H3>
-
- <P>Table, column, type, function, and view names are stored in
- system tables in columns of type <I>Name.</I> Name is a
- fixed-length, null-terminated type of <I>NAMEDATALEN</I> bytes.
- (The default value for NAMEDATALEN is 32 bytes.)</P>
-<PRE>
-<CODE>typedef struct nameData
- {
- char data[NAMEDATALEN];
- } NameData;
- typedef NameData *Name;
-</CODE>
-</PRE>
- Table, column, type, function, and view names that come into the
- backend via user queries are stored as variable-length,
- null-terminated character strings.
-
- <P>Many functions are called with both types of names, ie.
- <I>heap_open().</I> Because the Name type is null-terminated, it is
- safe to pass it to a function expecting a char *. Because there are
- many cases where on-disk names(Name) are compared to user-supplied
- names(char *), there are many cases where Name and char * are used
- interchangeably.</P>
-
- <H3><A name="2.3">2.3</A>) Why do we use <I>Node</I> and <I>List</I> to
- make data structures?</H3>
-
- <P>We do this because this allows a consistent way to pass data
- inside the backend in a flexible way. Every node has a
- <I>NodeTag</I> which specifies what type of data is inside the
- Node. <I>Lists</I> are groups of <I>Nodes chained together as a
- forward-linked list.</I></P>
-
- <P>Here are some of the <I>List</I> manipulation commands:</P>
-
- <BLOCKQUOTE>
- <DL>
- <DT>lfirst(i)</DT>
-
- <DD>return the data at list element <I>i.</I></DD>
-
- <DT>lnext(i)</DT>
-
- <DD>return the next list element after <I>i.</I></DD>
-
- <DT>foreach(i, list)</DT>
-
- <DD>
- loop through <I>list,</I> assigning each list element to
- <I>i.</I> It is important to note that <I>i</I> is a List *,
- not the data in the <I>List</I> element. You need to use
- <I>lfirst(i)</I> to get at the data. Here is a typical code
- snippet that loops through a List containing <I>Var *'s</I>
- and processes each one:
-<PRE>
-<CODE>List *i, *list;
-
- foreach(i, list)
- {
- Var *var = lfirst(i);
-
- /* process var here */
- }
-</CODE>
-</PRE>
- </DD>
-
- <DT>lcons(node, list)</DT>
-
- <DD>add <I>node</I> to the front of <I>list,</I> or create a
- new list with <I>node</I> if <I>list</I> is <I>NIL.</I></DD>
-
- <DT>lappend(list, node)</DT>
-
- <DD>add <I>node</I> to the end of <I>list.</I> This is more
- expensive that lcons.</DD>
-
- <DT>nconc(list1, list2)</DT>
-
- <DD>Concat <I>list2</I> on to the end of <I>list1.</I></DD>
-
- <DT>length(list)</DT>
-
- <DD>return the length of the <I>list.</I></DD>
-
- <DT>nth(i, list)</DT>
-
- <DD>return the <I>i</I>'th element in <I>list.</I></DD>
-
- <DT>lconsi, ...</DT>
-
- <DD>There are integer versions of these: <I>lconsi, lappendi,
- nthi.</I> <I>List's</I> containing integers instead of Node
- pointers are used to hold list of relation object id's and
- other integer quantities.</DD>
- </DL>
- </BLOCKQUOTE>
- You can print nodes easily inside <I>gdb.</I> First, to disable
- output truncation when you use the gdb <I>print</I> command:
-<PRE>
-<CODE>(gdb) set print elements 0
-</CODE>
-</PRE>
- Instead of printing values in gdb format, you can use the next two
- commands to print out List, Node, and structure contents in a
- verbose format that is easier to understand. List's are unrolled
- into nodes, and nodes are printed in detail. The first prints in a
- short format, and the second in a long format:
-<PRE>
-<CODE>(gdb) call print(any_pointer)
- (gdb) call pprint(any_pointer)
-</CODE>
-</PRE>
- The output appears in the postmaster log file, or on your screen if
- you are running a backend directly without a postmaster.
-
- <H3><A name="2.4">2.4</A>) I just added a field to a structure. What
- else should I do?</H3>
-
- <P>The structures passing around from the parser, rewrite,
- optimizer, and executor require quite a bit of support. Most
- structures have support routines in <I>src/backend/nodes</I> used
- to create, copy, read, and output those structures. Make sure you
- add support for your new field to these files. Find any other
- places the structure may need code for your new field. <I>mkid</I>
- is helpful with this (see above).</P>
-
- <H3><A name="2.5">2.5</A>) Why do we use <I>palloc</I>() and
- <I>pfree</I>() to allocate memory?</H3>
-
- <P><I>palloc()</I> and <I>pfree()</I> are used in place of malloc()
- and free() because we find it easier to automatically free all
- memory allocated when a query completes. This assures us that all
- memory that was allocated gets freed even if we have lost track of
- where we allocated it. There are special non-query contexts that
- memory can be allocated in. These affect when the allocated memory
- is freed by the backend.</P>
-
- <H3><A name="2.6">2.6</A>) What is elog()?</H3>
-
- <P><I>elog()</I> is used to send messages to the front-end, and
- optionally terminate the current query being processed. The first
- parameter is an elog level of <I>DEBUG</I> (levels 1-5), <I>LOG,</I>
- <I>INFO,</I> <I>NOTICE,</I> <I>ERROR,</I> <I>FATAL,</I> or
- <I>PANIC.</I> <I>NOTICE</I> prints on the user's terminal and the
- postmaster logs. <I>INFO</I> prints only to the user's terminal and
- <I>LOG</I> prints only to the server logs. (These can be changed
- from <I>postgresql.conf.</I>) <I>ERROR</I> prints in both places,
- and terminates the current query, never returning from the call.
- <I>FATAL</I> terminates the backend process. The remaining
- parameters of <I>elog</I> are a <I>printf</I>-style set of
- parameters to print.</P>
-
- <P><I>elog(ERROR)</I> frees most memory and open file descriptors so
- you don't need to clean these up before the call.</P>
-
- <H3><A name="2.7">2.7</A>) What is CommandCounterIncrement()?</H3>
-
- <P>Normally, transactions can not see the rows they modify. This
- allows <CODE>UPDATE foo SET x = x + 1</CODE> to work correctly.</P>
-
- <P>However, there are cases where a transactions needs to see rows
- affected in previous parts of the transaction. This is accomplished
- using a Command Counter. Incrementing the counter allows
- transactions to be broken into pieces so each piece can see rows
- modified by previous pieces. <I>CommandCounterIncrement()</I>
- increments the Command Counter, creating a new part of the
- transaction.</P>
-
- </BODY>
-</HTML>
diff --git a/doc/src/FAQ/FAQ_german.html b/doc/src/FAQ/FAQ_german.html
deleted file mode 100644
index 6c40523afce..00000000000
--- a/doc/src/FAQ/FAQ_german.html
+++ /dev/null
@@ -1,1136 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>PostgreSQL FAQ</title>
-</HEAD>
-<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#A00000" ALINK="#0000FF">
-<H1>
-H&auml;ufig gestellte Fragen (FAQ) zu PostgreSQL
-</H1>
-<P>
-Last updated: Sat Jul 10 00:37:57 EDT 1999
-<P>
-Current maintainer: Bruce Momjian (<a
-href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>) <BR>
-<P>
-Deutsche &Uuml;bersetzung von Karsten Schulz (<A HREF="mailto:schulz@linux-systemhaus.de">schulz@linux-systemhaus.de</a>) <BR>
-<P>
-Letzte Aktualisierung der deutschen &Uuml;bersetzung: Don, den 05.08.1999, 09:00 CET
-<P>
-Die aktuellste Version dieses Dokuments kann auf der PostgreSQL Website <A HREF="http://www.Postgresql.org">http://www.PostgreSQL.org</A> angesehen werden.
-<P>
-Linux-spezifische Fragen werden in <a href="http://www.PostgreSQL.org/docs/faq-linux.html">http://www.PostgreSQL.org/docs/faq-linux.html</a>
-beantwortet (deutsche &Uuml;bersetzung in Arbeit!).<P>
-
-Irix-spezifische Fragen werden in <a
-href="http://www.PostgreSQL.org/docs/faq-irix.html">http://www.PostgreSQL.org/docs/faq-irix.html</a> beantwortet.
-<P>
-
-HPUX-spezifische Fragen werden in <a
-href="http://www.PostgreSQL.org/docs/faq-hpux.shtml">http://www.PostgreSQL.org/docs/faq-hpux.shtml</a> beantwortet.
-<P>
-
-<HR><P>
-
-<H2><CENTER>Allgemeine Fragen</CENTER></H2>
-
-<a href="#1.1">1.1</a>) Was ist PostgreSQL?<BR>
-<a href="#1.2">1.2</a>) Welches Copyright liegt auf PostgreSQL?<BR>
-<a href="#1.3">1.3</a>) Auf welchen Unix-Plattformen l&auml;uft PostgreSQL?<BR>
-<a href="#1.4">1.4</a>) Welche Nicht-Unix-Versionen sind verf&uuml;gbar?<BR>
-<a href="#1.5">1.5</a>) Woher bekomme ich PostgreSQL?<BR>
-<a href="#1.6">1.6</a>) Wo bekomme ich Support f&uuml;r PostgreSQL?<BR>
-<a href="#1.7">1.7</a>) Was ist die neueste Version von PostgreSQL?<BR>
-<a href="#1.8">1.8</a>) Welche Dokumente sind f&uuml;r PostgreSQL verf&uuml;gbar?<BR>
-<a href="#1.9">1.9</a>) Wie erfahre ich etwas &uuml;ber bekannte Fehler oder fehlende Eigenschaften von PostgreSQL?<BR>
-<a href="#1.10">1.10</a>) Wie kann ich SQL lernen?<BR>
-<a href="#1.11">1.11</a>) Ist PostgreSQL Y2K (Jahr 2000) f&auml;hig?<BR>
-<a href="#1.12">1.12</a>) Wie kann ich am Entwicklerteam teilnehmen?<BR>
-<a href="#1.13">1.13</a>) Wie sende ich einen Fehler-Bericht?<BR>
-<a href="#1.14">1.14</a>) Wie l&auml;uft PostgreSQL im Vergleich zu anderen Datenbanksystemen?<BR>
-
-
-<H2><CENTER>Fragen zu Benutzerprogrammen</CENTER></H2>
-
-<a href="#2.1">2.1</a>) Gibt es ODBC-Treiber f&uuml;r PostgreSQL?<BR>
-<a href="#2.2">2.2</a>) Welche Werkzeuge gibt es, um PostgreSQL-Datenbanken &uuml;ber Webseiten
-verf&uuml;gbar zu machen?<BR>
-<a href="#2.3">2.3</a>) Hat PostgreSQL eine grafische Benutzerschnittstelle?
-Einen Report-Generator? Eine eingebaute Query-Schnittstelle?<BR>
-<a href="#2.4">2.4</a>) Welche Sprachen sind f&uuml;r die Kommunikation mit PostgreSQL verf&uuml;gbar?<BR>
-
-
-<H2><CENTER>Administrative Fragen</CENTER></H2>
-
-<a href="#3.1">3.1</a>) Warum schl&auml;gt initdb fehl?<BR>
-<a href="#3.2">3.2</a>) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?<BR>
-<a href="#3.3">3.3</a>) Wenn ich den postmaster starte, bekomme ich einen <I>Bad System Call</I> oder eine <I>core dumped</I> Meldung. Warum?<BR>
-<a href="#3.4">3.4</a>) Wenn ich versuche, den postmaster zu starten, bekomme ich eine <I>IpcMemoryCreate</I> Fehlermeldungen. Warum?<BR>
-<a href="#3.5">3.5</a>) Wenn ich versuche, den postmaster zu starten, bekomme ich eine <I>IpcSemaphoreCreate</I> Fehlermeldungen. Warum?<BR>
-<a href="#3.6">3.6</a>) Wie verhindere ich, da&szlig; andere Hosts auf meine PostgreSQL Datenbanken zugreifen?<BR>
-<a href="#3.7">3.7</a>) Warum kann ich mich nicht von einer anderen Maschine mit meiner Datenbank verbinden?<BR>
-<a href="#3.8">3.8</a>) Warum kann ich nicht als <I>root</I> auf die Datenbank zugreifen?<BR>
-<a href="#3.9">3.9</a>) Alle meine Server st&uuml;rzen bei gleichzeitigem Tabellenzugriff ab. Warum?<BR>
-<a href="#3.10">3.10</a>) Wie optimiere ich die Datenbankmaschine f&uuml;r bessere Leistung?<BR>
-<a href="#3.11">3.11</a>) Welche Debugging/Fehlersuch-Hilfsmittel sind f&uuml;r PostgreSQL verf&uuml;gbar?<BR>
-<a href="#3.12">3.12</a>) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine Verbindung versuche. Warum?<BR>
-<a href="#3.13">3.13</a>) Was sind die pg_psort.XXX Dateien in meinem Datenbank-Verzeichnis?<BR>
-<a href="#3.14">3.14</a>) Wie richte ich eine Benutzergruppe (pg_group) ein?<BR>
-
-<H2><CENTER>Fragen zum Betrieb</CENTER></H2>
-
-<a href="#4.1">4.1</a>) Das System scheint Kommata, Dezimalpunkte und Datumsformate durcheinanderzubringen.<BR>
-<a href="#4.2">4.2</a>) Was ist der genauer Unterschied zwischen Binary Cursors und Normal Cursors?<BR>
-<a href="#4.3">4.3</a>) Wie w&auml;hle ich per <I>SELECT</I> nur die ersten paar Zeilen in einem Query aus?<BR>
-
-<a href="#4.4">4.4</a>) Wie bekomme ich eine Liste der Tabellen oder anderen Dingen, die ich in <I>psql</I> sehen kann<BR>
-<a href="#4.5">4.5</a>) Wie entferne ich eine Spalte von einer Tabelle?<BR>
-
-<a href="#4.6">4.6</a>) Was ist die Maximalgr&ouml;&szlig;e f&uuml;r eine Zeile, eine Tabelle, eine Datenbank?<BR>
-<a href="#4.7">4.7</a>) Wieviel Plattenplatz ben&ouml;tigt eine Datenbank zur Speicherung einer Datendatei mit zeilenweisen Datens&auml;tzen?<BR>
-
-<a href="#4.8">4.8</a>) Wie finde ich heraus, welche Indizes oder Operationen in der Datenbank definiert sind?<BR>
-<a href="#4.9">4.9</a>) Meine Queries sind langsam oder nutzen die Indizes nicht. Warum?<BR>
-<a href="#4.10">4.10</a>) Auf welche Weise kann ich sehen, wie der Query-Optimierer meine Abfrage auswertet?<BR>
-<a href="#4.11">4.11</a>) Was ist ein R-Tree Index?<BR>
-<a href="#4.12">4.12</a>) Was ist "Genetic Query Optimization"?<BR>
-
-<a href="#4.13">4.13</a>) Wie verfahre ich bei der Suche mit regul&auml;ren Ausdr&uuml;cken und bei
- einer Suche mit Ignorierung der Gro&szlig;- und Kleinschreibweisen?<BR>
-<a href="#4.14">4.14</a>) Wie ermittle ich in einem Query, da&szlig; ein Feld NULL ist?<BR>
-<a href="#4.15">4.15</a>) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?<BR>
-<a href="#4.16">4.16</a>) Wie erzeuge ich ein serielles Feld mit automatischer Erh&ouml;hung des Inhalts?<BR>
-
-<a href="#4.17">4.17</a>) Was ist ein Oid? Was ist ein Tid?<BR>
-<a href="#4.18">4.18</a>) Was ist die Bedeutung der verschiedenen Ausdr&uuml;cke, die in PostgreSQL benutzt werden (z.B. attribute, class,...)?<BR>
-
-<a href="#4.19">4.19</a>) Wieso bekomme ich einen Fehler: "FATAL: palloc failure: memory exhausted?"<BR>
-<a href="#4.20">4.20</a>) Wie kann ich feststellen, welche PostgreSQL-Version ich laufen habe?<BR>
-<a href="#4.21">4.21</a>) Beim Arbeiten mit "Large-Objects" kommt die Fehlermeldung: <I>invalid large obj descriptor.</I> Warum?<BR>
-
-<H2><CENTER>PostgreSQL erweitern</CENTER></H2>
-
-<a href="#5.1">5.1</a>) Ich habe eine benutzerdefinierte Funktion geschrieben. Wenn ich sie in <I>psql</I> aufrufe, kommt ein <I>core dump</I>. Warum?<BR>
-<a href="#5.2">5.2</a>) Was bedeutet die Meldung: <I>NOTICE:PortalHeapMemoryFree: 0x402251d0 not in alloc set!</I>?<BR>
-<a href="#5.3">5.3</a>) Wie kann ich ein paar elegante neue Feldtypen und Funktionen zu PostgreSQL beitragen?<BR>
-<a href="#5.4">5.4</a>) Wie schreibe ich eine Funktion in C, die ein Tuple zur&uuml;ckliefert?<BR>
-<a href="#5.5">5.5</a>) Ich habe eine der Quellendateien ge&auml;ndert. Warum macht sich die &Auml;nderung beim erneuten Compilerlauf nicht bemerkbar?<BR>
-
-<HR>
-
-<H2><CENTER>Allgemeine Fragen</CENTER></H2>
-<H4><a
-name="1.1">1.1</a>) Was ist PostgreSQL?</H4><P>
-
-PostgreSQL ist eine Verbesserung des POSTGRES-Datenbank-Managementsystems, ein
-"Next-Generation" DBMS-Forschungsprototyp. W&auml;hrend PostgreSQL das leistungsf&auml;hige Datenmodell und
-die reichhaltigen Datentypen von POSTGRES beibeh&auml;lt, ersetzt es die PostQuel-Abfragesprache durch
-eine ausgedehnte Teilmenge von SQL. PostgreSQL ist frei und der komplette Quellcode ist verf&uuml;gbar.
-<P>
-
-Die PostgreSQL-Entwicklung wird von einem Team von Internet-Entwickler durchgef&uuml;hrt, die alle an
-der PostgreSQL-Entwicklungs-Mailingliste teilnehmen. Der aktuelle Koordinator ist Marc G. Fournier
-(<a href="mailto:scrappy@postgreSQL.org">scrappy@postgreSQL.org</a>) (siehe unten, wie
-man sich anmelden kann). Dieses Team ist jetzt f&uuml;r alle aktuellen und zuk&uuml;nftigen Entwicklungen von PostgreSQL
-verantwortlich.
-
-<P>
-
-
-Die Autoren von PostgreSQL 1.01 waren Andrew Yu und Jolly Chen. Viele andere haben zur Portierung,
-zu den Tests, zur Fehlersuche und zur Verbesserung des Codes beigetragen.
-Der urspr&uuml;ngliche Postgres-Code, von dem PostgreSQL abstammt, ist auf die Bem&uuml;hungen von
-vielen Studierenden und Diplomanden, sowie Programmierern, die unter
-der Weisung des Professors Michael Stonebraker an der Universit&auml;t von Kalifornien, Berkeley
-arbeiteteten, zur&uuml;ckzuf&uuml;hren.
-
-<P>
-
-Der urspr&uuml;ngliche Name der Software bei Berkeley war Postgres. Als die SQL-Funktionalit&auml;t 1995
-hinzugef&uuml;gt wurde, wurde sein Name zu Postgres95 ge&auml;ndert. Der Name wurde Ende 1996 zu
-PostgreSQL ge&auml;ndert.
-<P>
-
-<H4><a name="1.2">1.2</a>) Welches Copyright liegt auf PostgreSQL?</H4><P>
-
-PostgreSQL steht unter folgendem COPYRIGHT (Originaltext):<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>
-
-Es gilt die Copyright-Klausel im Original! Informativ folgt hier eine
-&Uuml;bersetzung. Die &Uuml;bersetzung besitzt keinerlei rechtlichen Status.
-Insbesondere kann sich niemand auf diese &Uuml;bersetzung berufen:
-<BR><P>
-
-PostgreSQL Datenbank Management System<P>
-
-Copyright (c) 1994-6 Regents of the University of California<P>
-
-Die Erlaubnis, diese Software und seine Unterlagen f&uuml;r jeden m&ouml;glichen Zweck, ohne Geb&uuml;hr und ohne
-eine schriftliche Vereinbarung zu benutzen, zu kopieren, zu &auml;ndern und zu verteilen wird hiermit
-bewilligt, vorausgesetzt da&szlig; der oben genannte Urheberrechtsvermerk und dieser Paragraph und die
-folgenden zwei Paragraphen in allen Kopien erscheinen. <P>
-
-IN KEINEM FALL IST DIE UNIVERSIT&Auml;T VON KALIFORNIEN GEGEN&Uuml;BER JEDEM M&Ouml;GLICHEN BETEILIGTEN F&Uuml;R DIE DIREKTEN,
-INDIREKTEN, SPEZIELLEN, BEIL&Auml;UFIGEN ODER FOLGESCH&Auml;DEN, EINSCHLIE&szlig;LICH DER VERLORENEN PROFITE
-VERANTWORTLICH, DIE AUS DEM GEBRAUCH VON DIESER SOFTWARE UND SEINEN UNTERLAGEN
-HERAUS ENTSTEHEN, SELBST WENN DIE UNIVERSIT&Auml;T VON KALIFORNIEN VON DER M&Ouml;GLICHKEIT SOLCHEN SCHADENS
-BENACHRICHTIGT WORDEN IST. <P>
-
-DIE UNIVERSIT&Auml;T VON KALIFORNIEN LEHNT SPEZIELL ALLE M&Ouml;GLICHE GARANTIEN AB,
-EINSCHLIESSLICH, ABER NICHT BEGRENZT AUF, DIE IMPLIZIERTEN GARANTIEN VON
-GESCH&Auml;FTSNUTZEN UND EIGNUNG ZU EINEM BESTIMMTEN ZWECK. DIE SOFTWARE, DIE
-NACHSTEHEND BEREITGESTELLT WIRD, BASIERT AUF EINER "SO WIE SIE IST"-GRUNDLAGE, UND DIE UNIVERSIT&Auml;T
-VON KALIFORNIEN HAT KEINE VERPFLICHTUNGEN, WARTUNG, SUPPORT,
-AKTUALISIERUNGSVORG&Auml;NGE, VERBESSERUNGEN ODER &Auml;NDERUNGEN ZUR VERF&Uuml;GUNG
-ZU STELLEN.
-
-<H4><a name="1.3">1.3</a>) Auf welchen Unix-Plattformen l&auml;uft PostgreSQL?</H4><P>
-
-Die Autoren haben PostgreSQL auf folgenden Plattformen kompiliert und getestet
-(einige dieser Kompilierungen ben&ouml;tigen den C-Compiler gcc):
-<UL>
-<LI> aix - IBM auf AIX 3.2.5 or 4.x
-<LI> alpha - DEC Alpha AXP auf Digital Unix 2.0, 3.2, 4.0
-<LI> BSD44_derived - OS abgeleitet von 4.4-lite BSD (NetBSD, FreeBSD)
-<LI> bsdi - BSD/OS 2.x, 3.x, 4.x
-<LI> dgux - DG/UX 5.4R4.11
-<LI> hpux - HP PA-RISC auf HP-UX 9.*, 10.*
-<LI> i386_solaris - i386 Solaris
-<LI> irix5 - SGI MIPS auf IRIX 5.3
-<LI> linux - Intel i86
- Alpha
- SPARC
- PPC
- M68k
-<LI> sco - SCO 3.2v5
- Unixware
-<LI> sparc_solaris - SUN SPARC auf Solaris 2.4, 2.5, 2.5.1
-<LI> sunos4 - SUN SPARC auf SunOS 4.1.3
-<LI> svr4 - Intel x86 auf Intel SVR4 and MIPS
-<LI> ultrix4 - DEC MIPS auf Ultrix 4.4
-</UL>
-<P>
-
-<H4><a name="1.4">1.4</a>) Welche Nicht-Unix-Versionen sind verf&uuml;gbar?</H4><P>
-
-Es ist m&ouml;glich, die libpq C-Bibliothek, psql und andere Schnittstellen und Binaries zu
-kompilieren, um sie auf der MS-Windows-Plattform laufen zu lassen.
-In diesem Fall l&auml;uft der Client auf MS-Windows und steht &uuml;ber TCP/IP mit einem
-Server in Verbindung, der auf einer unserer unterst&uuml;tzten Unixplattformen l&auml;uft.
-
-Es gibt die Datei <I>win31.mak</I> in der Distribution, um die Win32 libpq-Bibliothek und psql
-zu erzeugen.<P>
-
-Der Datenbankserver arbeitet jetzt auch unter Benutzung der Cygnus Unix/NT-Porting-Bibliotheken
-auf Windows NT. Siehe auch pgsql/doc/README.NT in der Distribution.<P>
-
-Es gibt eine weitere Portierung, die U/Win benutzt bei <A HREF="http://surya.wipro.com/uwin/ported.html">http://surya.wipro.com/uwin/ported.html.</A>
-
-
-<H4><a name="1.5">1.5</a>) Woher bekomme ich PostgreSQL?</H4><P>
-Die erste Anlaufadresse f&uuml;r PostgreSQL ist der ftp-Server <a href="ftp://ftp.postgreSQL.org/pub">ftp://ftp.postgreSQL.org/pub</a>
-<P>
-
-Die entsprechenden Spiegelserver sind auf der Hauptwebseite aufgelistet.
-
-<H4><a name="1.6">1.6</a>) Wo bekomme ich Support f&uuml;r PostgreSQL?</H4><P>
-
-Es gibt keinen offiziellen Support f&uuml;r PostgreSQL von der Universit&auml;t von Kalifornien, Berkeley. Der
-Support wird durch freiwilligen Einsatz geleistet.
-<P>
-
-Die Mailing-Liste ist: <a href="mailto:pgsql-general@postgreSQL.org">pgsql-general@postgreSQL.org</a>.
-Die Liste ist f&uuml;r PostgreSQL betreffende Themen vorbehalten. Um sich anzumelden, sende eine
-Email mit folgenden Zeilen im Text (nicht in der Betreffzeile):
-
-<PRE>
-<CODE>
- subscribe
- end
-</CODE>
-</PRE><P>
-
-an <a href="mailto:pgsql-general-request@postgreSQL.org">pgsql-general-request@postgreSQL.org</a>.<P>
-
-Es gibt auch eine Digest-Liste (Eine Liste, die Mails zusammengefasst sendet).
-Um sich an dieser Digestliste anzumelden, sende eine Email an:
-<a href="mailto:pgsql-general-digest-request@postgreSQL.org">pgsql-general-digest-request@postgreSQL.org</a>
-mit folgendem Text:
-
-<PRE>
-<CODE>
- subscribe
- end
-</CODE>
-</PRE>
-
-Die Digests werden an die Mitglieder der Liste geschickt, wenn ca. 30kB an Mails
-zusammengekommen sind.<P>
-
-Die Bug-Mailingliste ist verf&uuml;bar. Um sich an dieser Liste anzumelden,
-sende eine Email an <a href="mailto:bugs-request@postgreSQL.org">bugs-request@postgreSQL.org</a>
-mit folgendem Text:<P>
-
-<PRE>
-<CODE>
- subscribe
- end
-</CODE>
-</PRE>
-
-Es gibt ebenfalls eine Entwickler-Diskussionsliste. Um sich an dieser Liste anzumelden,
-sende eine Email an <a href="mailto:hackers-request@postgreSQL.org">hackers-request@postgreSQL.org</a>
-mit diesem Text:<P>
-
-<PRE>
-<CODE>
- subscribe
- end
-</CODE>
-</PRE><P>
-
-Weitere Mailinglisten und Informationen zu PostgreSQL k&ouml;nnen auf der PostgreSQL-Homepage im WWW
-gefunden werden:
-<BLOCKQUOTE>
-<a href="http://postgreSQL.org">http://postgreSQL.org</a>
-</BLOCKQUOTE><P>
-
-Es gibt au&szlig;erdem einen IRC-Channel im EFNet, Kanal #PostgreSQL.
-Bruce nutzt den Unix-Befehl: <CODE>irc -c '#PostgreSQL' "$USER" irc.phoenix.net</CODE> um teilzunehmen<P>
-
-Kommerzieller Support f&uuml;r PostgreSQL ist bei <a href="http://www.pgsql.com">http://www.pgsql.com/</a> verf&uuml;gbar<P>
-
-
-<H4><a name="1.7">1.7</a>) Was ist die neueste Version von PostgreSQL?</H4><P>
-
-Das neueste Release von PostgreSQL ist die Version 6.5.<P>
-
-Wir planen alle 4 Monate Hauptreleases herauszugeben.<P>
-
-
-<H4><a name="1.8">1.8</a>) Welche Dokumente sind f&uuml;r PostgreSQL verf&uuml;gbar? </H4><P>
-
-Einige Handb&uuml;cher, Man-Pages und einige kleine Testprogramme sind in der Distribution enthalten.
-Siehe im /doc-Verzeichnis.<P>
-
-<I>psql</I>
-hat einige nette \d-Befehle, um Informationen &uuml;ber Typen, Operatoren, Funktionen, Aggregate, usw. zu zeigen. <P>
-
-Die Website enth&auml;lt sogar noch mehr Unterlagen.<P>
-
-<H4><a name="1.9">1.9</a>) Wie erfahre ich etwas &uuml;ber bekannte Fehler oder fehlende Eigenschaften von PostgreSQL?
-</H4><P>
-
-
-PostgreSQL unterst&uuml;tzt eine ausgedehnte Untermenge von SQL-92.
-Siehe unser <a href="http://www.postgreSQL.org/docs/todo.html">TODO</a>
-f&uuml;r eine Auflistung der bekannten Fehler, fehlende Eigenschaften und zuk&uuml;nftige Pl&auml;ne.<P>
-
-
-<H4><a name="1.10">1.10</a>) Wie kann ich SQL lernen?</H4><P>
-
-Es gibt nette SQL-Tutorials bei <a href="http://w3.one.net/~jhoffman/sqltut.htm">
-http://w3.one.net/~jhoffman/sqltut.htm</a> und bei <a href="http://ourworld.compuserve.com/homepages/Graeme_Birchall/DB2_COOK.HTM">
-http://ourworld.compuserve.com/homepages/Graeme_Birchall/DB2_COOK.HTM.</a><P>
-
-Viele unserer User m&ouml;gen <I>The Practical SQL Handbook</I>, Bowman et al.,
-Addison Wesley.<P>
-
-
-<H4><a name="1.11">1.11</a>) Ist PostgreSQL Y2K (Jahr 2000) f&auml;hig?</H4><P>
-
-Ja, wir k&ouml;nnen Datumsangaben nach dem Jahr 2000 n.Chr. und vor 2000 v.Chr. leicht
-verarbeiten.<P>
-
-<H4><a name="1.12">1.12</a>) Wie kann ich am Entwicklerteam teilnehmen?</H4><P>
-
-Zuerst lade die neuesten Quellen herunter und lies die PostgreSQL-Entwicklerunterlagen
-auf unserer Website oder in der Distribution. Zweitens melde Dich zu den Mailinglisten
-pgsql-hackers und pgsql-patches an. Drittens sende qualitativ hochwertige Programm&auml;nderungen
-an die pgsql-patches Mailingliste.<P>
-
-Es gibt ungef&auml;hr ein Dutzend Leute, die das <I>commit</I>-Recht im PostgreSQL-CVS Archiv haben.
-Alle haben so viele hochwertige Patches eingebracht, da&szlig; es schwer f&uuml;r die
-CVS-Verwalter war, mitzuhalten. Und wir hatten das Vertrauen, da&szlig;
-die &Auml;nderungen, die sie festlegten, sehr wahrscheinlich von hoher Qualit&auml;t sind. <P>
-
-<H4><a name="1.13">1.13</a>) Wie sende ich einen Fehler-Bericht?</H4><P>
-
-F&uuml;lle die "Fehler-Vorlage"-Datei (bug.template im doc-Verzeichnis) aus und sende sie an:
-<a href="mailto:bugs@postgreSQL.org">bugs@postgreSQL.org</a><P>
-
-&Uuml;berpr&uuml;fe auch den ftp-Server <a href="ftp://ftp.postgreSQL.org/pub">ftp://ftp.postgreSQL.org/pub</a>,
-um nachzusehen, ob es eine neuere PostgreSQL-Version oder neue Patches gibt.
-<P>
-
-
-<H4><a name="1.14">1.14</a>) Wie l&auml;uft PostgreSQL im Vergleich zu anderen Datenbanksystemen?</H4><P>
-
-Es gibt verschiedene Methoden, Software zu messen: Eigenschaften, Leistung,
-Zuverl&auml;ssigkeit, Support und Preis.<P>
-
-<DL>
-<DT> <B>Eigenschaften</B>
-<DD>
-
-PostgreSQL hat die meisten Eigenschaften, die in gro&szlig;en kommerziellen DBMS's, wie
-Transaktionen, Sub-SELECTs, Trigger, Views und verfeinertes Locking, vorhanden sind.
-Wir haben einige Eigenschaften, die andere nicht haben, wie benutzerbestimmte Typen, Vererbung,
-Regeln, und die Multi-Versionen-Steuerung zum Verringern von konkurrierenden Locks.
-Wir haben keine referentielle Integrit&auml;t von externen Schl&uuml;sseln oder Outer Joins,
-aber wir arbeiten an diesen Dingen f&uuml;r unser n&auml;chstes Release.<P>
-
-<DT> <B>Leistung</B>
-<DD>
-
-PostgreSQL l&auml;uft in zwei Modi. Im normalen <I>fsync</I>-Modus wird jede komplette Transaktion
-auf die Platte geschrieben und garantiert, da&szlig;, selbst wenn das Betriebssystem abst&uuml;rzt und
-der Strom ausf&auml;llt, die Daten sicher gespeichert wurden.
-In diesem Modus sind wir langsamer als die meisten kommerziellen Datenbanken,
-zum Teil, weil wenige von ihnen solch eine konservatives Methode der Datenspeicherung in ihren
-Standardbetriebsmodi betreiben.<P>
-
-Im <I>no-fsync</I>-Modus sind wir normalerweise schneller als kommerzielle Datenbanken. In
-diesem Modus kann ein Betriebssystemabsturz jedoch Datenkorruption zur Folge haben.
-Wir arbeiten daran, einen Zwischenmodus zur Verf&uuml;gung zu stellen, der unter weniger Leistungseinbu&szlig;e
-leidet als der <I>fsync</I>-Modus und die Datenintegrit&auml;t innerhalb 30 Sekunden
-im Falle eines Betriebssystemabsturzes erlaubt. Der Modus ist durch den Datenbankverwalter
-ausw&auml;hlbar.<P>
-
-Im Vergleich zu MySQL oder schlankeren Datenbanksystemen sind wir hinsichtlich INSERTs/UPDATEs langsamer,
-weil wir einen Transaktions-Overhead haben.
-Selbstverst&auml;ndlich hat MySQL kaum eine der Eigenschaften, die oben im Kapitel <I>Eigenschaften</I> erw&auml;hnt werden.
-PostgreSQL ist f&uuml;r Flexibilit&auml;t und gute Eigenschaften designed, trotzdem fahren wir fort,
-die Leistung durch Profiling und Quellcodeanalyse zu verbessern.<P>
-
-
-
-<DT> <B>Zuverl&auml;ssigkeit</B>
-<DD>
-
-Wir stellen fest, da&szlig; ein DBMS zuverl&auml;ssig sein mu&szlig;, oder es ist wertlos. Wir bem&uuml;hen uns,
-gut gepr&uuml;ften, best&auml;ndigen Code freizugeben, der nur ein Minimum an Programmfehler hat.
-Jede Freigabe hat mindestens einen Monat Betatestphase hinter sich, und unsere Freigabehistorie zeigt,
-da&szlig; wir stabile, solide Versionen freigeben, die im Produktionsbetrieb
-genutzt werden k&ouml;nnen. Wir glauben, da&szlig; wir im Vergleich mit anderer
-Datenbanksoftware vorteilhaft dastehen.<P>
-
-<DT> <B>Support</B>
-<DD>
-
-Unsere Mailingliste stellt eine gro&szlig;e Gruppe Entwickler und Benutzer zur Behebung aller
-m&ouml;glichen anzutreffenden Probleme zur Verf&uuml;gung.
-
-Wir k&ouml;nnen nicht immer eine Fehlerbehebung garantieren,
-kommerzielle DBMS's tun dies aber auch nicht.
-
-Direkter Zugriff zu den Entwicklern, zur Benutzergemeinschaft, zu den Handb&uuml;chern und zum Quellcode bietet h&auml;ufig
-h&ouml;herwertigen PostgreSQL-Support im Vergleich zu anderen DBMS's.
-
-Es gibt den kommerziellen "Pro-Ereignis"-Support,
-der f&uuml;r diejenigen bereitgestellt wird, die ihn ben&ouml;tigen. (siehe Support-Faq), <P>
-
-<DT> <B>Preis</B>
-<DD>
-PostgrSQL ist frei verf&uuml;gbar, sowohl f&uuml;r die kommerzielle, wie f&uuml;r die nicht-kommerzielle
-Nutzung. Du kannst Deinen Code fast ohne Beschr&auml;nkungen zu unserem hinzuf&uuml;gen. Die einzigen
-Beschr&auml;nkungen werden in der BSD-artigen Lizenz weiter oben aufgef&uuml;hrt.
-</DL>
-
-
-<HR>
-
-<H2><CENTER>Fragen zu Benutzerprogrammen</CENTER></H2>
-
-
-
-<H4><a name="2.1">2.1</a>) Gibt es ODBC-Treiber f&uuml;r PostgreSQL?</H4><P>
-
-Es sind zwei ODBC-Treiber verf&uuml;gbar: PostODBC und OpenLink ODBC.<P>
-
-PostODBC ist in der Distribution enthalten. Mehr Informationen k&ouml;nnen unter
-<a href="http://www.insightdist.com/psqlodbc">http://www.insightdist.com/psqlodbc</a> abgerufen werden.<P>
-
-OpenLink ODBC kann unter <a href="http://www.openlinksw.com/">http://www.openlinksw.com</a>
-geholt werden.
-Die Software arbeitet mit OpenLinks Standard-ODBC-Client, so da&szlig; PostgreSQL-ODBC auf
-jeder Client-Plattform zur Verf&uuml;gung steht, die unterst&uuml;tzt wird (Win, Mac, Unix, VMS).<P>
-
-Sie werden dieses Produkt wahrscheinlich an Leute verkaufen, die kommerziellen Qualit&auml;ts-Support
-brauchen, aber es wird immer eine Freeware-Version verf&uuml;gbar sein.
-Fragen dazu bitte an <a href="mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</a>.<P>
-
-
-
-<H4><a name="2.2">2.2</a>) Welche Werkzeuge gibt es, um PostgreSQL-Datenbanken &uuml;ber Webseiten
-verf&uuml;gbar zu machen?</H4><P>
-
-Eine nette Einf&uuml;hrung zu Datenbank-gest&uuml;tzten Webseiten kann unter
-<a href="http://www.webtools.com">http://www.webtools.com</a> abgerufen werden.<P>
-
-Eine weitere gibt es bei <a href="http://www.phone.net/home/mwm/hotlist/">
-http://www.phone.net/home/mwm/hotlist/.</a><P>
-
-F&uuml;r die Web-Integration ist PHP eine ausgezeichnete Schnittstelle.
-PHP gibt es bei <a href="http://www.php.net">http://www.php.net</a><P>
-
-PHP ist hervorragend f&uuml;r einfache Anbindungen geeignet. F&uuml;r komplexere
-Aufgaben nutzen viele die Perl-Schnittstelle mit CGI.pm.<P>
-
-Einen WWW-Gateway, basierend auf WDB, kann man bei
-<a href="http://www.eol.ists.ca/~dunlop/wdb-p95">http://www.eol.ists.ca/~dunlop/wdb-p95</a> herunterladen.
-
-<H4><a name="2.3">2.3</a>) Hat PostgreSQL eine grafische Benutzerschnittstelle?
-Einen Report-Generator? Eine eingebaute Query-Schnittstelle?</H4><P>
-
-Wir haben eine nette grafische Benutzerschnittstelle mit Namen
-<I>pgaccess,</I> welche in der Distribution enthalten ist.
-<I>pgaccess</I> hat auch einen Reportgenerator. Die Webpage liegt hier:
-<A HREF="http://www.flex.ro/pgaccess">http://www.flex.ro/pgaccess</A><P>
-
-In der Distribution gibt es au&szlig;erdem <I>ecpg,</I>,
-welches eine eingebundene SQL-Query-Schnittstelle f&uuml;r C zur Verf&uuml;gung stellt.
-
-
-<H4><a name="2.4">2.4</a>) Welche Sprachen sind f&uuml;r die Kommunikation mit PostgreSQL verf&uuml;gbar?</H4><P>
-
-Wir haben:
-<UL>
-<LI>C(libpq)
-<LI>C++(libpq++)
-<LI>Embedded C(ecpg)
-<LI>Java(jdbc)
-<LI>Perl(perl5)
-<LI>ODBC(odbc)
-<LI>Python(PyGreSQL)
-<LI>TCL(libpgtcl)
-<LI>ein rohes C/4GL(contrib/pginterface)
-<LI>Embedded HTML(<a href="http://www.php.net">PHP from http://www.php.net</a>)
-</UL><P>
-
-<HR>
-
-<H2><CENTER>Administrative Fragen</CENTER></H2><P>
-
-
-<H4><a name="3.1">3.1</a>) Warum schl&auml;gt initdb fehl?</H4><P>
-
-<UL>
-<LI>
-&uuml;berpr&uuml;fe, da&szlig; keine Binaries vorheriger Versionen in Deinem Pfad
-(PATH-Variable) sind.
-(Wenn Du die Meldung siehst: <CODE>NOTICE:heap_modifytuple: repl is \ 9</CODE>, ist das das Problem.)
-<Li> &uuml;berpr&uuml;fe, da&szlig; der Pfad richtig gesetzt ist
-<LI> &uuml;berpr&uuml;fe, ob der User <I>postgres</I> der Eigent&uuml;mer der entsprechenden Dateien ist
-</UL><P>
-
-
-<H4><a name="3.2">3.2</a>) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?</H4><P>
-
-Der einfachste Weg ist mittels der --prefix Option beim configure den Pfad anzugeben.
-Falls Du das vergessen haben solltest, kannst Du die Datei Makefile.global &auml;ndern und
-POSTGRESDIR entsprechend anpassen, oder Du erzeugst ein Makefile.custom und definierst POSTGRESDIR dort.
-<P>
-
-
-<H4><a name="3.3">3.3</a>) Wenn ich den postmaster starte, bekomme ich einen <I>Bad System Call</I> oder eine <I>core dumped</I> Meldung. Warum?</H4><P>
-
-Das kann verschiedene Ursachen haben. &Uuml;berpr&uuml;fe zuerst, ob Dein Kernel System V Extensions
-enth&auml;lt. PostgreSQL ben&ouml;tigt die Kernel-Unterst&uuml;tzung f&uuml;r Shared Memory und Semaphoren.
-<P>
-
-
-<H4><a name="3.4">3.4</a>) Wenn ich versuche, den postmaster zu starten, bekomme ich <I>IpcMemoryCreate</I> Fehlermeldungen. Warum?</H4><P>
-
-Du hast entweder den Kernel nicht f&uuml;r Shared Memory konfiguriert, oder Du mu&szlig;t den
-Shared Memory Bereich vergr&ouml;&szlig;ern.
-Die genaue Gr&ouml;&szlig;e h&auml;ngt von Deiner Systemarchitektur ab und mit wievielen
-Puffern und Serverprozessen Du postmaster konfiguriert hast.
-F&uuml;r die meisten Systeme, mit Standardangaben f&uuml;r Puffer und Prozessen ben&ouml;tigst
-Du ein Minimum von ca. 1 MB.
-
-
-<H4><a name="3.5">3.5</a>) Wenn ich versuche, den postmaster zu starten, bekomme ich <I>IpcSemaphoreCreate</I> Fehlermeldungen. Warum?</H4><P>
-
-Falls die Fehlermeldung <I>IpcSemaphoreCreate: semget failed (No space
-left on device)</I> lautet, dann ist Dein Kernel mit zu wenig Semaphoren konfiguriert.
-
-Postgres ben&ouml;tigt eine Semaphore pro m&ouml;glichen Backend-Prozess.
-Eine Zwischenl&ouml;sung w&auml;re, postmaster mit einer geringeren Anzahl an Backend-Prozessen zu starten.
-Benutze dazu die <I>-N</I> Option mit einem Wert kleiner als die standardm&auml;&szlig;igen 32.
-
-Eine dauerhafte L&ouml;sung w&auml;re es, die Kernel-Parameter
-<I>SEMMNS</I> und <I>SEMMNI</I> zu erh&ouml;hen.<P>
-
-Falls die Fehlermeldung anders aussieht, hast Du m&ouml;glicherweise keine Semaphoren-Unterst&uuml;tzung
-in Deinem Kernel aktiviert.<P>
-
-
-<H4><a name="3.6">3.6</a>) Wie verhindere ich, da&szlig; andere Hosts auf meine PostgreSQL Datenbanken zugreifen?</H4><P>
-
-Die Standardeinstellung ist, da&szlig; PostgreSQL Verbindungen von der lokalen Maschine &uuml;ber
-Unix-Domain-Sockets erlaubt. Andere Maschinen werden keine Verbindung aufbauen k&ouml;nnen, bis
-der <I>postmaster</I> mit der <I>-i</I> Option gestartet ist und die Host-basierte Authentizierung
-in der Datei <I>$PGDATA/pg_hba.conf</I> entsprechend angepasst ist.
-Das erlaubt TCP/IP-Verbindungen.
-<P>
-
-<H4><a name="3.7">3.7</a>) Warum kann ich mich nicht von einer anderen Maschine mit meiner Datenbank verbinden?</H4><P>
-
-Die Standardeinstellung erlaubt nur Unix-Domain-Socket-Verbindungen der lokalen Maschine.
-Um TCP/IP Verbindungen zu erm&ouml;glichen, stelle sicher, da&szlig; der postmaster
-mit der <I>-i</I> Option gestartet wurde, und f&uuml;ge einen passenden Host-Eintrag in die Datei
-<I>pgsql/data/pg_hba.conf</I> ein. Siehe auch die <I>pg_hba.conf</I> Man-Page.<P>
-
-
-<H4><a name="3.8">3.8</a>) Warum kann ich nicht als <I>root</I> auf die Datenbank zugreifen?</H4><P>
-
-Du solltest keine Datenbank-Benutzer mit der User-ID 0 (root) erzeugen.
-Sie werden auf keine Datenbank zugreifen k&ouml;nnen. Das ist eine Sicherheitsma&szlig;nahme,
-wegen der M&ouml;glichkeit Objekt-Module dynamisch in die Datenbank zu linken.
-<P>
-
-
-<H4><a name="3.9">3.9</a>) Alle meine Server st&uuml;rzen bei gleichzeitigem Tabellenzugriff ab. Warum?</H4><P>
-
-Dieses Problem kann durch einen Kernel verursacht werden, der ohne Support f&uuml;r Semaphoren
-konfiguriert wurde.
-
-
-<H4><a name="3.10">3.10</a>) Wie optimiere ich die Datenbankmaschine f&uuml;r bessere Leistung?</H4><P>
-
-Sicherlich k&ouml;nnen Indizes Abfragen beschleunigen. Der <I>explain</I> Befehl
-erlaubt Dir zu sehen, wie PostgreSQL Deine Abfrage interpretiert und welche Indizes
-benutzt werden.
-<P>
-
-Wenn Du eine Menge <I>INSERTs</I> machst, &uuml;berpr&uuml;fe, ob Du sie als Stapelverarbeitung
-mit dem <I>copy</I>-Befehl abarbeiten kannst.
-Das ist viel schneller als einzelne <I>INSERTs</I>.
-
-Zweitens, SQL-Statements, die nicht in einem <I>begin work/commit</I> Transaktions-Block eingegeben werden,
-werden als eigene Transaktion behandelt. &Uuml;berpr&uuml;fe, ob die Statements nicht
-in einen einzelnen Transaktions-Block zusammengefasst werden k&ouml;nnen. Das reduziert den Transaktions-Overhead.
-
-Du kannst auch erw&auml;gen, Indizes zu l&ouml;schen und neu zu erstellen, wenn Du gro&szlig;e
-Datenmengen &auml;nderst.<P>
-
-Es gibt verschiedene Tuning-Ma&szlig;nahmen, die man ergreifen kann.
-Du kannst fsync() abschalten, indem Du beim Starten des postmasters die Optionen <I>-o -F</I> angibst.
-Das hindert fsync()╢s daran, nach jeder Transaktion die Daten auf die Platte zu schreiben.
-
-Du kannst auch mit der -B Option des postmasters die Anzahl der Shared Memory Puffer f&uuml;r den Backend-Prozess erh&ouml;hen.
-Falls Du diesen Wert zu hoch einstellst, kann es sein, da&szlig; der postmaster nicht startet, weil
-der Shared Memory Speicherplatz Deines Kernels aufgebraucht wird.
-Jeder Puffer ist 8 kB gro&szlig; und es gibt standardm&auml;&szlig;ig 64 Puffer.<P>
-
-Du kannst ebenfalls die -S Option des Backends nutzen, um die Gr&ouml;&szlig;e des Speicherplatzes f&uuml;r
-tempor&auml;res Sortieren zu erh&ouml;hen.
-Der -S Wert wird in Kilobyte gemessen und ist standardm&auml;&szlig;ig auf 512 kB festgelegt. Es w&auml;re
-jedoch unklug, den Wert zu hoch anzugeben, da ein Query m&ouml;glicherweise Speicherplatzmangel verursacht,
-wenn es viele gleichzeitige Sortierungen durchf&uuml;hren mu&szlig;.<P>
-
-Der <I>cluster</I> Befehl kann benutzt werden, um Daten in Basistabellen zu gruppieren, so da&szlig; sie
-auf einen Index zusammengebracht werden. Siehe auch die cluster(l) Man-Page f&uuml;r weitere Details.
-
-
-<H4><a name="3.11">3.11</a>) Welche Debugging/Fehlersuch-Hilfsmittel sind f&uuml;r PostgreSQL verf&uuml;gbar?</H4><P>
-
-PostgreSQL hat einige M&ouml;glichkeiten, Statusinformationen zu berichten, die
-n&uuml;tzlich f&uuml;r die Fehlersuche sein k&ouml;nnen.<P>
-
-Erstens, wenn beim configure-Lauf die Option --enable-cassert angegeben wurde,
-verfolgen viele <I>assert()╢s</I> den Fortschritt des Backends und halten das Programm
-an, wenn etwas Unerwartetes passiert.
-<P>
-
-Postmaster und postgres, haben mehrere Fehlersuch-Optionen zur Verf&uuml;gung.
-Stelle zuerst sicher, da&szlig; Du den Standard-Output und Fehlerkanal in eine Datei umleitest, wenn Du den postmaster startest, :
-<PRE>
-<CODE>
- cd /usr/local/pgsql
- ./bin/postmaster &gt;server.log 2&gt;&1 &
-</CODE>
-</PRE><P>
-
-Das erzeugt eine server.log Datei im PostgreSQL-Verzeichnis.
-Diese Datei enth&auml;lt n&uuml;tzliche Informationen &uuml;ber Probleme oder Fehler, die im Server
-aufgetreten sind. Postmaster hat eine -d Option, die noch detailliertere Informationen liefert.
-Zur -d Option wird eine Nummer angegeben, die den Debug-Level - also die Menge der berichteten Information - angibt.
-Achtung, hohe Debug-Level erzeugen schnell gro&szlig;e Logdateien!
-<P>
-
-Du kannst tats&auml;chlich das Postgres-Backend auf der Kommandozeile
-laufen lassen und SQL-Statements direkt eingeben.
-Diese Vorgehensweise wird aber <B>nur</B> zur Fehlersuche empfohlen.
-Beachte, da&szlig; ein Zeilenumbruch das SQL-Statement beendet, nicht das Semikolon.
-Wenn Du PostgreSQL mit Debugging-Symbolen kompiliert hast, kannst Du einen Debugger
-benutzen, um zu beobachten, was passiert.
-Da das Backend nicht vom postmaster gestartet wurde, l&auml;uft es nicht in der
-gleichen Umgebung und deshalb k&ouml;nnen einige locking/backend Operationen
-nicht reproduziert werden.
-Einige Betriebssysteme k&ouml;nnen sich an einen Backend-Prozess direkt
-anh&auml;ngen, um Probleme zu diagnostizieren.
-<P>
-
-Das Programm postgres hat -s, -A und -t Optionen, die bei der Fehlersuche
-und Leistungsmessung sehr n&uuml;tzlich sein k&ouml;nnen.
-
-Du kannst das Paket auch mit Profiling kompilieren, um zu sehen, welche Funktionen wieviel
-Ausf&uuml;hrungszeit beanspruchen.
-Das Backend Profil wird im Verzeichnis pgsql/data/base/dbname abgelegt.
-Das Client Profil wird in das aktuelle Verzeichnis abgelegt.
-<P>
-
-
-<H4><a name="3.12">3.12</a>) Ich bekomme die Meldung "Sorry, too many clients", wenn ich eine Verbindung versuche. Warum?</H4><P>
-
-Du mu&szlig;t die Grenze des postmasters, die festlegt,
- wieviele gleichzeitige Backend-Prozesse gestartet werden k&ouml;nnen, hochsetzen.<P>
-
-In Postgres 6.5 sind das normalerweise 32 Prozesse. Du kannst diesen Wert dadurch erh&ouml;hen,
-da&szlig; Du den postmaster mit einem entsprechenden <I>-N</I> Wert neu startest.
-In der Standardkonfiguration kannst Du <I>-N</I> auf maximal 1024 setzen.
-Falls Du mehr brauchst, erh&ouml;he <I>MAXBACKENDS</I> in <I>include/pg_config.h</I> und
-kompiliere das Paket neu.
-Du kannst den Standardwert von <I>-N</I> w&auml;hrend der Konfiguration
-setzen, indem Du <I>--with-maxbackends</I> angibst.
-
-Anmerkung: Falls Du <I>-N</I> gr&ouml;&szlig;er als 32 einstellst, solltest
-Du <I>-B</I> auf einen Wert, h&ouml;her als 64 setzen.
-F&uuml;r eine hohe Anzahl an Backend-Prozessen, solltest Du m&ouml;glicherweise einige
-Unix-Kernel Parameter ebenfalls erh&ouml;hen.
-Folgendes Parameter solltest Du pr&uuml;fen:
-die Maximalgr&ouml;&szlig;e der Shared Memory Blocks <I>SHMMAX,</I>
-die Maximalanzahl der Semaphoren <I>SEMMNS</I> und <I>SEMMNI,
-</I> die maximale Anzahl von Prozessen <I>NPROC,</I>
-die maximale Anzahl von Prozessen pro User <I>MAXUPRC,</I>
-und die Maximalzahl der ge&ouml;ffneten Dateien <I>NFILE</I> und <I>NINODE.</I>
-
-Der Grund f&uuml;r die Begrenzung der erlaubten Backend-Prozesse liegt darin, da&szlig;
-verhindert werden soll, da&szlig; das System seine freien Ressourcen aufbraucht.
-<P>
-
-In den Postgres-Versionen vor 6.5 war die maximale Anzahl von Backends auf
-64 festgelegt und eine &Auml;nderung setzte eine erneute Kompilierung voraus,
-bei der die Konstante MaxBackendId in <I>include/storage/sinvaladt.h.</I>
-entsprechend angepasst wurde.<P>
-
-<H4><a name="3.13">3.13</a>) Was sind die pg_psort.XXX Dateien in meinem Datenbank-Verzeichnis?</H4><P>
-
-Dies sind tempor&auml;re Dateien, die durch den Query-Ausf&uuml;hrer erzeugt werden.
-Wenn zum Beispiel eine Sortierung durchgef&uuml;hrt werden mu&szlig;, um ein <I>ORDER BY</I>
-auszuf&uuml;hren, und diese Sortierung mehr Platz ben&ouml;tigt, als mit dem Backend-Parameter -S
-erlaubt wurde, dann werden diese tempor&auml;ren Dateien erzeugt, um die Daten dort zu halten.
-<P>
-
-Die tempor&auml;ren Dateien sollten automatisch gel&ouml;scht werden, falls das Backend jedoch
-w&auml;hrend einer Sortierung abst&uuml;rzt, bleiben sie erhalten.
-Wenn zu diesem Zeitpunkt keine Transaktion l&auml;uft, kannst Du die
-pg_tempNNN.NN Dateien ohne Gefahr l&ouml;schen.<P>
-
-<H4><a name="3.14">3.14</a>) Wie richte ich eine Benutzergruppe (pg_group) ein?</H4><P>
-
-Zur Zeit gibt es keine einfache Schnittstelle, um Benutzergruppen einzurichten
-Du mu&szlig;t explizit die pg_group-Tabelle mittels INSERT/UPDATE modifizieren.
-Zum Beispiel:
-
-<PRE>
-<CODE>
- jolly=&gt; INSERT into pg_group (groname, grosysid, grolist)
- jolly=&gt; values ('posthackers', '1234', '{5443, 8261}');
- INSERT 548224
- jolly=&gt; grant INSERT on foo to group posthackers;
- CHANGE
- jolly=&gt;
-</CODE>
-</PRE><P>
-
- Die Felder in pg_group sind:
-<UL>
-<LI> groname: der Gruppenname. Dieser Name sollte rein alphanumerisch sein. Keine Unterstriche oder andere Punktionen
-<LI> grosysid: die Gruppen-ID. Die Gruppen-ID ist ein int4-Feld. Sie sollte eindeutig f&uuml;r jede Gruppe sein.
-<LI> grolist: die Liste der pg_user IDs, die zu dieser Gruppe geh&ouml;ren. (int4[].)
-</UL><P>
-
-
-<HR>
-
-<H2><CENTER>Fragen zum Betrieb</CENTER></H2><P>
-
-
-<H4><a name="4.1">4.1</a>) Das System scheint Kommata, Dezimalpunkte und Datumsformate durcheinanderzubringen.</H4><P>
-
-&Uuml;berpr&uuml;fe die Konfiguration Deiner Locale-Einstellung. PostgreSQL benutzt die
-Einstellungen des jeweiligen Users und nicht die des postmaster Prozesses.
-Es gibt postgres und psql SET Befehle, um das Datumsformat zu kontrollieren.
-Setzte diese entsprechend Deiner Arbeitsumgebung.
-<P>
-
-
-<H4><a name="4.2">4.2</a>) Was ist der genauer Unterschied zwischen Binary Cursors und Normal Cursors?</H4><P>
-
-Vgl. die <I>declare</I> Man-Page f&uuml;r eine Beschreibung.<P>
-
-<H4><a name="4.3">4.3</a>) Wie w&auml;hle ich per <I>SELECT</I> nur die ersten paar Zeilen in einem Query aus?</H4><P>
-
-Vgl. die <I>fetch</I> Man-Page, oder benutze SELECT ... LIMIT....<P>
-
-Das verhindert nur, da&szlig; alle Ergebniszeilen zum Client &uuml;bermittelt werden.
-Die komplette Abfrage mu&szlig; abgearbeitet werden, selbst wenn Du nur die ersten paar Zeilen haben m&ouml;chtest.
-Ziehe ein Query in Erw&auml;gung, das ein <I>ORDER BY</I> benutzt. Es gibt keine M&ouml;glichkeit Zeilen
-zur&uuml;ckzuliefern, bevor nicht die komplette Abfrage abgearbeitet ist.
-<P>
-
-<H4><a name="4.4">4.4</a>) Wie bekomme ich eine Liste der Tabellen oder anderen Dingen, die ich in <I>psql</I> sehen kann<BR></H4><P>
-
-Du kannst Dir die Datei pgsql/src/bin/psql/psql.c mit dem Quellcode f&uuml;r <I>psql</I> ansehen.
-Sie enth&auml;lt die SQL-Befehle, die die Backslash-Kommandos (\) ausf&uuml;hren.
-Seit Postgres 6.5 kannst Du <I>psql</I> auch mit der <I>-E</I> Option starten. Dadurch gibt
-<I>psql</I> die Queries aus, die es bei der Ausf&uuml;hrung der Befehle benutzt.
-<P>
-
-
-<H4><a name="4.5">4.5</a>) Wie entferne ich eine Spalte von einer Tabelle?</H4><P>
-
-Wir unterst&uuml;tzen <I>alter table drop column</I> nicht, aber mache es so:
-<PRE> <CODE>
- SELECT ... -- w&auml;hle alle Spalten au&szlig;er die, die Du entfernen willst
- INTO TABLE new_table
- FROM old_table;
- DROP TABLE old_table;
- ALTER TABLE new_table RENAME TO old_table;
-</CODE>
-</PRE><P>
-
-
-<H4><a name="4.6">4.6</a>) Was ist die Maximalgr&ouml;&szlig;e f&uuml;r eine Zeile, eine Tabelle, eine Datenbank?</H4><P>
-
-Zeilen sind auf 8 kB begrenzt, aber das kann ge&auml;ndert werden, indem Du in
-<I>include/config.h</I> die Konstante <I>BLCKSZ</I> &auml;nderst.
-Um Attribute mit mehr als 8 kB zu nutzen, kannst Du auch das "Large Object Interface" benutzen.<P>
-Zeilen &uuml;berschreiten keine 8 kB-Grenzen. Eine Zeile mit 5 kB wird 8 kB Speicherplatz ben&ouml;tigen.
-<P>
-
-Tabellen- und Datenbankgr&ouml;&szlig;en haben keine Grenzen. Es gibt viele Datenbanken mit zig Gigabytes und
-wahrscheinlich einige mit hunderten Gigabyte.
-
-<H4><a name="4.7">4.7</a>) Wieviel Plattenplatz ben&ouml;tigt eine Datenbank zur Speicherung einer Datendatei mit zeilenweisen Datens&auml;tzen?<BR></H4><P>
-
-Eine Postgres Datenbank kann ungef&auml;hr sechseinhalb mal soviel Platz brauchen,
-wie eine einfache Textdatei.<P>
-
-Betrachten wir eine Datei mit 300.000 Zeilen, mit jeweil zwei Integern pro Zeile.
-Die einfache Textdatei ben&ouml;tigt 2,4 MB Speicherplatz.
-Die Gr&ouml;&szlig;e der Postgres Datenbankdatei, die diese Daten enth&auml;lt, liegt
-ungef&auml;hr bei 14 MB.
-
-<PRE>
- 36 Bytes: jeder Zeilenkopf (ungef&auml;hr)
- + 8 Bytes: zwei Integer-Felder @ jedes 4 Bytes
- + 4 Bytes: Zeiger auf den Datensatz
- -----------------------------------------------
- 48 Bytes pro Zeile
-
- Die Gr&ouml;&szlig;e einer Datenseite in PostgreSQL ist 8192 Bytes (8 KB), also:
-
- 8192 Bytes pro Seite
- --------------------- = 171 Zeilen pro Seite (aufgerundet)
- 48 Bytes pro Zeile
-
- 300000 Datenzeilen
- ----------------------- = 1755 Datenbankseiten
- 171 Zeilen pro Seite
-
-1755 Datenbankseiten * 8192 Bytes pro Seite = 14,376,960 Bytes (14MB)
-</PRE></P>
-
-Indizes haben nicht einen solchen Overhead, sie beinhalten jedoch die Daten, die sie
-indizieren und k&ouml;nnen so auch sehr gro&szlig; werden.
-<P>
-
-<H4><a name="4.8">4.8</a>) Wie finde ich heraus, welche Indizes oder Operationen in der Datenbank definiert sind?</H4><P>
-
-<I>psql</I> hat eine Vielzahl von Backslash Befehlen, um solche Informationen zu zeigen.
-Benutze \?, um sie zu sehen.
-<P>
-
-Schaue Dir auch die Datei <I>pgsql/src/tutorial/syscat.source.</I> an.
-Sie illustriert viele der <I>SELECT</I>s, die ben&ouml;tigt werden, um diese Informationen
-von der Datenbank-Systemtabelle zu erhalten
-<P>
-
-
-<H4><a name="4.9">4.9</a>) Meine Queries sind langsam oder nutzen die Indizes nicht. Warum?</H4><P>
-
-PostgeSQL pflegt automatische Statistiken nicht.
-Um die Statistiken zu aktualisieren, mu&szlig;t Du ein explizites <I>vacuum</I> eingeben.
-Nach dieser Aktualisierung wei&szlig; der Optimierer
-wieviele Zeilen in der Tabelle sind und kann besser entscheiden, ob Indizes benutzt werden sollten.
-Der Optimierer benutzt keine Indizes, wenn die Tabelle klein ist, weil ein sequentieller Suchlauf
-dann schneller sein w&uuml;rde.<P>
-
-Benutze den Befehl <I> vacuum analyze</I> f&uuml;r die spaltenspezifische Optimierung.
- <I>Vacuum analyze</I> ist f&uuml;r komplexe Multi-Join-Abfragen wichtig, damit der Optimierer
-die Anzahl der Zeilen von jeder Tabelle sch&auml;tzen und dann die passende Join-Reihenfolge
-w&auml;hlen kann.
-Das Backend verfolgt die Spaltenstatistik nicht selbst, so da&szlig; <I>vacuum analyze</I>
-regelm&auml;&szlig;ig aufgerufen werden sollte.
-<P>
-
-Indizes werden nicht f&uuml;r <I>ORDER BY</I> Operationen benutzt.<P>
-
-Bei der Nutzung von Wildcard-Operatoren wie <I>LIKE</I> oder <I>~,</I>&nbsp; k&ouml;nnen Indizes
-nur benutzt werden, wenn die Suche mit dem Anfang eines Strings startet.
-Um also Indizes zu nutzen, sollten <I>LIKE</I>-Suchen nicht mit
-<I>%,</I> und <I>~</I>&nbsp; beginnen (Die Sucheparameter regul&auml;rer Ausdr&uuml;cke sollten
-mit <I>^.</I>&nbsp; beginnen.
-
-<H4><a name="4.10">4.10</a>) Auf welche Weise kann ich sehen, wie der Query-Optimierer meine Abfrage auswertet?</H4><P>
-
-Vgl. die <I>EXPLAIN</I> Man-Page.<P>
-
-<H4><a name="4.11">4.11</a>) Was ist ein R-Tree Index?</H4><P>
-
-Ein R-Tree Index wird benutzt, um r&auml;umliche Daten zu indizieren.
-Ein Hash-Index kann nicht f&uuml;r Bereichssuchen genutzt werden.
-Ein B-Tree Index kann nur f&uuml;r Bereichssuchen in eindimensionalen Daten
-genutzt werden. R-Trees k&ouml;nnen multi-dimensionale Daten abhandeln.
-Ein Beispiel: Wenn ein R-Tree Index auf ein Attribut vom Typ <I>POINT</I>
-gebildet wird, dann kann das System Abfragen wie z.B. "Zeige alle Punkte,
-die sich in einem umgebenden Rechteck befinden" effizienter beantworten.
-<P>
-
-Die kanonische Ver&ouml;ffentlichung , die das originale R-Tree Design beschreibt ist:
-<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>
-
-Du kannst dieses Werk ebenfalls in Stonebraker's "Readings in Database
-Systems" finden.<P>
-
-Die eingebauten R-Trees k&ouml;nnen Polygone und Rechtecke verarbeiten.
-Theoretisch k&ouml;nnen R-Trees auf eine hohe Anzahl von Dimensionen erweitert werden.
-Praktisch bedingt diese Erweiterung eine Menge Arbeit und wir haben derzeit
-keinerlei Dokumentation dar&uuml;ber, wie das zu machen w&auml;re.
-<P>
-
-
-<H4><a name="4.12">4.12</a>) Was ist "Genetic Query Optimization"?</H4><P>
-
-Das GEQO-Modul in PostgreSQL soll dazu dienen, das Optimierungsproblem beim
-Joining vieler Tabellen auf der Basis genetischer Algorithmen (GA) zu l&ouml;sen.
-Es erlaubt die Behandlung von gro&szlig;en Join-Queries ohne ersch&ouml;pfende Suche.
-<P>
-F&uuml;r weitere Informationen siehe die Dokumentation.
-
-
-<H4><a name="4.13">4.13</a>) Wie verfahre ich bei der Suche mit regul&auml;ren Ausdr&uuml;cken und bei einer Suche mit Ignorierung der Gro&szlig;- und Kleinschreibweisen?</H4><P>
-
-<I>~</I> und <I>~*</I>&nbsp; sind wahrscheinlich das, was Du willst.
-Vgl. psql's <I>\do</I> Befehl. <P>
-
-
-<H4><a name="4.14">4.14</a>) Wie ermittle ich in einem Query, da&szlig; ein Feld NULL ist?</H4><P>
-
-Du testest die Spalte mit IS NULL und IS NOT NULL.<P>
-
-
-<H4><a name="4.15">4.15</a>) Was ist der Unterschied zwischen den verschiedenen CHAR-Typen?</H4>
-
-<PRE>
-Typ interner Name Bemerkungen
---------------------------------------------------
-CHAR char 1 Zeichen
-CHAR(#) bpchar mit Leerzeichen gef&uuml;llt bis zur angegebenen L&auml;nge
-VARCHAR(#) varchar Die Gr&ouml;&szlig;e legt die Maximall&auml;nge fest, kein Ausf&uuml;llen mit Leerzeichen
-TEXT text Die L&auml;nge wird nur durch die maximale Zeilenl&auml;nge beschr&auml;nkt
-BYTEA bytea Bytearray mit variabler L&auml;nge
-</PRE><P>
-
-Du mu&szlig;t die internen Namen benutzen, wenn Du interne Operationen durchf&uuml;hren willst.
-<P>
-
-Die letzten vier Typen sind "varlena"-Typen (d.h. die ersten vier Bytes geben die L&auml;nge an, gefolgt
-von den Daten).
-<I>CHAR(#)</I> belegt die maximale Anzahl von Bytes, unabh&auml;ngig davon, wieviele Daten im
-Feld gespeichert werden.
-<I>TEXT, VARCHAR(#)</I> und <I>BYTEA</I> haben alle eine variable L&auml;nge auf dem Datentr&auml;ger,
-deshalb gibt es einen leichten Geschwindigkeitsnachteil bei der Nutzung dieser Typen.
-Genauer, der Nachteil gilt f&uuml;r den Zugriff auf alle Spalten nach der ersten Spalte dieses Typs.
-<P>
-
-
-<H4><a name="4.16">4.16</a>) Wie erzeuge ich ein serielles Feld mit automatischer Erh&ouml;hung des Inhalts?</H4><P>
-
-PostgreSQL unterst&uuml;tzt einen <I>SERIAL</I> Datentyp. Er erzeugt automatisch eine
-Sequenz und einen Index auf die Spalte. Siehe die <I>create_sequence</I> Man-Page
-f&uuml;r weitere Informationen &uuml;ber Sequenzen.
-
-Du kannst aber auch das <I>Oid</I> Feld jeder Zeile als eindeutigen Wert nutzen.
-Jedoch mu&szlig;t Du, falls Du Deine Datenbank einmal komplett ausgeben und wieder einlesen willst,
-die <I>pg_dump's -o</I> oder die <I>copy with oids</I> Option benutzen, um die Oids zu retten.<P>
-
-<H4><a name="4.17">4.17</a>) Was ist ein Oid? Was ist ein Tid?</H4><P>
-
-Oids sind PostgreSQLs Antwort auf eindeutige Zeilen-IDs. Jede Zeile, die in PostgreSQL
-erzeugt wird, bekommt eine eindeutige Oid. Alle Oids, die w&auml;hrend initdb erzeugt werden, sind kleiner
-als 16384 (nach <I>backend/access/transam.h</I>).
-Alle Oids, die durch den Benutzer erzeugt werden, sind gleich oder gr&ouml;&szlig;er als dieser Wert.
-Standardm&auml;&szlig;ig sind all diese Oids nicht nur innerhalb einer Tabelle oder Datenbank, sondern
-in der gesamten PostgreSQL Installation eindeutig.
-<P>
-PostgreSQL benutzt Oids in seinen internen Systemtabellen, um Zeilen zwischen den Tabellen zu
-verbinden. Diese Oids k&ouml;nnen zur Identifikation spezifischer Benutzerzeilen und in Joins
-genutzt werden.
-Es wird empfohlen, den Spaltentyp OID zu nutzen, um Oids-Werte zu speichern.
-Siehe die <I>sql(l)</I> Man-Page, um die anderen internen Spalten kennenzulernen.
-Du kannst einen Index auf ein Oid-Feld erzeugen, um schnelleren Zugriff zu erreichen.
-<P>
-
-Oids werden allen neuen Zeilen von einem zentralen Bereich, der von allen Datenbanken
-genutzt wird, zugewiesen. Es gibt keinen Grund, warum Du nicht die Oid &auml;ndern, oder eine Kopie der
-Tabelle mit den originalen Oids anlegen k&ouml;nntest.
-<PRE>
- CREATE TABLE new_table(old_oid oid, mycol int);
- SELECT INTO new SELECT old_oid, mycol FROM old;
- COPY new TO '/tmp/pgtable';
- DELETE FROM new;
- COPY new WITH OIDS FROM '/tmp/pgtable';
-<!--
- CREATE TABLE new_table (mycol int);
- INSERT INTO new_table (oid, mycol) SELECT oid, mycol FROM old_table;
--->
-</PRE><P>
-
-Tids werden genutzt, um spezifische physische Zeilen mit Block und
-Versatzwert zu identifizieren. Tids &auml;ndern sich, wenn Zeilen ge&auml;ndert oder
-neu geladen werden. Sie werden von Index-Eintr&auml;gen genutzt, um die
-Zeilen physisch zu adressieren.
-
-<H4><a name="4.18">4.18</a>) Was ist die Bedeutung der verschiedenen Ausdr&uuml;cke, die in PostgreSQL benutzt werden (z.B. attribute, class,...)?</H4><P>
-
-Einige der Quelltexte und die &auml;ltere Dokumentation nutzen allgemeine Begriffe.
-Hier sind einige aufgef&uuml;hrt:
-
-<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>
-
-<H4><a name="4.19">4.19</a>) Wieso bekomme ich einen Fehler: "FATAL: palloc failure: memory exhausted?"<BR></H4><P>
-
-M&ouml;glicherweise ist der virtuelle Speicher verbraucht oder Dein Kernel hat
-eine niedrige Grenze f&uuml;r bestimmte Ressourcen.
-Versuche dieses, bevor Du den postmaster startest:
-
-<PRE>
-<CODE>
- ulimit -d 65536
- limit datasize 64m
-</CODE>
-</PRE>
-
-Je nach Deiner eingesetzten Shell mag nur einer dieser Befehle funktionieren.
-Aber es wird die Grenze des Datensegments f&uuml;r Prozesse erh&ouml;hen und vielleicht
-l&auml;uft so Dein Query durch.
-Dieser Befehl wirkt sich auf den aktuellen Prozess und alle seine Unterprozesse
-aus, die nach diesem Befehl gestartet werden. Falls Du ein Problem mit dem SQL-CLient hast,
-weil das Backend zu viele Daten zur&uuml;ckliefert, versuche diesen Befehl, bevor Du den
-SQL-Client startest.
-<P>
-
-<H4><a name="4.20">4.20</a>) Wie kann ich feststellen, welche PostgreSQL-Version ich laufen habe?<BR></H4><P>
-
-Gib in <I>psql</I> <CODE>SELECT version();</CODE> ein<P>
-
-<H4><a name="4.21">4.21</a>) Beim Arbeiten mit "large-object" kommt die Fehlermeldung: <I>invalid large obj descriptor.</I> Warum?<BR></H4><P>
-
-Du solltest die Befehle <CODE>BEGIN WORK</CODE> und <CODE>COMMIT
-</CODE> bei jeden Gebrauch von Large Objects benutzen. Also um
-<CODE>lo_open</CODE> ... <CODE>lo_close.</CODE><P>
-
-Die Dokumentation hat schon immer darauf hingewiesen, da&szlig;
-<I>lo_open</I> in eine Transaktion eingebunden werden mu&szlig;, aber die PostgreSQL Versionen vor 6.5
-haben diese Regel nicht erzwungen.
-Statt dessen scheiterten sie gelegentlich, wenn Du diese Regel gebrochen hattest.<P>
-
-Das aktuelle PostgreSQL erzwingt diese Regel, indem es die Handles der Large Objects
-beim COMMIT der Transaktion schlie&szlig;t, was sofort nach dem <I>lo_open</I> passiert,
-wenn Du nicht innerhalb einer Transaktion bist.
-So f&uuml;hrt der erste Versuch, etwas mit dem Large Object zu machen zu einem
-<I>invalid large obj descriptor</I>.
-Also wird der Code, der bisher benutzt wurde, nun diese Fehlermeldung erzeugen, wenn Du
-keine Transaktionen benutzt hast.
-<P>
-Falls Du eine Client-Schnittstelle wie ODBC benutzt, kann es sein, da&szlig; Du
-<CODE>auto-commit off</CODE> setzen mu&szlig;t.<P>
-
-<HR>
-
-<H2><CENTER>PostgreSQL erweitern</CENTER></H2><P>
-
-
-<H4><a name="5.1">5.1</a>) Ich habe eine benutzerdefinierte Funktion geschrieben. Wenn ich sie in <I>psql</I> aufrufe, kommt ein <I>core dump</I>. Warum?</H4><P>
-
-Dieses Problem kann viele Ursachen haben. Teste deine Funktion zuerst in einem
-Extra-Testprogramm. Stelle au&szlig;erdem sicher, da&szlig; Deine Funktion nicht etwa elog-Nachrichten sendet, wenn der Client Daten erwartet,
-wie in den type_in() oder type_out() Funktionen<P>
-
-
-<H4><a name="5.2">5.2</a>) Was bedeutet die Meldung: <I>NOTICE:PortalHeapMemoryFree: 0x402251d0 not in alloc set!</I>?</H4><P>
-
-Du <I>pfree</I>st etwas, das Du nicht <I>palloc</I>t hast!
-Stelle sicher, da&szlig; Du nicht <I>malloc/free</I> und <I>palloc/pfree</I> durcheinanderw&uuml;rfelst.
-
-
-<H4><a name="5.3">5.3</a>) Wie kann ich ein paar elegante neue Feldtypen und Funktionen zu PostgreSQL beitragen?
-</H4><P>
-
-Sende Deine Erweiterungen zur pgsql-hackers Mailing Liste,
-und sie werden eventuell im <I>contrib/</I> Verzeichnis enden.<P>
-
-
-<H4><a name="5.4">5.4</a>) Wie schreibe ich eine Funktion in C, die einen Tuple zur&uuml;ckliefert?</H4><P>
-
-Das erfordert derart extreme Genialit&auml;t, da&szlig; die Autoren es niemals versucht haben,
-obwohl es im Prinzip zu machen w&auml;re.<P>
-
-<H4><a name="5.5">5.5</a>) Ich habe eine der Quellendateien ge&auml;ndert. Warum macht sich die &Auml;nderung beim erneuten Compilerlauf nicht bemerkbar?</H4><P>
-
-Die Makefiles finden nicht die richtigen Abh&auml;ngigkeiten. Du mu&szlig;t ein <I>make clean</I> und dann ein weiteres <I>make</I> machen.
-
-
-</BODY>
-</HTML>
-
-
diff --git a/doc/src/FAQ/FAQ_japanese.html b/doc/src/FAQ/FAQ_japanese.html
deleted file mode 100644
index 644995069ac..00000000000
--- a/doc/src/FAQ/FAQ_japanese.html
+++ /dev/null
@@ -1,1418 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>PostgreSQL FAQ in Japanese</TITLE>
-</HEAD>
-<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#A00000" ALINK="#0000FF">
-<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=x-euc-jp">
-<H1>
-PostgreSQL(╔щ╔╧╔х╔╟╔Л╔╧║╕╔╜╔Е║╪║╕╔╗╔К)╓к╓д╓╓╓ф╓Х╓╞╓╒╓К╪алД╓х╓╫╓н╡РеЗ(FAQ)</H1>
-<P>
-╦╤й╦╨г╫╙╧╧©╥фЭ: Fri Apr 26 23:03:46 EDT 2002
-<P>
-╦╫╨ъ╓н╟щ╩Щ╢имЩ╪т: Bruce Momjian (<A
-HREF="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
-Maintainer of Japanese Translation: Jun Kuwamura (<A
-HREF="mailto:juk@postgresql.jp">juk@postgresql.jp</A>)<BR><P>
-<P>
-╓Ё╓нй╦╫Я╓н╨г©╥хг╓о
-<A HREF="http://www.PostgreSQL.org/docs/faq-english.html">
-http://www.PostgreSQL.org/docs/faq-english.html</A>
-╓г╦╚╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧║ё
-<P>
-
-╔в╔И╔ц╔х╔ш║╪╔Ю╓кфцм╜╓н╪алД╓к╓д╓╓╓ф╓о:
- <A HREF="http://www.PostgreSQL.org/docs/">
- http://www.PostgreSQL.org/users-lounge/docs/faq.html</A>
-<BR>╓к╡СеЗ╓╛╓╒╓Й╓ч╓╧║ё
-<P>
-
-<P>
-<small><PRE>
-(╟й╡╪║╒лУ╪т╓к╓Х╓КцМ╪А╓Р [лУцМ║╖ ╓х ] ╓х╓г╟о╓С╓г╣╜╓╥╓ч╓╧║ё)
-[лУцМ║╖
- фЭкэ╦Лхгю╫╨Н╓к╓д╓╓╓ф╓н╔А╔Б╓о╨г╦ЕхЬ╓ь╟эф╟╓╥╓ч╓╥╓©║ё
-
- фЭкэ╦Лхг╓н╓Ё╓нй╦╫Я╓о кэ╡х "User's Lounge" ╓н "Collection of FAQs" ╓н
- "Japanese" ╓х╓╓╓╕╦╚╫п╓╥╓н╓х╓Ё╓М╓к╓╒╓Й╓ч╓╧║ё╓ч╓©║╒╟й╡╪╓н╔╣╔╓╔х╓к╓Б
- ╓╒╓Й╓ч╓╧║ё
- <A HREF="http://www.rccm.co.jp/~juk/pgsql/">http://www.rccm.co.jp/~juk/pgsql/</A>
- <A HREF="http://www.linux.or.jp/JF/">http://www.linux.or.jp/JF/</A>
-
- ╓Ё╓ноблУ╓к╓д╓╓╓ф╓╙╣╓╓е╓╜╓нею╓о(<A HREF="mailto:juk@postgresql.jp">juk@postgresql.jp</A>)╓ч╓г╔А║╪╔К╓г╓╙╢С╓╩╡╪╓╣╓╓║ё
-]
-</PRE></small>
-
-<P>
-<HR>
-<P>
-
-<H2><CENTER> ╟Лхле╙╓й╪алД</CENTER></H2>
-
-<A HREF="#1.1">1.1</A>) PostgreSQL╓х╓о╡©╓г╓╧╓╚║╘ ╡©╓хфи╓ъ╓ч╓╧╓╚║╘<BR>
-<A HREF="#1.2">1.2</A>) PostgreSQL╓нцЬ╨Н╦╒╓о╓и╓╕╓й╓ц╓ф╓ч╓╧╓╚║╘<BR>
-<A HREF="#1.3">1.3</A>) PostgreSQL╓нф╟╨Н╓╧╓КUnix╔в╔И╔ц╔х╔ш║╪╔Ю╓о║╘<BR>
-<A HREF="#1.4">1.4</A>) Unix╟йЁ╟╓н╟э©╒хг╓г╩х╓╗╓К╓Б╓н╓о║╘<BR>
-<A HREF="#1.5">1.5</A>) PostgreSQL╓о╓и╓Ё╓╚╓ИфЧ╪Й╓г╓╜╓ч╓╧╓╚║╘<BR>
-<A HREF="#1.6">1.6</A>) ╔╣╔щ║╪╔х╓о╓и╓Ё╓г╪У╓╠╓И╓Л╓ч╓╧╓╚║╘<BR>
-<A HREF="#1.7">1.7</A>) ╨г©╥хг╓о╓и╓Л╓г╓╧╓╚<BR>
-<A HREF="#1.8">1.8</A>) ╓и╓н╓Х╓╕╓йй╦╫Я╓╛╓╒╓Й╓ч╓╧╓╚║╘<BR>
-<A HREF="#1.9">1.9</A>) ╢Шцн╓н╔п╔╟╓Дл╓╓юл╣╓╓╣║г╫╓о╓и╓╕╓Д╓ц╓ф╦╚╓д╓╠╓ч╓╧╓╚║╘<BR>
-<A HREF="#1.10">1.10</A>) <small>SQL</small>╓о╓и╓╕╓╧╓Л╓пЁь╓ы╓ч╓╧╓╚║╘<BR>
-<A HREF="#1.11">1.11</A>) PostgreSQL╓ою╬нЯ2000г╞лДбЙ(Y2K)╓кбп╠Ч╓╥╓ф╓╓╓ч╓╧╓╚║╘<BR>
-<A HREF="#1.12">1.12</A>) Ё╚х╞╔а║╪╔Ю╓к╓о╓и╓н╓Х╓╕╓к╩╡╡ц╓╥╓ч╓╧╓╚║╘<BR>
-<A HREF="#1.13">1.13</A>) ╔п╔╟╔Л╔щ║╪╔х╓о╓и╓н╓Х╓╕╓кх╞©╝╓╥╓ч╓╧╓╚║╘<BR>
-<A HREF="#1.14">1.14</A>) б╬╓н<small>DBMS</small>╓н╓ххФ╓ы╓фPostgreSQL╓о╓и╓╕╓й╓н╓г╓╧╓╚║╘<BR>
-<A HREF="#1.15">1.15</A>) PostgreSQL╓Р╩Я╤Блл╓г╠Г╫У╓╧╓К╓к╓о╓и╓╕╓╧╓Л╓п╓Х╓╓╓г╓╧╓╚║╘<BR>
-
-
-<H2><CENTER>╔Ф║╪╔╤║╪║╕╔╞╔И╔╓╔╒╔С╔х╓н╪алД</CENTER></H2>
-
-<A HREF="#2.1">2.1</A>) PostgreSQL ╓н <small>ODBC</small> ╔и╔И╔╓╔п║╪╓о╓╒╓Й╓ч╓╧╓╚║╘<BR>
-<A HREF="#2.2">2.2</A>) PostgreSQL ╓Р Web ╔з║╪╔╦╓хо╒╥х╓╣╓╩╓К╓к╓о╓и╓С╓й╔д║╪╔К╓╛╓╒╓Й╓ч╓╧╓╚║╘<BR>
-<A HREF="#2.3">2.3</A>) PostgreSQL ╓к╔╟╔И╔у╔ё╔╚╔К║╕╔Ф║╪╔╤╔╓╔С╔©║╪╔у╔╖║╪╔╧╓о╓╒╓Й╓ч╓╧╓╚║╘
-╔Л╔щ║╪╔х╔╦╔╖╔м╔Л║╪╔©╓ДкД╓А╧Ч╓ълД╓╓╧Г╓О╓╩╦ю╦Л╔╓╔С╔©║╪╔у╔╖║╪╔╧╓о╓╒╓Й╓ч╓╧╓╚║╘<BR>
-<A HREF="#2.4">2.4</A>) PostgreSQL ╓хдл©╝╓╧╓К╓к╓о╓и╓С╓й╦ю╦Л╓╛╩х╓╗╓ч╓╧╓╚║╘<BR>
-
-
-<H2><CENTER>╢имЩ╬Е╓н╪алД</CENTER></H2>
-
-<A HREF="#3.1">3.1</A>) ╓и╓н╓Х╓╕╓к╓╧╓Л╓п <I>/usr/local/pgsql</I> ╟йЁ╟╓н╬Л╫Й╓к╔╓╔С╔╧╔х║╪╔К╓г╓╜╓ч╓╧╓╚║╘<BR>
-<A HREF="#3.2">3.2</A>) postmaster ╓РаЖ╓И╓╩╓К╓х║╒
-<I>Bad System Call</I> ╓х╓╚╔Ё╔╒║╕╔ю╔С╔в╓╥╓©╓х╓н╔А╔ц╔╩║╪╔╦╓╛╫п╓ч╓╧║ё╓й╓╪╓г╓╧╓╚║╘<BR>
-<A HREF="#3.3">3.3</A>) <I>postmaster</I> ╓РаЖ╓И╓╩╓Х╓╕╓х╓╧╓К╓х║╒
-<I>IpcMemoryCreate</I> ╔╗╔И║╪╓╛╫п╓ч╓╧║ё╓й╓╪╓г╓╧╓╚║╘<BR>
-<A HREF="#3.4">3.4</A>) <I>postmaster╓Р</I>аЖ╓И╓╩╓Х╓╕╓х╓╧╓К╓х║╒
-<I>IpcSemaphoreCreate</I> ╔╗╔И║╪╓╛╫п╓ч╓╧║ё╓й╓╪╓г╓╧╓╚║╘<BR>
-<A HREF="#3.5">3.5</A>) б╬╓н╔ш╔╧╔х╓╚╓И╓нюэбЁ╓о╓и╓н╓Х╓╕╓кю╘╦Ф╓╥╓ч╓╧╓╚║╘<BR>
-<A HREF="#3.6">3.6</A>) ╓Х╓Йни╓╓ю╜г╫╓Рфю╓К╓©╓А╓к╓о║╒╔г║╪╔©╔ы║╪╔╧║╕╔╗╔С╔╦╔С╓Р╓и╓н╓Х╓╕╓кд╢ю╟╓╧╓Л╓пни╓╓╓г╓╧╓╚║╘<BR>
-<A HREF="#3.7">3.7</A>) ╓и╓н╓Х╓╕╓й╔г╔п╔╟╣║г╫╓╛╩х╓╗╓ч╓╧╓╚║╘<BR>
-<A HREF="#3.8">3.8</A>) юэбЁ╓╥╓Х╓╕╓х╓╧╓К╓х╓╜╓к <I>'Sorry, too many clients'</I> ╓╛╫п╓К╓н╓о╓й╓╪╓г╓╧╓╚║╘<BR>
-<A HREF="#3.9">3.9</A>) ╪╚й╛╓н╔г║╪╔©╔ы║╪╔╧║╕╔г╔ё╔Л╔╞╔х╔Й╓к╓╒╓К <I>pg_sorttemp.XXX</I> ╔у╔║╔╓╔К╓о╡©╓г╓╧╓╚║╘<BR>
-
-
-
-<H2><CENTER>аЮ╨Н╬Е╓н╪алД</CENTER></H2>
-
-<A HREF="#4.1">4.1</A>) ╔п╔╓╔й╔Й║╕╔╚║╪╔╫╔К╓хдл╬О╔╚║╪╔╫╔К╓х╓н╟Ц╓╓╓о╡©╓г╓╧╓╚║╘<BR>
-<A HREF="#4.2">4.2</A>) ╨г╫И╓н©Т╔М╔╕╓н╓ъ╓Р <small>select</small> ╓╧╓К╓к╓о╓и╓╕╓╥╓ч╓╧╓╚║╘<BR>
-<A HREF="#4.3">4.3</A>) ╔ф║╪╔ж╔К╓Д╓╫╓нб╬╓н╬ПйС╓н╔Й╔╧╔х╓Р <I>psql</I> ╓г╦╚╓К╓к╓о╓и╓╕╓╥╓ч╓╧╓╚║╘<BR>
-<A HREF="#4.4">4.4</A>) ╔ф║╪╔ж╔К╓╚╓И╔╚╔И╔Ю╓н╨О╫Э╓о╓и╓н╓Х╓╕╓к╓╥╓ч╓╧╓╚║╘<BR>
-<A HREF="#4.5">4.5</A>) ╔М╔╕║╒╔ф║╪╔ж╔К║╒╔г║╪╔©╔ы║╪╔╧╓н╨гбГ╔╣╔╓╔╨╓о║╘<BR>
-<A HREF="#4.6">4.6</A>) ╟Лхле╙╓й╔ф╔╜╔╧╔х╔у╔║╔╓╔К╓╚╓И╔г║╪╔©╓Рйщб╦╓╧╓К╓к╓о║╒╔г║╪╔©╔ы║╪╔╧╓н╔г╔ё╔╧╔╞мфнл╓о╓и╓н╓╞╓И╓╓и╛мв╓г╓╧╓╚║╘<BR>
-<A HREF="#4.7">4.7</A>) дЙ╣а╓╣╓Л╓©╔ф║╪╔ж╔К║╒╔╓╔С╔г╔ц╔╞╔╧║╒╔г║╪╔©╔ы║╪╔╧║╒╓╙╓Х╓с║╒╔Ф║╪╔╤╓Р╓и╓н╓Х╓╕╓к╓╥╓ф╦╚╓д╓╠╫п╓╥╓ч╓╧╓╚║╘<BR>
-<A HREF="#4.8">4.8</A>) лД╓╓╧Г╓О╓╩╓╛цы╓╓╓╕╓╗║╒╔╓╔С╔г╔ц╔╞╔╧╓Р╩х╓ц╓ф╓╓╓Кмм╩р╓╛╓╒╓Й╓ч╓╩╓С║ё╓й╓╪╓г╓╧╓╚║╘<BR>
-<A HREF="#4.9">4.9</A>) лД╓╓╧Г╓О╓╩╔╙╔ж╔ф╔ё╔ч╔╓╔╤╓╛╓и╓н╓Х╓╕╓клД╓╓╧Г╓О╓╩╓Ри╬╡а╓╧╓К╓╚╓Р╦╚╓К╓к╓о╓и╓╕╓╥╓ч╓╧╓╚║╘<BR>
-<A HREF="#4.10">4.10</A>) R-tree ╔╓╔С╔г╔ц╔╞╔╧╓х╓о╡©╓г╓╧╓╚║╘<BR>
-<A HREF="#4.11">4.11</A>) ╟Деае╙лД╓╓╧Г╓О╓╩╨ге╛╡╫╓х╓о╡©╓г╓╧╓╚║╘<BR>
-<A HREF="#4.12">4.12</A>) ю╣╣╛и╫╦╫╓г╓н╦║╨В╓ДбГй╦╩З╓х╬╝й╦╩З╓х╓Р╤Хйл╓╥╓й╓╓ю╣╣╛и╫╦╫╦║╨В╓о╓и╓н╓Х╓╕╓к╪б╦╫╓╥╓ч╓╧╓╚║╘бГй╦╩З╓х╬╝й╦╩З╓х╓Р╤Хйл╓╥╓й╓╓╦║╨В╓н╓©╓А╓н╔╓╔С╔г╔ц╔╞╔╧╓о╓и╓н╓Х╓╕╓к╩х╓╓╓ч╓╧╓╚║╘<BR>
-<A HREF="#4.13">4.13</A>) лД╓╓╧Г╓О╓╩╓нцФ╓г║╒╔у╔ё║╪╔К╔и╓╛ <small>NULL</small> ╓г╓╒╓К╓Ё╓х╓Р╦║╫п╓╧╓К╓к╓о╓и╓╕╓╥╓ч╓╧╓╚║╘<BR>
-<A HREF="#4.14">4.14</A>) ©╖║╧╓йй╦╩З╥©╓н╓╫╓Л╓╬╓Л╓н╟Ц╓╓╓о╡©╓г╓╧╓╚║╘<BR>
-<A HREF="#4.15.1">4.15.1</A>) длхж(serial)║©╪╚ф╟аЩй╛╔у╔ё║╪╔К╔и╓о╓и╓н╓Х╓╕╓к╓д╓╞╓Й╓ч╓╧╓╚║╘<BR>
-<A HREF="#4.15.2">4.15.2</A>) <small>SERIAL</small>╔г║╪╔©╥©╓качфЧ╓╣╓Л╓Кцм╓о║╒╓и╓╕╓╧╓Л╓пфю╓И╓Л╓ч╓╧╓╚║╘<BR>
-<A HREF="#4.15.3">4.15.3</A>) б╬╓н╔Ф║╪╔╤╓х╓н╤╔╧Г╬Убж╓РхР╓╠╓К╓©╓А╓к╓о║╒<I>currval()</I> ╓х <I>nextval()</I> ╓о╩х╓О╓й╓╓╓ш╓╕╓╛╓Х╓╓╓н╓г╓╥╓Г╓╕╓╚║╘<BR>
-<A HREF="#4.15.4">4.15.4</A>) ╔х╔И╔С╔╤╔╞╔╥╔Г╔С╓╛цФцг╓╥╓©╓х╓╜╓к╓Б╓╕╓╓╓а╓и╔╥║╪╔╠╔С╔╧хж╧Ф╓╛╩х╓О╓Л╓й╓╓╓н╓о╓й╓╪╓г╓╧╓╚║╘╔╥║╪╔╠╔С╔╧║©SERIAL╔╚╔И╔Ю╓к╤У╓╜╓╛╓╒╓К╓н╓о╓й╓╪╓г╓╧╓╚║╘<BR>
-<A HREF="#4.15">4.16</A>) <small>OID</small> ╓х╓о╡©╓г╓╧╓╚║╘ <small>TID</small> ╓х╓о╡©╓г╓╧╓╚║╘<BR>
-<A HREF="#4.17">4.17</A>) PostgreSQL ╓г╩х╓О╓Л╓К╓╓╓╞╓д╓╚╓нмя╦Л╓н╟улё╓о╡©╓г╓╧╓╚║╘<BR>
-<A HREF="#4.18">4.18</A>) ╔╗╔И║╪╔А╔ц╔╩║╪╔╦ <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>╓╛╫п╓К╓н╓о╓й╓╪╓г╓╧╓╚║╘<BR>
-<A HREF="#4.19">4.19</A>) ╓и╓н╔п║╪╔╦╔Г╔С╓н PostgreSQL ╓РаЖ╓И╓╩╓ф╓╓╓К╓н╓╚╓Рд╢╓ы╓К╓к╓о╓и╓╕╓╥╓ч╓╧╓╚║╘<BR>
-<A HREF="#4.20">4.20</A>) ╔И║╪╔╦╔╙╔ж╔╦╔╖╔╞╔х╓наЮ╨Н╓г║╒<I>invalid large obj descriptor</I>╓х╫п╓К╓н╓о╓й╓╪╓г╓╧╓╚║╘<BR>
-<A HREF="#4.21">4.21</A>) ╦╫╨ъ╓н╩Ч╧О╓╛╔г╔у╔╘╔К╔х╓х╓й╓К╓Х╓╕╓й╔╚╔И╔Ю╓о╓и╓н╓Х╓╕╓к╓д╓╞╓Й╓ч╓╧╓╚║╘<BR>
-<A HREF="#4.22">4.22</A>) ╓й╓╪║╒<small>IN</small>╓Р╩х╓╕иШлД╓╓╧Г╓О╓╩╓╛╓х╓ф╓Бцы╓╓╓н╓г╓╧╓╚║╘<BR>
-<A HREF="#4.23">4.23</A>) <i>Ё╟иТ</i>╥К╧Г(<i>outer</i> join)╓о╓и╓н╓Х╓╕╓к╪б╦╫╓╥╓ч╓╧╓╚?<BR>
-<A HREF="#4.24">4.24</A>) йё©Т╓н╔г║╪╔©╔ы║╪╔╧╓Р╩х╓╕лД╓╓╧Г╓О╓╩╓о╓и╓н╓Х╓╕╓к╓╧╓Л╓п╓г╓╜╓ч╓╧╓╚║╘<br>
-<A HREF="#4.25">4.25</A>) ╢ь©Т╓гйё©Т╓н╔М╔╕╓ч╓©╓о╔╚╔И╔Ю╓Рйж╓╧╓к╓о╓и╓╕╓╥╓ч╓╧╓╚║╘<br>
-
-<H2><CENTER>PostgreSQL╓нЁхд╔╓к╓д╓╓╓ф╓н╪алД</CENTER></H2>
-
-<A HREF="#5.1">5.1</A>) ╪╚й╛╓г╫Я╓╓╓©╔Ф║╪╔╤дЙ╣а╢ь©Т╓Р psql ╓нцФ╓г╪б╧т╓╧╓К╓х╔Ё╔╒║╕╔ю╔С╔в╓╥╓ф╓╥╓ч╓╕╓н╓о╓й╓╪╓г╓╧╓╚║╘<BR>
-<A HREF="#5.2">5.2</A>) PostgreSQL мя╓к╫Я╓╓╓©╓а╓Г╓ц╓хаге╗╓й©╥╓╥╓╓╥©╓Д╢ь©Т╓РдС╤║╓╥╓ф╔в╔М╔╦╔╖╔╞╔х╓к╧в╦╔╓╥╓©╓╓╓н╓г╓╧╓╛║╘<BR>
-<A HREF="#5.3">5.3</A>) ╔©╔в╔К╓Рйж╓╧ C╦ю╦Л╓н╢ь©Т╓о╓и╓н╓Х╓╕╓к╫Я╓╜╓ч╓╧╓╚║╘<BR>
-<A HREF="#5.4">5.4</A>) ╔╫║╪╔╧║╕╔у╔║╔╓╔К╓Рйя╧╧╓╥╓ч╓╥╓©║ё╨ф╔Ё╔С╔я╔╓╔К╓╥╓ф╓Бйя╡╫╓╛╦╚╓И╓Л╓й╓╓╓н╓о╓й╓╪╓г╓╧╓╚║╘<BR>
-<P>
-<HR>
-<H2><CENTER>╟Лхле╙╓й╪алД</CENTER></H2>
-<P>
-
-<H4><A NAME="1.1">1.1</A>) PostgreSQL ╓х╓о╡©╓г╓╧╓╚║╘</H4>
-
-<P><I>Post-Gres-Q-L.</I>(╔щ╔╧╔х - ╔╟╔Л╔╧ - ╔╜╔Е║╪ - ╔╗╔К) ╓хх╞╡╩╓╥╓ч╓╧║ё</P>
-<P>PostgreSQL ╓о╪║ю╓бЕ <small>DBMS</small> ╦╕╣Фмя╓н╔в╔М╔х╔©╔╓╔в╓г╓╒╓ц╓© POSTGRES ╔г║╪╔©╔ы║╪╔╧╢имЩ╔╥╔╧╔ф╔Ю╓н╡Чнихг╓г╓╧║ёPostgreSQL ╓о POSTGRES ╓н╤╞но╓й╔г║╪╔©║╕╔Б╔г╔К╓хк╜иы╓й╔г║╪╔©║╕╔©╔╓╔в(╥©)╓Рйщ╩Щ╓╥╓й╓╛╓И║╒POSTGRES ╓г╩х╓О╓Л╓© PostQuel лД╓╓╧Г╓О╓╩╦ю╦Л╓Р║╒Ёхд╔╓╥╓© <small>SQL</small> ╓н╔╣╔ж╔╩╔ц╔х╓кцж╓╜╢╧╓╗╓ф╓╓╓ч╓╧║ёPostgreSQL ╓ол╣на╓г╢╟а╢╓й╔╫║╪╔╧╓РмЬмя╓г╓╜╓ч╓╧║ё
-
-<P>PostgreSQL ╓нЁ╚х╞╓о║╒PostgreSQL Ё╚х╞╔А║╪╔Й╔С╔╟╔Й╔╧╔х╓к╩╡╡ц╓╥╓ф╓╓╓К╔╓╔С╔©║╪╔м╔ц╔х╬Е╓нЁ╚х╞╪т╔а║╪╔Ю╓г╓╧╓ы╓ф╧т╓й╓О╓Л╓ф╓╓╓ч╓╧║ё╦╫╨ъ╓н╨бд╧╓о Marc G. Fournier ( <A HREF="mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A> )╓г╓╧║ё(╟й╡╪╓к╩╡╡ц╓н╩ейЩ╓╛╓╒╓Й╓ч╓╧║ё)╦╫╨ъ║╒╓Ё╓н╔а║╪╔Ю╓╛ PostgreSQL Ё╚х╞╓н╓╧╓ы╓ф╓нллещ╓Р╓ъ╓ф╓╓╓ч╓╧║ё
-
-<P>Postgres95-1.01 ╓нцФ©╢е╙╓йЁ╚х╞╪т╓о Andrew Yu ╓х Jolly Chen ╓г╓╥╓©╓╛║╒╓╫╓нб╬бГю╙╓н©м║╧╓╛╓Ё╓н╔Ё║╪╔и╓н╟э©╒║╒╔ф╔╧╔х║╒╔г╔п╔╟║╒╓╙╓Х╓с║╒╡Чни╓к╩╡╡ц╓╥╓ч╓╥╓©║ёPostgreSQL ╓нгию╦╦╣╔Ё║╪╔и╓г╓╒╓К POSTGRES ╓о╔╚╔Й╔у╔╘╔К╔к╔╒бГЁь╔п║╪╔╞╔Л╔╓╧╩╓к╓╙╓╓╓ф║╒ Michael Stonebraker ╤╣╪Ь╓н╩ь╢Ь╓н╓Б╓х║╒б©╓╞╓нЁью╦║╒б╢╤хю╦║╒кэ©╕╓н╔в╔М╔╟╔И╔ч╓©╓а╓неьно╓к╓Х╓Й╨Н╓И╓Л╓ч╓╥╓©║ё
-
-<P>╔п║╪╔╞╔Л╔╓╓к╓╙╓╠╓К╓Ё╓н╔╫╔у╔х╔╕╔╖╔╒╓н╓Б╓х╓нл╬а╟╓о Postgres ╓г╓╥╓©╓╛║╒<SMALL>SQL</small> ╓н╣║г╫╓╛ди╡ц╓╣╓Л╓© 1995 г╞╓к╓╫╓нл╬а╟╓о Postgres95 ╓кйя╧╧╓╣╓Л║╒1996 г╞╓н╫╙╓Й╓к╓╫╓нл╬а╟╓о PostgreSQL ╓кйя╧╧╓╣╓Л╓ч╓╥╓©║ё
-
-<P>
-<H4><A NAME="1.2">1.2</A>) PostgreSQL ╓нцЬ╨Н╦╒╓о╓и╓╕╓й╓ц╓ф╓ч╓╧╓╚║╘</H4>
-
-<P> PostgreSQL ╓о╡╪╣╜╓нцЬ╨Н╦╒╓к╫╬╓╓╓ч╓╧║ё
-<small><PRE>
- [лУцМ║╖
- ю╣й╦╓о╠я╦Л╓г╓╧║ё╩╡╧м╓х╓╥╓ф║╒лУй╦╓Рй╩╣╜╥г╨э╓╥╓ч╓╧║ё
- ]
-</PRE></small>
-<P>
-PostgreSQL Data Base Management System<P>
-
-Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
-Portions 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>
-<STRONG>
-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.
-</STRONG>
-<P>
-
-<small><PRE>
- POSTGRESQL ╔г║╪╔©╔ы║╪╔╧╢имЩ╔╥╔╧╔ф╔Ю
-
- иТй╛е╙цЬ╨Н╦╒ (c) 1996-2002, PostgreSQL╧Я╨щЁ╚х╞╔а║╪╔Ю
- иТй╛е╙цЬ╨Н╦╒ (c) 1994-6 ╔╚╔Й╔у╔╘╔К╔к╔╒бГЁькэ╧╩
-
-
- кэ╔╫╔у╔х╔╕╔╖╔╒╓╙╓Х╓с╓╫╓нй╦╫Я╟Л╪╟╓о╬Е╣╜╓нцЬ╨Н╦╒и╫╪╗╓х║╒╓Ё╓нй╦╬о
- ╓╙╓Х╓с╓Ё╓Л╓кбЁ╓╞фС╓д╓нцймН╓╛а╢╓ф╓нйёю╫╓ке╨иу╓╣╓Л╓ф╓╓╓К╦б╓Й╓к╓╙╓╓
- ╓ф║╒╩хмя║╒йёю╫║╒╫╓ю╣╓╙╓Х╓сгшиу╓н╣Ж╡д╓Р║╒╓╓╓╚╓й╓Клэе╙╓г╓╒╓ц╓Б║╒л╣
- ╫Ч╓г╓╚╓дф╠╟у╫Ял╣╓╥╓к╧т╓й╓╗╓К╓Ё╓х╓Р╓Ё╓Ё╓кг╖╓А╓ч╓╧║ё
-
- ╔╚╔Й╔у╔╘╔К╔к╔╒бГЁь╓о║╒╓╓╓╚╓й╓КеЖ╩Ж╪т╓к╓©╓╓╓╥╓ф╓Б║╒мЬ╠в╓н╡У╪╨╓Р
- ╢ч╓Ю║╒д╬юэе╙║╒╢жюэе╙║╒фцйл║╒╤ЖаЁ╓╒╓К╓╓╓ои╛аЁе╙╓к╓╚╓╚╓О╓И╓╨ю╦╓╦╓©
- б╩Ё╡╓к╓д╓╓╓ф║╒╓©╓х╓╗╔╚╔Й╔у╔╘╔К╔к╔╒бГЁь╓╛╓Ё╓Л╓И╓нб╩Ё╡╓к╓д╓╓╓файди
- ╓Р╪У╓╠╓ф╓╓╓©╓х╓╥╓ф╓Б║╒╟Люз╓нюуг╓╓РиИ╓╓╓ч╓╩╓С║ё
-
- ╔╚╔Й╔у╔╘╔К╔к╔╒бГЁь╓о║╒╬╕мялэе╙╓к╓╙╓╠╓К╟елш╓нйщ╬з╓х║╒фцдЙлэе╙╓г
- ╓не╛╧Гю╜╓к╢ь╓╥╓ф╓о╓Б╓х╓Х╓Й║╒╓Ё╓Л╓И╓к╦б╓И╓╨║╒╓╓╓╚╓й╓Кйщ╬з╓БйЭ╢Ч╓╧
- ╓К╓Ё╓х╓Рлю╦ю╓╥╓ч╓╧║ё╟й╡╪╓кмя╟у╓╣╓Л╓©╔╫╔у╔х╔╕╔╖╔╒╓о║ж╓╫╓н╓ч╓ч║в╓Р
- ╢Пкэ╦╤мЩ╓х╓╥║╒╔╚╔Й╔у╔╘╔К╔к╔╒бГЁь╓о╓╫╓Л╓Р╟щ╩Щ║╒╩ы╠Г║╒╧╧©╥║╒╡Чни╓╒
- ╓К╓╓╓о╫╓ю╣╓╧╓К╣алЁ╓РиИ╓╓╓ч╓╩╓С║ё
-
- [лУцМ║╖
- цЬ╨Н╦╒╓к╢ь╓╧╓Кю╣й╦╓о╬Е╣╜╓н╠я╦Л╓к╓Х╓Ки╫╣╜╓г╓╧║ёфЭкэ╦ЛлУ╓о╓╒╓╞╓ч╓г
- ╩╡╧м╓г╓╧║ё
- ]
-</PRE></small>
-
-<p>╬Е╣╜╓оBSD╔И╔╓╔╩╔С╔╧╓г╦е╓╜╔╙║╪╔в╔С╔╫║╪╔╧╓н╔И╔╓╔╩╔С╔╧╓г╓╧║ё╔╫║╪╔╧╔Ё║╪╔и
-╓╛╓и╓н╓Х╓╕╓к╩х╓О╓Л╓Х╓╕╓х╓Бю╘╦б╓╥╓ч╓╩╓С║ё╧╔╓ч╓╥╓╓╓Ё╓х╓й╓н╓г║╒╡Ф║╧╓Б╓╫╓Л╓Р
-йя╓╗╓К╓д╓Б╓Й╓о╓╒╓Й╓ч╓╩╓С║ё</p>
-
-<P>
-<H4><A NAME="1.3">1.3</A>) PostgreSQL ╓нф╟╨Н╢д╤╜╓о║╘</H4>
-
-<P>цЬ╪т╓И╓о PostgreSQL ╓н╔Ё╔С╔я╔╓╔К╓х╔ф╔╧╔х╓Р╪║╓н╔в╔И╔ц╔х╔ш║╪╔Ю╬Е╓г╧т╓й╓╓╓ч╓╥╓©║ё(╓Ё╓Л╓И╓н╓╕╓а╓н╓╓╓╞╓д╓╚╓о╔Ё╔С╔я╔╓╔К╓к gcc ╓╛и╛мв╓г╓╧)║╖
-<P>╟Лхле╙╓к║╒╨г╤А╓нUnix╦ъ╢╧╔в╔И╔ц╔х╔ш║╪╔Ю╓й╓И╓пPostgreSQL╓Р╓о╓╥╓И╓╩╓И╓Л╓К╓о╓╨╓г╓╧║ё╔Й╔Й║╪╔╧╓н╩Чею╓г╪б╨щ╓к╔ф╔╧╔х╓Р╧т╓й╓ц╓©╓Ё╓х╓нйС╧П╓╛╓й╓╣╓Л╓©╔в╔И╔ц╔х╔ш║╪╔Ю╓к╓д╓╓╓ф╓о╔╓╔С╔╧╔х║╪╔К╪Й╟З╫Я╓кнС╣С╓╥╓ф╓╒╓Й╓ч╓╧║ё
-
-<P>
-<H4><A NAME="1.4">1.4</A>) Unix╟йЁ╟╓н╟э©╒хг╓г╩х╓╗╓К╓Б╓н╓о║╘</H4>
-
-<h6>
-╔╞╔И╔╓╔╒╔С╔х</h6>
-<P> MS Windows ╔в╔И╔ц╔х╔ш║╪╔Ю╬Е╓г║╒<I>libpq</I> C ╔И╔╓╔ж╔И╔Й║╒psql║╒╓╫╓Л╓х╓╫╓нб╬╓н╔╓╔С╔©║╪╔у╔╖║╪╔╧╓о ╔Ё╔С╔я╔╓╔К╡дг╫╓г║╒╔п╔╓╔й╔Й║╪╓╛аЖ╓Й╓ч╓╧║ё╓Ё╓н╬Л╧Г║╒╔╞╔И╔╓╔╒╔С╔х╓Р MS Windows ╬Е╓гаЖ╓И╓╩╓ф║╒TCP/IP ╥пмЁ╓г╔╣╔щ║╪╔х╓╣╓Л╓ф╓╓╓К Unix ╔в╔И╔ц╔х╔ш║╪╔Ю╬Е╓гаЖ╓К╔╣║╪╔п╓хдл©╝╓╥╓ч╓╧║ё
-<P> Win32 <I>libpq</I> ╔И╔╓╔ж╔И╔Й╓х psql ╓Р╨Н╓К╓©╓А╓к║╒<I>win31.mak</I> ╓╛гшиш╓к╢ч╓ч╓Л╓ф╓ч╓╧║ёPostgreSQL╓о <small>ODBC</small> ╔╞╔И╔╓╔╒╔С╔х╓х╓Бдл©╝╓г╓╜╓ч╓╧║ё
-
-<h6>
-╔╣║╪╔п</h6>
-<P> ╦╫╨ъ║╒Cygnus Unix/NT ╟э©╒╔И╔╓╔ж╔И╔Й╓н Cygwin ╓Р╩х╓ц╓ф║╒PostgreSQL ╔г║╪╔©╔ы║╪╔╧╔╣║╪╔п╓о Windows NT ╓х Win2k ╬Е╓г╡тф╞╓╥╓ф╓╓╓ч╓╧║ёгшиш╓к╢ч╓ч╓Л╓К<I>pgsql/doc/FAQ_MSWIN</I>╓╒╓К╓╓╓о╔╕╔╖╔ж╔╣╔╓╔х╓к╓╒╓К MS Windows FAQ ╓Р╓╢мВ╡╪╓╣╓╓║ёMicrosoft ╓наг╓н╔в╔И╔ц╔х╔ш║╪╔Ю╓к╟э©╒╓╧╓К╥в╡Х╓о╓╒╓Й╓ч╓╩╓С║ё<P>
-
-<br>
-[лУцМ║╖
-<br>
-<h6><font color="orange">
-Win32╔м╔╓╔ф╔ё║╪╔жхг(Win32 Native version)
-</font></h6>
-<pre>
- Windows-Native ╔╣║╪╔п║╪ & ╔╞╔И╔╓╔╒╔С╔х╔я╔ц╔╠║╪╔╦╓╛юффё╓╣╓С╓к╓Х╓Й
- ╟щ╩Щ╢имЩ╓╣╓Л╓ф╓╓╓ч╓╧║ё
- <a href="http://hp.vector.co.jp/authors/VA023283/PostgreSQL.html">http://hp.vector.co.jp/authors/VA023283/PostgreSQL.html</a>
- (Windows-Native Server&Client Package for PostgreSQL by Hiroshi Saito)
- <a href="http://hp.vector.co.jp/authors/VA023283/PostgreSQLe.html">http://hp.vector.co.jp/authors/VA023283/PostgreSQLe.html</a>
-
-</pre>
-<br>
-]
-<br>
-
-
-<P>
-<H4><A NAME="1.5">1.5</A>) PostgreSQL ╓о╓и╓Ё╓╚╓ИфЧ╪Й╓г╓╜╓ч╓╧╓╚║╘</H4>
-<P> PostgreSQL ╓н╦╣╓н anonymous ftp ╔╣╔╓╔х╓г╓╧║╖
-
-<UL>
- <LI> <A HREF="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</A>
-</UL>
-
-<P> ╔ъ╔И║╪╔╣╔╓╔х╓к╓д╓╓╓ф╓о║╒╡Ф║╧╓н╔А╔╓╔С Web ╔з║╪╔╦╓Р╓╢мВ╡╪╓╣╓╓║ё
-
-<small><PRE>
- [лУцМ:
-
- ╟й╡╪╓офЭкэ╓н╔ъ╔И║╪╔╣╔╓╔х╓г╓╧:
-
- Japan: <A HREF="ftp://mirror.nucba.ac.jp/mirror/postgresql/pub/">ftp://mirror.nucba.ac.jp/mirror/postgresql/pub/</A>
- Japan: <A HREF="ftp://ring.ip-kyoto.ad.jp/pub/misc/db/postgresql/">ftp://ring.ip-kyoto.ad.jp/pub/misc/db/postgresql/</A>
- Japan: <A HREF="ftp://ring.crl.go.jp/pub/misc/db/postgresql/">ftp://ring.crl.go.jp/pub/misc/db/postgresql/</A>
- Japan: <A HREF="ftp://ring.saitama-u.ac.jp/pub/misc/db/postgresql/">ftp://ring.saitama-u.ac.jp/pub/misc/db/postgresql/</A>
- Japan: <A HREF="ftp://ring.astem.or.jp/pub/misc/db/postgresql/">ftp://ring.astem.or.jp/pub/misc/db/postgresql/</A>
- Japan: <A HREF="ftp://ring.exp.fujixerox.co.jp/pub/misc/db/postgresql/">ftp://ring.exp.fujixerox.co.jp/pub/misc/db/postgresql/</A>
- Japan: <A HREF="ftp://ring.jah.ne.jp/pub/misc/db/postgresql/">ftp://ring.jah.ne.jp/pub/misc/db/postgresql/</A>
- Japan: <A HREF="ftp://ring.etl.go.jp.jp/pub/misc/db/postgresql/">ftp://ring.etl.go.jp.jp/pub/misc/db/postgresql/</A>
- Japan: <A HREF="ftp://ring.asahi-net.or.jp/pub/misc/db/postgresql/">ftp://ring.asahi-net.or.jp/pub/misc/db/postgresql/</A>
- Japan: <A HREF="ftp://ring.so-net.ne.jp/pub/misc/db/postgresql/">ftp://ring.so-net.ne.jp/pub/misc/db/postgresql/</A>
- Japan: <A HREF="ftp://ring.aist.go.jp/pub/misc/db/postgresql/">ftp://ring.aist.go.jp/pub/misc/db/postgresql/</A>
- ]
-</PRE></small>
-
-<P>
-
-<H4><A NAME="1.6">1.6</A>) ╔╣╔щ║╪╔х╓о╓и╓Ё╓г╪У╓╠╓И╓Л╓ч╓╧╓╚║╘</H4>
-
-<P> ╪Гмв╓й╔А║╪╔Й╔С╔╟║╕╔Й╔╧╔х╓о: <A HREF="mailto:pgsql-general@PostgreSQL.org">pgsql-general@PostgreSQL.org</A>╓г╓╧║ёPostgreSQL ╓к╢ь╓╧╓К╓Ё╓х╓г╓╒╓Л╓п╣дою╓╛╓г╓╜╓ч╓╧║ё╓Ё╓н╔Й╔╧╔х╓ь╓н╩╡╡ц╓н╓о║╒ее╩р╔А║╪╔К╓нкэй╦(Subject ╧т╓г╓о╓╒╓Й╓ч╓╩╓С)╓к╪║╓нё╡╧т╓Р╫Я╓╓╓ф║╒
-
-<PRE>
- subscribe
- end
-</PRE>
-
-<P> <A HREF="mailto:pgsql-general-request@PostgreSQL.org">pgsql-general-request@PostgreSQL.org</A> ╓ьаВ╓ц╓ф╡╪╓╣╓╓║ё
-
-<P> ╔ю╔╓╔╦╔╖╔╧╔ххг╓н╔А║╪╔Й╔С╔╟║╕╔Й╔╧╔х╓Б╓╒╓Й╓ч╓╧║ё╓Ё╓н╔Й╔╧╔х╓ь╓н╩╡╡ц╓о "кэй╦"╓к║╖
-
-<PRE>
- subscribe
- end
-</PRE>
-
-╓х╫Я╓╓╓ф <A HREF="mailto:pgsql-general-digest-request@PostgreSQL.org"> pgsql-general-digest-request@PostgreSQL.org</A> ╓ьее╩р╔А║╪╔К╓РаВ╓ц╓ф╡╪╓╣╓╓║ё
-
-<P> ╔ю╔╓╔╦╔╖╔╧╔ххг╓о║╒╔А╔╓╔С╔Й╔╧╔х╓г╪У©╝╓╧╓К╔А╔ц╔╩║╪╔╦╓╛ 30k дЬеын╞╓КкХ╓к╔ю╔╓╔╦╔╖╔╧╔ххг╔Й╔╧╔х╓н╔А╔С╔п║╪╓каВиу╓╣╓Л╓ч╓╧║ё
-
-<P> ╔п╔╟╔Л╔щ║╪╔хмя╓н╔А║╪╔Й╔С╔╟╔Й╔╧╔х╓Б╓╒╓Й╓ч╓╧║ё╓Ё╓н╔Й╔╧╔х╓ь╓н╩╡╡ц╓о "кэй╦"╓х╓╓╓ц╓╥╓Г╓к║╖
-<A
-HREF="mailto:bugs-request@PostgreSQL.org">bugs-request@PostgreSQL.org</A>
-
-╓ьее╩р╔А║╪╔К╓РаВ╓ц╓ф╡╪╓╣╓╓║ё
-
-<P> Ё╚х╞╪т╓н╣дою╓н╓©╓А╓н╔А║╪╔Й╔С╔╟╔Й╔╧╔х╓БмЬмя╓г╓╜╓ч╓╧║ё╓Ё╓н╔Й╔╧╔х╓ь╓н╩╡╡ц╓оее╩р╔А║╪╔К╓нкэй╦╓к║╖
-
-<P>
-<PRE>
- subscribe
- end
-</PRE>
-
-<P> ╓х╫Я╓╓╓ф║╒<A HREF="mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</A>╓ьее╩р╔А║╪╔К╓РаВ╓ц╓ф╡╪╓╣╓╓║ё
-
-<P> PostgreSQL ╓к╓д╓╓╓ф╓Б╓ц╓х╬э╓╥╓╞цн╓Й╓©╓╠╓Л╓п║╒╪║╓н postgreSQL WWW╔ш║╪╔Ю╔з║╪╔╦╓╚╓И╓©╓и╓Л╓ч╓╧║╖
-
-<BLOCKQUOTE>
- <A HREF="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A>
-</BLOCKQUOTE>
-<P>
-
- EFNet ╓к <I>#PostgreSQL</I> ╓х╓╓╓╕ IRC ╔а╔Ц╔С╔м╔К╓Б╓╒╓Й╓ч╓╧║ё
-UNIX ╔Ё╔ч╔С╔и╓г<tt>irc -c '#PostgreSQL' "$USER" <A HREF="http://irc.phoenix.net">irc.phoenix.net</A> ╓Р╩х╓╓╓ч╓╧║ё<P>
-
-<small><PRE>
- [лУцМ:
- 1999г╞7╥Н23фЭ║╒фЭкэPostgreSQL╔Ф║╪╔╤║╪╡Я(╓к╓ш╓С ╓щ╓╧╓х╓╟╓Л╓╧ ╓Ф║╪╓╤║╪ ╓╚╓╓)║╒н╛╬нJPUG╓╛юън╘╓╣╓Л╓ч╓╥╓©║ё
- JPUG ╓охС╠дмЬах©╔╓г║╒PostgreSQL╓РмЬмя╓╧╓К©мцё╓наЙ╦ъ╤╗но╓н╬Л╓г╓╧║ё
- ю╣╡Я╟В╓н╡ЯхЯ╓ол╣на╓г╓╧╓╛║╒╤╗╩©╡Я╟В╓н╡ЯхЯ╓х╡Я╟В╓нюя╤ке╙╓й╧в╦╔╓╛╡Я╓н╠©╠д╓Р╫У╓╠╓ф╓╓╓ч╓╧║ё
- ╬э╓╥╓╞╓о║╒JPUG ╓нWeb ╔╣╔╓╔х:
- <A HREF="http://www.postgresql.jp/">http://www.postgresql.jp/</A>
- ╓Р╓╢мВ╓╞╓ю╓╣╓╓║ё╡Я╟Вепо©╓Б╡дг╫╓х╓й╓ц╓ф╓╓╓ч╓╧║ё
- 1990г╞бЕцФ╓╢╓М╓Х╓Й║╒╔щ╔╧╔х╔╟╔Л╔╧╓нфЭкэ╦Л╔А║╪╔Й╔С╔╟║╕╔Й╔╧╔х╓Рюп╟Ф цёив╓╣╓С╓╛╪Г╨е╓╥╓ф╓╓╓ч╓╧║ё╬э╨ы╓о║╒
- <A HREF="http://www.sra.co.jp/people/t-ishii/PostgreSQL/ML/info.html">http://www.sra.co.jp/people/t-ishii/PostgreSQL/ML/info.html</A>
- ╓Р╓╢мВ╡╪╓╣╓╓║ё╔╒║╪╔╚╔╓╔ж╓Р║╒╓╓╓О╓╜╓Й╓╣╓С╓нpgsql-jp ML╦║╨В╔╥╔╧╔ф╔Ю
- <A HREF="http://datula.mio.org/~iwakiri/pgsql_jp/">http://datula.mio.org/~iwakiri/pgsql_jp/</A>
- ╓г╦║╨В╓╧╓К╓Ё╓х╓Б╓г╓╜╓ч╓╧║ё
- ]
-</PRE></small>
-
-
-<P>╬╕мя╔╣╔щ║╪╔х╡Я╪р╓н╔Й╔╧╔х╓о<a href="http://www.postgresql.org/users-lounge/commercial-support.html">http://www.postgresql.org/users-lounge/commercial-support.html</a>╓к╓╒╓Й╓ч╓╧║ё
-
-<small><PRE>
- [лУцМ:
- фЭкэ╓г╓о║╒<A HREF="http://osb.sra.co.jp/">SRA Inc. ╔╙║╪╔в╔С╔╥╔╧╔ф╔Ю╩Ж╤хиТ</A> ╓к╓ф╬╕мя╔╣╔щ║╪╔х╓╛╧т╓й╓О╓Л╓ф╓╓╓ч╓╧║ё
- <A HREF="http://www.miraclelinux.co.jp/">╔ъ╔И╔╞╔К║╕╔Й╔й╔ц╔╞╔╧ЁТ╪╟╡Я╪р</A> ╓г "Miracle Linux for PostgreSQL" ╓нхнгД╓х╔╣╔щ║╪╔х╓╛
- Ё╚╩о╓╣╓Л╓ч╓╥╓©║ё
- ]
-</PRE></small>
-
-<P>
-
-<H4><A NAME="1.7">1.7</A>) ╨г©╥хг╓о╓и╓Л╓г╓╧╓╚</H4>
-
-<P> PostgreSQL ╓н╨г©╥хг╓о╔п║╪╔╦╔Г╔С 7.2.1 ╓г╓╧║ё
-<P>
-╡Ф║╧╓о║╒4╔╚╥НкХ╓к╔А╔╦╔Ц║╪╔Й╔Й║╪╔╧╓Р╧т╓й╓╕╓Ё╓х╓Р╥в╡Х╓╥╓ф╓╓╓ч╓╧║ё
-<P>
-
-<H4><A NAME="1.8">1.8</A>) ╓и╓н╓Х╓╕╓йй╦╫Я╓╛╓╒╓Й╓ч╓╧╓╚║╘</H4>
-
-<P> гшиу╓нцФ╓к║╒╓╓╓╞╓д╓╚╓н╔ч╔к╔Е╔╒╔К╓х╔╙╔С╔И╔╓╔С║╕╔ч╔к╔Е╔╒╔К(╔ч╔к╔Е╔╒╔К║╕╔з║╪╔╦)╓╙╓Х╓с╓╓╓╞╓д╓╚╓н╬╝╓╣╓й╔ф╔╧╔хнЦбЙ╓╛╢ч╓ч╓Л╓ч╓╧║ё<I>/doc</I> ╔г╔ё╔Л╔╞╔х╔Й╓Р╓╢мВ╡╪╓╣╓╓║ё╓ч╓©║╒╔ч╔к╔Е╔╒╔К╓о║╒<A
-HREF="http://www.PostgreSQL.org/users-lounge/docs/">
-http://www.PostgreSQL.org/users-lounge/docs/</A>
-╓г╔╙╔С╔И╔╓╔С╓г╓Б╠эмВ╓г╓╜╓ч╓╧║ё
-
-<small><PRE>
- [лУцМ:
- ║йЁТ║кSRA╓хфЭкэ╔щ╔╧╔х╔╟╔Л╔╧╔Ф║╪╔╤║╪╡Я╓гкщлУ╓╣╓Л║╒
- <A HREF="http://osb.sra.co.jp/PostgreSQL/Manual/">║жPostgreSQL ╔╙╔у╔ё╔╥╔Ц╔К╔ч╔к╔Е╔╒╔К║в</A>
- ╓х╓╥╓ф╫пхг╓╣╓Л╓ф╓╓╓ч╓╧║ё
- ]
-</PRE></small>
-
-
-<P> ╔╙╔С╔И╔╓╔С╓г╩╡╬х╓г╓╜╓К PostgreSQL ╓нкэ╓Б2╨Щ╓╒╓Й╓ч╓╧║ё<A href=
- "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
-<small><PRE>
- [лУцМ:
- фЭкэ╔щ╔╧╔х╔╟╔Л╔╧╔Ф║╪╔╤║╪╡Я╓н<A HREF="http://www.postgresql.jp/subcommittee/psqltrans/"> ║жPostgreSQL BookкщлУй╛╡й╡Я║в</A>
- ╓к╓фкщлУ╓╣╓Л╓ч╓╥╓©║ё
- ]
-</PRE></small>
-
- ╓╙╓Х╓с║╒ <A href=
- "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>
-╓г╓╧║ё
-
-
- ╧ьфЧ╡дг╫╓й╫Яюр╓нлэо©╓о║╒<A href=
- "http://www.postgresql.org/books/">http://www.postgresql.org/books/</A>
- ╓к╓╒╓Й╓ч╓╧║ё
-
- PostgreSQL ╣╩╫я╬ПйС╣╜╩Ж╓Б║╒<A href=
- "http://techdocs.postgresql.org/">http://techdocs.postgresql.org/</A>
- ╓к╓╒╓Й╓ч╓╧║ё</P>
-
-
-<P> <I>psql</I> ╓Б║╒╥©║╒╠И╩╩╩р║╒╢ь©Т║╒╫╦лС║╒╓╫╓нб╬╓н╬ПйС╓Р╓╙╦╚╓╩╓╧╓К║╒╓╓╓╞╓д╓╚╓нагю╡╓И╓╥╓╓ \d ╔Ё╔ч╔С╔и╓Р╩Щ╓а╓ч╓╧║ё
-
-<P> ╡Ф║╧╓н Web ╔╣╔╓╔х╓к╓о║╒╓Б╓ц╓хбТ╩Ё╓нй╦╫Я╓╛╓╒╓Й╓ч╓╧║ё
-
-<P>
-<H4><A NAME="1.9">1.9</A>) ╢Шцн╓н╔п╔╟╓Дл╓╓юл╣╓╓╣║г╫╓о╓и╓╕╓Д╓ц╓ф╦╚╓д╓╠╓ч╓╧╓╚║╘
-</H4><P>
-
-PostgreSQL╓оЁхд╔╓╣╓Л╓©SQL-92╓н╔╣╔ж╔╩╔ц╔х╓Р╔╣╔щ║╪╔х╓╥╓ч╓╧║ё
-╡Ф║╧╓н╔з║╪╔╦╓н
-<A HREF="http://www.PostgreSQL.org/docs/todo.html">
-TODO</A> ╔Й╔╧╔х╓к║╒╢Шцн╓н╔п╔╟╓Д╥ГмН╣║г╫╓Д╬╜мХ╥в╡Х╓к╓д╓╓╓ф╓н╣╜╫р╓╛╓╒╓Й╓ч╓╧║ё
-
-<P>
-<H3><A NAME="1.10">1.10</A>) <small>SQL</small> ╓о╓и╓╕╓╧╓Л╓пЁь╓ы╓ч╓╧╓╚║╘</H3>
-<P>
-<A HREF="http://www.PostgreSQL.org/docs/awbook.html">
-http://www.PostgreSQL.org/docs/awbook.html</A>
-╓к╓╒╓КPostgreSQLкэ╓г <small>SQL</small> ╓Р╤╣╓╗╓ф╓╓╓ч╓╧║ё
-
-<small><PRE>
- [лУцМ:
- фЭкэ╔щ╔╧╔х╔╟╔Л╔╧╔Ф║╪╔╤║╪╡Я╓н<A HREF="http://www.postgresql.jp/subcommittee/psqltrans/"> ║жPostgreSQL BookкщлУй╛╡й╡Я║в</A>
- ╓к╓фкщлУ╓╣╓Л╫пхг╓╣╓Л╓ф╓╓╓ч╓╧║ё
- ]
-</PRE></small>
-
-<P>
-╓╫╓нб╬╓к╓Б PostgreSQLкэ╓х╓╥╓ф║╒<A href=
- "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook</A>
-╓╛╓╒╓Й╓ч╓╧║ё
-
-агю╡╓И╓╥╓╓╪Й╟З╫Я╓о║╒<A href=
- "http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A>
- <A href=
- "http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">
- http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,</A>
- ╓╫╓╥╓ф║╒<A href=
- "http://sqlcourse.com/">http://sqlcourse.com</A>
-╓к╓╒╓Й╓ч╓╧║ё</P>
-
-
- <P>╓╫╓нб╬╓г╓о║╒ "Teach Yourself SQL in 21 Days, Second Edition" ╓╛ <A href=
- "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A>╓к╓╒╓Й╓ч╓╧║ё</P>
-
-<P>
-б©╓╞╓н╔Ф║╪╔╤╓к║╒
-<I>The Practical SQL Handbook</I>, Bowman Judith S. et al., Addison-Wesley
-╓╛╧╔и╬╓г╓╧║ё
-╓╫╓нб╬╓к║╒<I>The Complete Reference SQL</I>, Groff et al., McGraw-Hill
-╓н╓Х╓╕╓й╓н╓Б╓╒╓Й╓ч╓╧║ё
-</P>
-
-<P>
-<small><PRE>
- [лУцМ:
- юп╟Фцёив╩А╓к╓Х╓КфЭкэ╦Л╓н╩╡╧мй╦╦╔╓н╬р╡П╔з║╪╔╦
- <A HREF="http://www.SRA.co.jp/people/t-ishii/PostgreSQL/doc-jp/index.html">http://www.SRA.co.jp/people/t-ishii/PostgreSQL/doc-jp/index.html</A>
- ╓╛╓╒╓Й╓ч╓╧║ё
- ╤Афёд╬й╦╩А╓н║ж╫И©╢╪т╦Ч╓нёдёбюъ╥вфЧлГ║╕ёсёяёлфЧлГ╩╡╧м╫Я╬р╡П║в╓н╔Ё║╪╔й║╪
- <A HREF="http://www.shonan.ne.jp/~nkon/ipsql/books_SQL.html">http://www.shonan.ne.jp/~nkon/ipsql/books_SQL.html</A>
- ╓╛╓╒╓Й╓ч╓╧║ё
- кыедня╠я╩А╓н║жPostgreSQLфЭкэ╦Л╔ч╔к╔Е╔╒╔К║в
- <A HREF="http://www.net-newbie.com/">http://www.net-newbie.com/</A>
- ╓г╓о╔╙╔С╔И╔╓╔С╔ч╔к╔Е╔╒╔К╓н╦║╨В╓╛╓г╓╜╓ч╓╧║ё
- ╢щ╩ЁитфСив╩А╓нUNIX ╔г║╪╔©╔ы║╪╔╧фЧлГ
- <A HREF="http://www.wakhok.ac.jp/DB/DB.html">http://www.wakhok.ac.jp/DB/DB.html</A>
- ╓Б╔╙╔С╔И╔╓╔С╓гфи╓Ю╓Ё╓х╓╛╓г╓╜╓ч╓╧║ё
- ]
-</PRE></small>
-
-<H4><A NAME="1.11">1.11</A>) PostgreSQL╓ою╬нЯ2000г╞лДбЙ(Y2K)╓кбп╠Ч╓╥╓ф╓╓╓ч╓╧╓╚║╘
-</H4><P>
-
-бп╠Ч╓╥╓ф╓ч╓╧║ёю╬нЯ2000г╞╓Х╓Й╦Е╓нфЭиу╓Б║╒╣╙╦╣а╟2000г╞╓Х╓Йа╟╓нфЭиу╓Б║╒╢йц╠╓к╟╥╓╗╓ч╓╧║ё
-<P>
-<H4><A NAME="1.12">1.12</A>) Ё╚х╞╔а║╪╔Ю╓к╓о╓и╓н╓Х╓╕╓к╩╡╡ц╓╥╓ч╓╧╓╚║╘<BR>
-</H4><P>
-
-╓ч╓╨╨г╫И(ё╠хжлэ)╓к║╒╨г©╥╓н╔╫║╪╔╧╓Р╔ю╔╕╔С╔М║╪╔и╓╥║╒╡Ф║╧╓н Web ╔╣╔╓╔х╓╚гшиш╓к╢ч╓ч╓Л╓ф╓╓╓К
-PostgreSQL Developers╓нй╦╫Я╓Рфи╓ъ╓ч╓╧║ё
-ё╡хжлэ╓к║╒<I>pgsql-hackers</I> ╓х <I>pgsql-patches</I> ╔А║╪╔Й╔С╔╟║╕╔Й╔╧╔х╓Р╧ьфи(subscribe)╓╥╓ч╓╧║ё
-ёЁхжлэ╓к║╒╧Бий╪а╓н╔я╔ц╔а╓Рpgsql-patches╓кх╞©╝╓╥╓ч╓╧║ё
-
-╓╙╓Х╓╫╫╫©м╓а╓Г╓ц╓х╓н©мцё╓╛║╒PostgreSQL <small>CVS</small>╔╒║╪╔╚╔╓╔ж╓к╔Ё╔ъ╔ц╔х╓╧╓К╦╒╦б╓Р╩Щ╓ц╓ф╓╓╓ч╓╧║ё
-╓╫╓н╓╫╓Л╓╬╓Л╓н©мцё╓╛бТ╩Ё╓н╧Бий╪а╓й╔я╔ц╔а╓Рх╞©╝╓╧╓К╓н╓г║╒╦╫╨ъ╔Ё╔ъ╔ц╔©║╪╓х╓й╓ц╓ф╓╓╓К©мцё╓о╓╫╓Л╓кди╓╓иу╓╞╓н╓╛бГйя╓г╓╧╓╛║╒╡Ф║╧╓охЮ╓И╓╛╔Ё╔ъ╔ц╔х╓╥╓©╔я╔ц╔а╓о╧Бий╪а╓г╓╒╓К╓хЁн©╝╓╥╓ф╓╓╓ч╓╧║ё
-<P>
-<H4><A NAME="1.13">1.13</A>) ╔п╔╟╔Л╔щ║╪╔х╓о╓и╓н╓Х╓╕╓кх╞©╝╓╥╓ч╓╧╓╚║╘
-</H4>
-
- <P>╔п╔╟╓РйС╧П╓╧╓К╩ейЩ╓к╓д╓╓╓ф╓н╔╛╔╓╔и╔И╔╓╔С╓хйЩ╦Ч╓е╓╠╓╛╓╒╓К<A href=
- "http://www.postgresql.org/bugs/bugs.php">PostgreSQL BugTool</A>
- (╔п╔╟╔д║╪╔К)╓н╔з║╪╔╦╓Рк╛╓Л╓ф╓ъ╓ф╡╪╓╣╓╓║ё </P>
-
-<P> ╓╫╓на╟╓к <A HREF="http://postgreSQL.org">http://postgreSQL.org</A>╓к╓╒╓К╨г©╥╓н FAQ ╓Р╔а╔╖╔ц╔╞╓╥╓ф╡╪╓╣╓╓║ё
-
-<P> ╓╫╓Л╓хф╠╩Ч╓к ftp ╔╣╔╓╔х <A HREF="ftp://ftp.postgreSQL.org/pub/">ftp://ftp.postgreSQL.org/pub/</A>╓г║╒╓Б╓ц╓х©╥╓╥╓╓╔п║╪╔╦╔Г╔С╓н PostgreSQL ╓╒╓К╓╓╓о╔я╔ц╔а╓Р╓╣╓╛╓╥╓ф╓ъ╓ф╡╪╓╣╓╓║ё
-
-<P>
-<H4><A NAME="1.14">1.14</A>) б╬╓н<small>DBMS</small>╓н╓ххФ╓ы╓фPostgreSQL╓о╓и╓╕╓й╓н╓г╓╧╓╚║╘
-</H4><P>
-
-╔╫╔у╔х╔╕╔╖╔╒╓Р╥в╓КйЩк║╓к╓о╓╓╓╞╓д╓╚╓╒╓Й╓ч╓╧║ё╣║г╫╓хю╜г╫╓х©╝мЙю╜╓х╔╣╔щ║╪╔х╓х╡аЁй╓г╓╧║ё
-
-<DL>
-<DT> <B>╣║г╫(Features)</B>
-<DD>
-PostgreSQL╓о║╒╔х╔И╔С╔╤╔╞╔╥╔Г╔С║╒иШлД╓╓╧Г╓О╓╩║╒╔х╔Й╔╛║╪║╒╔с╔Е║╪║╒Ё╟иТ╔╜║╪
-ю╟╧Гю╜╩╡╬х║╒╓╙╓Х╓с║╒юЖнЩ╓╣╓Л╓©╔М╔ц╔╞╣║╧╫╓й╓и║╒бГ╣╛ло╬╕мя<small>
-DBMS</small>╓╛╩Щ╓д╣║г╫╓Р╓ш╓х╓С╓и╩Щ╓ц╓ф╓╓╓ч╓╧║ё╓╣╓И╓к PostgreSQL╓о║╒╔Ф║╪╔╤
-дЙ╣а╥©║╒╥я╬╣║╒╔К║╪╔К║╒╓╫╓Л╓╚╓И║╒╔М╔ц╔╞╤╔╧Г╓Р╫л╬╝╓╧╓К╔ч╔К╔а╔п║╪╔╦╔Г╔Сф╠╩Ч
-ю╜ю╘╦Ф╓й╓и║╒╬╕мя<small>DBMS</small>╓Б╩Щ╓а╧Г╓О╓╩╓й╓╓╓Х╓╕╓й╣║г╫╓Р╓╓
-╓╞╓д╓╚╩Щ╓а╧Г╓О╓╩╓ф╓╓╓ч╓╧║ё<BR>
-<BR>
-
-<DT> <B>ю╜г╫(Performance)</B>
-<DD>
-
-PostgreSQL╓офС╓д╓н╔Б║╪╔и╓гаЖ╓Й╓ч╓╧║ёиАдл╓н<I>fsync</I>╔Б║╪╔и╓о║╒OS╓╛╔╞
-╔И╔ц╔╥╔Е╓╥╓©╓Й║╒©Тиц╦Е╓кее╦╩╓╛мН╓а╓©╓Й╓╥╓©╓х╓╜╓н╓©╓А╓к║╒╔х╔И╔С╔╤╔╞╔╥╔Г
-╔С╓╛╢╟н╩╓╧╓КкХ╓к╔г╔ё╔╧╔╞╓к╫Я╓╜╧Ч╓ъ║╒╓╧╓ы╓ф╓н╔г║╪╔©╓Р╔г╔ё╔╧╔╞╓кйщб╦╓╥╓ч
-╓╧║ё╓Ё╓н╔Б║╪╔и╓г╓о║╒╓ш╓х╓С╓и╓н╬╕мя╔г║╪╔©╔ы║╪╔╧╓Х╓Й╓Бцы╓╞╓й╓Й╓ч╓╧╓╛║╒╓╫
-╓ниТй╛е╙╓ймЩмЁ╓х╓╥╓ф║╒╬╕мя╓н╔г║╪╔©╔ы║╪╔╧╓нцФ╓к╓о╓Ё╓н╓Х╓╕╓кйщ╪Ие╙╓й╔г╔ё
-╔╧╔╞╫Я╓╜╧Ч╓ъ╓Р╔г╔у╔╘╔К╔х╓х╓╥╓ф╓╓╓К╓Б╓н╓╛╬╞╓й╓╓╓х╓╓╓╕╓Ё╓х╓Б╓╒╓Й╓ч╓╧║ё
-<I>no-fsync</I>╔Б║╪╔и╓г║╒иАдл║╒PostgreSQL╓о╬╕мя╔г║╪╔©╔ы║╪╔╧╓Х╓Й╓Бб╝╓╞
-╓й╓Й╓ч╓╧╓╛║╒╓╥╓╚╓╥╓й╓╛╓И║╒OS╓н╔╞╔И╔ц╔╥╔Е╓г╔г║╪╔©╓╛гк╡У╓╣╓Л╓К╓╚╓Б╓╥╓Л╓ч
-╓╩╓С║ё╡Ф║╧╓о║╒╓╫╓нцФ╢ж╔Б║╪╔и╓РЁ╚х╞цФ╓г║╒╓╫╓Л╓╛╓╕╓ч╓╞╓Ф╓╞╓х║╒╢╟а╢fsync
-╔Б║╪╔и╓ш╓ию╜г╫╓Р╣╬ю╥╓к╓╧╓К╓Ё╓х╓й╓╞║╒OS╓╛╔╞╔И╔ц╔╥╔Е╓╧╓К30ица╟╓ч╓г╓н╔г║╪
-╔©ю╟╧Гю╜╓Рйщ╓ф╓К╓Х╓╕╓к╓й╓Й╓ч╓╧║ё
-<BR><BR>
-
-MySQL╓й╓и╓нфц╡╫╥©╔г║╪╔©╔ы║╪╔╧║╕╔╥╔╧╔ф╔Ю╓к╓╞╓И╓ы╓ф║╒PostgreSQL╓начфЧ║©
-╧╧©╥╓╛цы╓╓╓н╓о║╒╔х╔И╔С╔╤╔╞╔╥╔Г╔С╓к╓Х╓К╔╙║╪╔п║╪╔ь╔ц╔и╓╛╓╒╓К╓╚╓И╓г╓╧║ё╓Б
-╓а╓М╓С║╒MySQL╓к╓о╬Е╣╜╓н<I>Features</I>╓нюА╓к╪╗╓╧╓Х╓╕╓й╣║г╫╓о╓ч╓ц╓©╓╞╓╒
-╓Й╓ч╓╩╓С║ё╡Ф║╧╓о║╒PostgreSQL╓к╫юфПю╜╓х╣║г╫ю╜╓Рах╓ъ╧Ч╓ъ╓й╓╛╓И╓Б║╒юД╓╗╓╨║╒
-╔в╔М╔у╔║╔╓╔И║╪╓кЁщ╓╠╓©╓Й╔╫║╪╔╧╔Ё║╪╔и╓Р╡Рюо╓╥╓©╓Й╓╥╓ф║╒ю╜г╫╓н╡Ча╠╓РбЁ╓╠
-╓ф╓╓╓ч╓╧║ёPostgreSQL ╓х MySQL ╓х╓РхФЁс╓╥╓ф╓╓╓КллгР╓╓ Web ╔з║╪╔╦╓╛
-<a href="http://openacs.org/why-not-mysql.html">
-http://openacs.org/why-not-mysql.html</a>
-╓к╓╒╓Й╓ч╓╧║ё
-<BR><BR>
-
-PostgreSQL╓о║╒Unix╔в╔М╔╩╔╧╓Р╣╞ф╟╓╧╓К╓Ё╓х╓к╓Х╓Й╔Ф║╪╔╤║╪юэбЁ╓РаЮ╨Н╓╥╓ч╓╧║ё
-йё©Т╓н╔п╔ц╔╞╔╗╔С╔и║╕╔в╔М╔╩╔╧╓╛╬ПйС╓Р╔М╔ц╔╞╓╥╓й╓╛╓И╔г║╪╔©║╕╔п╔ц╔у╔║║╪╓Р
-╤╕м╜╓╥╓ч╓╧║ё╔ч╔К╔аCPU╓г╓о║╒╢йц╠╓кйё©Т╓н╔п╔ц╔╞╔╗╔С╔и╓Р╓╫╓Л╓╬╓Л╓нCPU╓гаЖ
-╓И╓╩╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧║ё<BR><BR>
-
-
-<DT> <B>©╝мЙю╜(Reliability)</B>
-<DD>
-
-╡Ф║╧╓о║╒<small>DBMS</small>╓н©╝мЙю╜╓╛╧Б╓╞╓й╓╞╓ф╓о╓╫╓н╡ацм╓╛л╣╓╓╓Ё╓х╓РмЩ╡Р╓╥╓ф╓ч╓╧║ё╫╫
-й╛╔ф╔╧╔х╓╥╓ф║╒╟бдЙ╓╥╓©╔Ё║╪╔и╓Р╔п╔╟╓Р╨г╬╝╓к╓╥╓ф╓╚╓И╔Й╔Й║╪╔╧╓╧╓К╓Х╓╕╓к╤п
-╓А╓ф╓ч╓╧║ё╓╫╓Л╓╬╓Л╓н╔Й╔Й║╪╔╧╓о╬╞╓й╓╞╓х╓Б1╔╚╥Н╟й╬Е╓н╔ы║╪╔©║╕╔ф╔╧╔х╓Р╧т
-╓й╓╓║╒╓Ё╓Л╓ч╓г╓н╔Й╔Й║╪╔╧╓нмЗнР╓╛║╒ю╫ийхг╓х╓╥╓ф╟бдЙ╓╥╓©╥Ь╦г╓й╔Й╔Й║╪╔╧╓г
-╓╒╓К╓Ё╓х╓Рй╙╦Л╓ц╓ф╓╓╓ч╓╧║ё╓Ё╓нй╛лН╓г╓о║╒б╬╓н╔г║╪╔©╔ы║╪╔╧╓ххФ╓ы╓ф╓Бб╫©╖
-╓╛╓й╓╓╓Ё╓х╓к╪╚©╝╓Р╩Щ╓ц╓ф╓╓╓ч╓╧║ё
-
-<DT> <B>╔╣╔щ║╪╔х(Support)</B>
-<DD>
-
- ╡Ф║╧╓н╔А║╪╔Й╔С╔╟╔Й╔╧╔х╓о║╒аЬ╤Ь╓╧╓К╓╓╓╚╓й╓КлДбЙ╓к╓д╓╓╓ф╓Б╡Р╥Х╓ь╓н╪Й
-╫У╓╠╓Р╓╥╓ф╓╞╓Л╓К║╒Ё╚х╞╪т╓Д╔Ф║╪╔╤╓нбГ╓╜╓й╫╦╓ч╓Й╓РдС╤║╓╥╓ф╓╓╓ч╓╧║ё╡Ф║╧╓о
-лДбЙ╓н╡Р╥Х╓Рйщ╬з╓╧╓К╓Ё╓х╓о╓г╓╜╓ч╓╩╓С╓╛║╒╬╕мя╔г║╪╔©╔ы║╪╔╧╓г╓╒╓ц╓ф╓Б╬О╓к
-╡Р╥Х╓╣╓Л╓К╓О╓╠╓г╓о╓╒╓Й╓ч╓╩╓С║ёЁ╚х╞╪т╓Д║╒╔Ф║╪╔╤║╕╔Ё╔ъ╔Е╔к╔ф╔ё║╒╔ч╔к╔Е╔╒
-╔КнЮ║╒╓╫╓Л╓к║╒╔╫║╪╔╧╔Ё║╪╔и╓й╓и╓ьд╬юэ╔╒╔╞╔╩╔╧╓г╓╜╓К╓Ё╓х╓Х╓ц╓ф║╒
-PostgreSQL╓н╔╣╔щ║╪╔х╓о║╒б╬╓н<small>DBMS</small>╔╣╔щ║╪╔х╓Х╓Й╓Бм╔╓Л╓©╓Б╓н╓х╓й╓ц╓ф╓╓╓ч╓╧║ё
-╦Фмвк╬╓кеЗ╓╗╓ф║╒╩ЖйакХ╓н╬╕мя╔╣╔щ║╪╔х╓й╓и╓Б╓╒╓Й╓ч╓╧║й╔╣╔щ║╪╔хFAQ╧Юлэ╓Р╓╢мВ
-╡╪╓╣╓╓║к║ё
-
-<DT> <B>╡аЁй(Price)</B>
-<DD>
-
-PostgreSQL╓нмЬмя╓о║╒╬╕мя╓г╓БхС╬╕мя╓г╓Б║╒╓╧╓ы╓фл╣на╓г╓╧║ё╬Е╣╜╓к╪╗╓╥╓ф╓╒
-╓КBSD╔╧╔©╔╓╔К╓н╩хмя╣ЖбЗ╓кЁ╟╓Л╓й╓╓╦б╓Й║╒PostgreSQL╓н╔Ё║╪╔и╓Рю╘╦бл╣╓╥╓г
-╬╕ий╓ках╓ъ╧Ч╓Ю╓Ё╓х╓╛╓г╓╜╓ч╓╧║ё
-<BR><BR>
-</DL>
-<P>
-
-<H4><A name="1.15">1.15</A>) PostgreSQL╓Р╩Я╤Блл╓г╠Г╫У╓╧╓К╓к╓о╓и╓╕╓╧╓Л╓п╓Х╓╓╓г╓╧╓╚║╘
-</H4>
-
- <P>PostgreSQL╓о║╒╡Ф║╧╓╛6г╞а╟╓к╩о╓А╓©╓х╓╜╟ймХ║╒╨г╧Б╔╞╔И╔╧╓н╢Пхв╓Р
-╩Щ╓ц╓ф╓╓╓ч╓╧║ё╓Ё╓Л╓о╓╧╓ы╓ф║╒Marc Fournie╓╣╓С╓н╓╙╓╚╓╡╓г║╒хЮ╓о╓Ё╓н╢Пхв
-╓Р╡©г╞╓к╓Б╓О╓©╓ц╓фаоб╓╓╥╢имЩ╓╥╓ф╓╜╓ч╓╥╓©║ё</P>
-
- <P>╪а╓нни╓╓╢Пхв╓о╔╙║╪╔в╔С╔╫║╪╔╧║╕╔в╔М╔╦╔╖╔╞╔х╓к╓х╓ц╓ф╓о╓х╓ф╓БбГюз╓й
-╓Б╓н╓г║╒а╟©й╓╧╓Кю╙╓╓╓Р╪╨╓╕╔в╔М╔╦╔╖╔╞╔х╓нй╛нЖ╓Р╡СхР╓╥╓ч╓╧║ё
-</P>
-
- <P>╓Б╓а╓М╓С║╒╓Ё╓н╢Пхв╓о╟б╓╓╓Б╓н╓г╓о╓╒╓Й╓ч╓╩╓С║ё╟щ╩Щ╓╥бЁ╓╠╓К╓©╓А╓к╓о
-кХ╥Н╓╒╓К╓╓╓о╟Л╩Ч╓н╥пхЯ╓╛╓╚╓╚╓Й╓ч╓╧║ё╓Б╓╥║╒╓╒╓й╓©╓Д╓╒╓й╓©╓н╡Я╪р╓к║╒╓Ё╓╕╓╥
-╓©еьно╓н╓©╓А╓н╩Я╤Б╓Р╫У╓╠╓К╓©╓А╓к╩э╓╧╓Ё╓х╓╛╓г╓╜╓К╓Х╓╕╓г╓╥╓©╓И║╒<A
-href=
-"http://www.pgsql.com/pg_goodies">http://www.pgsql.com/pg_goodies</A>
-╓╚╓И╢Сиу╓Р╓╙╢Й╓╓╓╥╓ч╓╧║ё
-
- <P>╓ч╓©║╒Web╔з║╪╔╦╓к╓о PostgreSQL,Inc ╓х╓╒╓Й╓ч╓╧╓╛║╒╓╫╓Ё╓н"╣а╠Г
-(contributions)"╔╒╔╓╔ф╔Ю╓о PostgreSQL ╔в╔М╔╦╔╖╔╞╔х╓Р╔╣╔щ║╪╔х╓╧╓К╓©╓А╓ю╓╠
-╓н╓©╓А╓г║╒╥Х╓╥╓ффцдЙ╓н╡Я╪р╓н╓©╓А╓н╩Я╤Б╓н╓©╓А╓г╓о╓╒╓Й╓ч╓╩╓С║ё╓Б╓╥║╒╪Й╥а
-(check)╓нйЩ╓╛ет╧Г╓╛╓Х╓╠╓Л╓по╒мМюХ╓н╫╩╫Й╓ь╓╙аВ╓Й╡╪╓╣╓╓║ё</P>
-
-
-<HR>
-
-<H2><CENTER>╔Ф║╪╔╤║╪║╕╔╞╔И╔╓╔╒╔С╔х╓н╪алД</CENTER></H2>
-<P>
-
-<H4><A NAME="2.1">2.1</A>) PostgreSQL ╓н╓©╓А╓н <small>ODBC</small> ╔и╔И╔╓╔п║╪╓о╓╒╓Й╓ч╓╧╓╚║╘
-</H4>
-
-<P> PsqlODBC ╓х OpenLink <small>ODBC</small> ╓нфС╓д╓н <small>ODBC</small> ╔и╔И╔╓╔п║╪╓╛мЬмя╡дг╫╓г╓╧║ё
-
-<P> PsqlODBC ╓о PostgreSQL ╓нгшиш╓к╢ч╓ч╓Л╓ф╓╓╓ч╓╧║ё╓╫╓Л╓к╓д╓╓╓ф╓н╓╣╓И╓к╬э╨ы╓й╬ПйС╓о
-<A HREF="ftp://ftp.PostgreSQL.org/pub/odbc/">ftp://ftp.PostgreSQL.org/pub/odbc/</A>
-╓╚╓И╪Хфю╓г╓╜╓ч╓╧║ё<P>
-
-<small><PRE>
- [лУцМ:
- PsqlODBC ╓н фЭкэ╦Л╔я╔ц╔а╓Рйр╡╛м╣ю╦╓╣╓С(kataoka@interwiz.koganei.tokyo.jp)╓╛╨Н╓И╓Л╓ч╓╥╓©:
- ║Э<A HREF="http://www.interwiz.koganei.tokyo.jp/software/PsqlODBC/index.html">http://www.interwiz.koganei.tokyo.jp/software/PsqlODBC/index.html</A>
- ]
-</PRE></small>
-
-<P> OpenLink <small>ODBC</small> ╓о <A HREF="http://www.openlinksw.com/">http://www.openlinksw.com/</A>╓╚╓ИфЧ╪Й╓г╓╜╓ч╓╧║ёи╦╫Юе╙╓й <small>ODBC</small> ╔╞╔И╔╓╔╒╔С╔х║╕╔╫╔у╔х╔╕╔╖╔╒╓г╩х╓╗╓ч╓╧╓н╓г║╒╩ы╠Г╓╥╓ф╓╓╓К╓╧╓ы╓ф╓н╔в╔И╔ц╔х╔ш║╪╔Ю(Win, Mac, Unix, <STRONG>VMS</STRONG>)╓╚╓И PostgreSQL ╓н <small>ODBC</small> ╓╛мЬмя╓г╓╜╓ч╓╧║ё
-
-<P> ╓©╓ж╓СхЮ╓И╓о║╒╬╕мяий╪а╓н╔╣╔щ║╪╔х╓ни╛мв╓й©м║╧╓кгД╓ц╓ф╓╓╓К╓х╩в╓╓╓ч╓╧╓╛║╒
- ╔у╔Й║╪╔╕╔╖╔╒хг╓о╓╓╓д╓г╓БфЧ╪Й╡дг╫╓н╓Х╓╕╓г╓╧║ё╪алД╓о║╒<A href=
- "mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>
- ╓ьаВ╓ц╓ф╡╪╓╣╓╓║ё</P>
-
-<A HREF="http://www.postgresql.org/docs/programmer/odbc.html">
-Programmer's Guide</A>
-╓н <small>ODBC</small> ╓н╬о╓Б╓╢мВ╓╞╓ю╓╣╓╓║ё
-
-
-<P>
-<H4><A NAME="2.2">2.2</A>) PostgreSQL ╓Р Web ╔з║╪╔╦╓хо╒╥х╓╣╓╩╓К╓к╓о╓и╓С╓й╔д║╪╔К╓╛╓╒╓Й╓ч╓╧╓╚║╘
-</H4>
-
-<P> ╔г║╪╔©╔ы║╪╔╧╓Рн╒╓к╩Щ╓д Web ╔з║╪╔╦╓к╓д╓╓╓ф╓нагю╡╓И╓╥╓╓╬р╡П╓╛║╒<BR>
- <A href="http://www.webreview.com">http://www.webreview.com</A>╓к╓╒╓Й╓ч╓╧║ё</P>
-<P><A HREF="http://www.phone.net/home/mwm/hotlist/">http://www.phone.net/home/mwm/hotlist/</A>╓к╓Б║╒╓Б╓╕╟Л╓д╓╒╓Й╓ч╓╧║ё
-<P> Web ╓ь╓нЁхд╔╓н╓©╓А╓к╓о║╒PHP ╓╛бН╠ш╓╥╓©╔╓╔С╔©║╪╔у╔╖║╪╔╧╓х╓й╓ц╓ф╓╓╓ч╓╧║ё<A HREF="http://www.php.net">http://www.php.net/</A>╓к╓╒╓Й╓ч╓╧║ё
-
-<small><PRE>
- [лУцМ:
- PHP╓к╢ь╓╧╓КфЭкэ╦Л╓н╬ПйС╓о║╒2000г╞4╥Н19фЭ╓кх╞б╜╓╥╓©фЭкэPHP╔Ф║╪╔╤╡Я╓н╔╣╔╓╔х
- <A HREF="http://www.php.gr.jp/">http://www.php.gr.jp/</A>
- ╓╒╓К╓╓╓о║╒в╒юН нЮ╓╣╓С╓н╔╣╔╓╔х
- <A HREF="http://www.geocities.jp/rui_hirokawa/php/">http://www.geocities.jp/rui_hirokawa/php/</A>
- ╓к╓╚╓й╓Й╓ч╓х╓А╓И╓Л╓ф╓╓╓ч╓╧║ё
- а╟ед ╫╪╧╗╓╣╓С╓к╓Х╓Й╨Н╓И╓Л╓©<A HREF="http://pg.cni.co.jp/">PHP/FI╓нфЭкэ╦Л╔я╔ц╔а</A>╓╛мм║╧╓й©м╓н╪Й╓Р╥п╓фPHP3.0.7╓ке╛мя╓╣╓Л╓ч╓╥╓©║ё
- ╦╫╨ъ╓оPHPJ-DEV╓к╓ф║╒
- <A HREF="http://php.jpnnet.com/">http://php.jpnnet.com/</A>
- ╨╢фё╓╣╓С╓РцФ©╢╓к╔ч╔К╔а╔п╔╓╔хЁхд╔╓х╓╥╓ф╨Н╓Йд╬╓╣╓Л║╒╨г©╥хг╓оPHP-3.0.18╓кбп╠Ч╓╥╓ф╓╓╓ч╓╧║ё
- дмед бНлИ╓╣╓С╓о║╒PHP4 мя╓нфЭкэ╦Л╢ь╥╦╓нЁхд╔╔Б╔╦╔Е║╪╔К
- <A HREF="ftp://night.fminn.nagano.nagano.jp/php4/">ftp://night.fminn.nagano.nagano.jp/php4/</A>
- ╓Рмя╟у╓╥╓ф╡╪╓╣╓ц╓ф╓ч╓╧║ё
- кэ╡х╓нйЩ╓г╧Я╨щ╡╫╓нML╓Бн╘╓а╬Е╓╛╓ц╓ф╓╓╓ч╓╧║ё
- ]
-</PRE></small>
-
-<P> ╫ХмЩ╓╛йё╩╗╓й╬Л╧Г║╒б©╓╞╓н©м╓о Perl ╔╓╔С╔©║╪╔у╔╖║╪╔╧╓х CGI.pm ╓Р╩х╓╓╓ч╓╧║ё
-
-<small><PRE>
- [лУцМ:
- WDB ╓о║╒Web ╓╚╓И DataBase ╓ь╓н Perl ╓н Interface ╓г╓╧║ё
- wdb-p95 ╓ь╓н╔Й╔С╔╞╓оюз╓Л╓ф╓╥╓ч╓ц╓ф╓╓╓ч╓╧║ё╓╙╓╫╓И╓╞║╒Perl DBI ╥пмЁ╓г DBD::Pg ╓нмЬмя╓╛╡дг╫╓х╩в╓О╓Л╓ч╓╧║ё
- ╦╫╨ъ║╒WDBI ╓х╓╓╓╕л╬а╟╓к╓й╓ц╓ф╓╓╓К╓Б╓н
- <A HREF="http://www.egroups.com/list/wdb-users/">http://www.egroups.com/list/wdb-users/</A>
- ╓х║╒WDB╓нл╬а╟╓н╓ч╓ч╓н╓Б╓н
- <A HREF="http://www.i-con.dk/wdb/">http://www.i-con.dk/wdb/</A>
- ╓х╓╛╓╒╓Й╓ч╓╧║ё╓╫╓н╥п╟ч╓о╓Х╓╞╓О╓╚╓Й╓ч╓╩╓С║ё
- ]
-</PRE></small>
-
-<P>
-<H4><A NAME="2.3">2.3</A>) PostgreSQL ╓к╔╟╔И╔у╔ё╔╚╔К║╕╔Ф║╪╔╤╔╓╔С╔©║╪╔у╔╖║╪╔╧╓о╓╒╓Й╓ч╓╧╓╚║╘
-╔Л╔щ║╪╔х╔╦╔╖╔м╔Л║╪╔©╓ДкД╓А╧Ч╓ълД╓╓╧Г╓О╓╩╦ю╦Л╔╓╔С╔©║╪╔у╔╖║╪╔╧╓о╓╒╓Й╓ч╓╧╓╚║╘
-</H4>
-
-<P> <I>pgaccess</I> ╓х╦ф╓п╓Л╓Кагю╡╓И╓╥╓╓╔╟╔И╔у╔ё╔╚╔К║╕╔Ф║╪╔╤║╕╔╓╔С╔©║╪╔у╔╖║╪╔╧╓╛╓╒╓Й║╒╓Ё╓нгшиш╓х╤╕╓к╫п╡ы╓╣╓Л╓ч╓╧║ё<I>Pgaccess</I> ╓к╓о╔Л╔щ║╪╔х║╕╔╦╔╖╔м╔Л║╪╔©╓Б╓╒╓Й╓ч╓╧║ёWeb ╔з║╪╔╦╓о<A HREF="http://www.flex.ro/pgaccess">http://www.flex.ro/pgaccess</A>╓г╓╧║ё
-
-<P> <I>ecpg</I> ╓х╓╓╓╕ C ╦ю╦Л╓н╓©╓А╓нкД╓А╧Ч╓ъ <small>SQL</small> лД╓╓╧Г╓О╓╩╦ю╦Л╔╓╔С╔©║╪╔у╔╖║╪╔╧╓Б╓╒╓Й╓ч╓╧║ё
-
-<P>
-<H4><A NAME="2.4">2.4</A>) PostgreSQL ╓хдл©╝╓╧╓К╓к╓о╓и╓С╓й╦ю╦Л╓╛╩х╓╗╓ч╓╧╓╚║╘
-</H4>
-
-<P>╟й╡╪╓н╓Б╓н╓╛╓╒╓Й╓ч╓╧:
-
-<UL>
-<LI>C (libpq)
-<LI>C++ (libpq++)
-<LI>кД╓А╧Ч╓ъC (ecpg)
-<LI>Java (jdbc)
-<LI>Perl (perl5)
-<LI>ODBC (odbc)
-<LI>Python (<A HREF="http://www.druid.net/pygresql/">PyGreSQL</A>)
-<LI>TCL (libpgtcl)
-<LI>C Easy API (libpgeasy)
-<LI>кД╓А╧Ч╓ъ<small>HTML</small> (<A HREF="http://www.php.net">PHP from http://www.php.net</A>)
-</UL>
-<P>
-
-<small><PRE>
- [лУцМ║╖
- <A HREF="http://www.netlab.co.jp/ruby/jp/">ruby</A>╓н╨Н╪т╓г╓╒╓К╓ч╓д╓Б╓х ╓Ф╓╜╓р╓М(matz@ZetaBITS.COM)╓╣╓С╓х║╒╓ч╓д╓Б╓х ╓╗╓╓╓╦(ematsu@pfu.co.jp)╓╣╓С╓╛
- ruby ╓н PostgreSQL ╔╓╔С╔©║╪╔у╔╖║╪╔╧╓Р╨Н╓Й╓ч╓╥╓©║ё╦╫╨ъ╓н╟щ╩Щ╢имЩ╓оюффё еп╓╣╓С╓╛╓╥╓ф╓╓╓ч╓╧║ё
- <A HREF="http://webclub.kcom.ne.jp/mb/noborus/ruby/">http://webclub.kcom.ne.jp/mb/noborus/ruby/</A>
- PgBash ╓о ╤╜ед ╡Млю ╓╣╓С╓╛╨Н╓ц╓© bash ╓н PostgreSQL ╔╓╔С╔©║╪╔у╔╖║╪╔╧╓г╓╧║ё
- <A HREF="http://www.psn.co.jp/PostgreSQL/pgbash/">http://www.psn.co.jp/PostgreSQL/pgbash/</A>
- Bash╔Ё╔ч╔С╔и╔И╔╓╔С╓гpostgres ╓клД╓╓╧Г╓О╓╩╓г╓╜╓ч╓╧║ё
- Perl ╓н╔Б╔╦╔Е║╪╔К╓о╦е╓╞╓╚╓И╓╒╓К Pg ╓х DBI ╔и╔И╔╓╔п╓н DBD::Pg ╓х╓╛╓╒╓Й║╒
- ╓╓╓╨╓Л╓Б Edmund Mergl ╩А╓к╓Х╓К╓Б╓н╓г <A HREF="http://www.cpan.org/">CPAN ╔╣╔╓╔х</A>╓к╓╒╓Й╓ч╓╧║ё
- ]
-</PRE></small>
-
-<P>
-<P>
-<HR>
-<H2><CENTER>╢имЩ╬Е╓н╪алД</CENTER></H2>
-<P>
-
-<H4><A NAME="3.1">3.1</A>) ╓и╓н╓Х╓╕╓к╓╧╓Л╓п <I>/usr/local/pgsql</I> ╟йЁ╟╓н╬Л╫Й╓к╔╓╔С╔╧╔х║╪╔К╓г╓╜╓ч╓╧╓╚║╘</H4>
-
-<P> ╢йц╠╓ййЩк║╓о║╒ <I>configure</I> ╓РаЖ╓И╓╩╓К╓х╓╜╓к --prefix ╔╙╔в╔╥╔Г╔С╓Р╩ьдЙ╓╧╓К╓Ё╓х╓г╓╧║ё
-
-<P>
-<H4><A NAME="3.2">3.2</A>) postmaster ╓РаЖ╓И╓╩╓К╓х║╒<I>Bad System Call</I> ╓х╓╚╔Ё╔╒║╕╔ю╔С╔в╓╥╓©╓х╓н╔А╔ц╔╩║╪╔╦╓╛╫п╓ч╓╧║ё╓й╓╪╓г╓╧╓╚║╘
-</H4>
-
-<P> ╓╣╓ч╓╤╓ч╓йлДбЙ╓╛╧м╓╗╓И╓Л╓ч╓╧╓╛║╒╓ч╓╨╨г╫И╓к╓╒╓й╓©╓н╔╚║╪╔м╔К╓к System V IPC ╓нЁхд╔╓╛╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓ф╓╓╓К╓╚╓РЁнг╖╓╥╓ф╦╚╓ф╓╞╓ю╓╣╓╓║ёPostgreSQL ╓о╔╚║╪╔м╔К╓к╓Х╓К╤╕м╜╔А╔Б╔Й║╪╓х╔╩╔ч╔у╔╘╓н╔╣╔щ║╪╔х╓Ри╛мв╓х╓╥╓ч╓╧║ё
-
-<P>
-<H4><A NAME="3.3">3.3</A>) <I>postmaster</I> ╓РаЖ╓И╓╩╓Х╓╕╓х╓╧╓К╓х║╒<I>IpcMemoryCreate</I> ╔╗╔И║╪╓╛╫п╓ч╓╧║ё╓й╓╪╓г╓╧╓╚║╘
-</H4>
-
-<P> ╔╚║╪╔м╔К╓╛╤╕м╜╔А╔Б╔Й║╪╓Р╩Щ╓дюъдЙ╓к╓й╓ц╓ф╓╓╓й╓╚╓ц╓©╓╚║╒╓г╓й╓╠╓Л╓п║╒╔╚║╪╔м╔К╓кбп╓╥╓ф╩х╓╗╓К╤╕м╜╔А╔Б╔Й║╪╓нбГ╓╜╓╣╓РбГ╓╜╓╞юъдЙ╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧║ё╤Ябне╙╓йбГ╓╜╓╣╓о║╒╩х╓ц╓ф╓╓╓К╔╒║╪╔╜╔ф╔╞╔а╔Ц╓х<I>postmaster</I> ╓РаЖ╓И╓╩╓К╓х╓╜╓кюъдЙ╓╧╓К╔п╔ц╔у╔║╓н©Т╓х╔п╔ц╔╞╔╗╔С╔и╔в╔М╔╩╔╧╓к╟мб╦╓╥╓ч╓╧║ё╓ш╓х╓С╓и╓н╔╥╔╧╔ф╔Ю╓г╓о║╒╢ШдЙцм╓н╔п╔ц╔у╔║╔╣╔╓╔╨╓н╓ч╓ч╓г║╒╬╞╓й╓╞╓х╓БлС1MB╓╛и╛мв╓г╓╧║ё
-PostgreSQL Administrator's Gide ╓к╤╕м╜╔А╔Б╔Й║╪╓х╔╩╔ч╔у╔╘╓к╓д╓╓╓ф╓н╬ПйС╓н╬э╨ы╓╛╓╒╓Й╓ч╓╧║ё</P>
-
-<P>
-<H4><A NAME="3.4">3.4</A>) <I>postmaster╓Р</I>аЖ╓И╓╩╓Х╓╕╓х╓╧╓К╓х║╒<I>IpcSemaphoreCreate</I> ╔╗╔И║╪╓╛╫п╓ч╓╧║ё╓й╓╪╓г╓╧╓╚║╘
-</H4>
-
-<P>╓Б╓╥╔╗╔И║╪╔А╔ц╔╩║╪╔╦╓╛<I>IpcSemaphoreCreate: semget failed (No space left on device)</I>╓г╓╒╓Л╓п║╒╔╚║╪╔м╔К╓╛╫╫й╛╓й╔╩╔ч╔у╔╘╓Р╩х╓╗╓К╓Х╓╕╓к╧╫ю╝╓╣╓Л╓ф╓╓╓ч╓╩╓С║ёPostgres╓оюЬ╨ъе╙╓й╔п╔ц╔╞╔╗╔С╔и╔в╔М╔╩╔╧кХ╓к╟Л╓д╓н╔╩╔ч╔у╔╘╓Ри╛мв╓х╓╥╓ч╓╧║ё╓х╓Й╓╒╓╗╓╨╓н╡Р╥Х╨Ж╓о<I>postmaster</I>╓Р╣╞ф╟╓╧╓К╓х╓╜╓к║╒╔п╔ц╔╞╔╗╔С╔и╔в╔М╔╩╔╧╓н©Т╓Р╓Х╓Й╬╞╓й╓╞ю╘╦б╓Р╓╧╓К╓Ё╓х╓г╓╧║ё╢ШдЙцм╓н32╓Х╓Й╬╝╓╣╓й©Т╓н╔я╔И╔А║╪╔©╓Р<I>-N</I>╓г╩х╓╓╓ч╓╧║ё╓Х╓Й╧╠╣ве╙╓й╡Р╥Х╨Ж╓о║╒╔╚║╪╔м╔К╓н<small>SEMMNS</small> ╓х <small>SEMMNI</small> ╔я╔И╔А║╪╔©╓РаЩ╓Д╓╧╓Ё╓х╓г╓╧║ё
-
- <P>аЮ╨Нитг╫╓н╔╩╔ч╔у╔╘╓Б╡Аеы╓й╔г║╪╔©╔ы║╪╔╧╔╒╔╞╔╩╔╧╓н╢ж╓к╔╞╔И╔ц╔╥╔Е╓Р
-╣╞╓Ё╓╧╡дг╫ю╜╓╛╓╒╓Й╓ч╓╧║ё
-</P>
-
-<P>╓Б╓╥║╒╔╗╔И║╪╔А╔ц╔╩║╪╔╦╓╛╓й╓к╓╚б╬╓н╓Б╓н╓г╓╒╓Л╓п║╒╔╚║╪╔м╔К╓н╧╫ю╝╓г╓ч╓ц╓©╓╞╔╩╔ч╔у╔╘╓н╔╣╔щ║╪╔х╓Р╓╥╓ф╓╓╓й╓╓╓╚╓Б╓╥╓Л╓ч╓╩╓С║ё
-PostgreSQL Administrator's Gide ╓к╤╕м╜╔А╔Б╔Й║╪╓х╔╩╔ч╔у╔╘╓к╓д╓╓╓ф╓н╬ПйС╓н╬э╨ы╓╛╓╒╓Й╓ч╓╧║ё</P>
-
-<P>
-
-<H4><A NAME="3.5">3.5</A>) б╬╓н╔ш╔╧╔х╓╚╓И╓нюэбЁ╓о╓и╓н╓Х╓╕╓кю╘╦Ф╓╥╓ч╓╧╓╚║╘
-</H4>
-
-<P> ╢ШдЙцм╓г╓о║╒PostgreSQL ╓о unix ╔и╔А╔╓╔С╔╫╔╠╔ц╔х╓Р╩х╓╕╔М║╪╔╚╔К╔ч╔╥╔С╓╚╓И╓нюэбЁ╓╥╓╚╣Ж╓╥╓ч╓╩╓С║ё<I>postmaster</I> ╣╞ф╟╓к <I>-i</I> ╔у╔И╔ц╔╟╓Р╡ц╓╗║╒<I>$PGDATA/pg_hba.conf</I> ╔у╔║╔╓╔К╓Ре╛юз╓кд╬╓╥╓ф║╒╔ш╔╧╔х╪ГфЁ╥©╓нг╖╬з╓Р╩х╓О╓й╓╓╓╚╓╝╓Й╓об╬╓н╔ч╔╥╔С╓╚╓И╓оюэбЁ╓г╓╜╓й╓╓╓г╓╥╓Г╓╕║ё╓Ё╓Л╓к╓Х╓ЙTCP/IP╓нюэбЁ╓╛╡дг╫╓к╓й╓Й╓ч╓╧║ё
-<p>аЮ╨Нитг╫╓й╔╩╔ч╔у╔╘╓Б╡Аеы╓н╔г║╪╔©╔ы║╪╔╧╔╒╔╞╔╩╔╧цФ╓к╔╞╔И╔ц╔╥╔Е╓Р╟З╓╜╣╞╓Ё╓╧╓Ё╓х╓╛╓╒╓Й╓ч╓╧║ё
-
-<P>
-<H4><A NAME="3.6">3.6</A>) ╓Х╓Йни╓╓ю╜г╫╓Рфю╓К╓©╓А╓к╓о║╒╔г║╪╔©╔ы║╪╔╧║╕╔╗╔С╔╦╔С╓Р╓и╓н╓Х╓╕╓кд╢ю╟╓╧╓Л╓пни╓╓╓г╓╧╓╚║╘
-</H4>
-
-<P> Ён╓╚╓к╔╓╔С╔г╔ц╔╞╔╧╓олД╓╓╧Г╓О╓╩╓нб╝еы╓РаЩ╓╥╓ч╓╧║ё<small>EXPLAIN</small>╔Ё╔ч╔С╔и╓г PostgreSQL ╓╛╓и╓н╓Х╓╕╓к╓╒╓й╓©╓нлД╓╓╧Г╓О╓╩╓РкщлУ╓╥╓ф╓╓╓К╓╚╓Р╦╚╓К╓Ё╓х╓╛╓г╓╜║╒╓╫╓╥╓ф║╒╓и╓н╔╓╔С╔г╔ц╔╞╔╧╓╛╩х╓О╓Л╓ф╓╓╓К╓╚╓Р╦╚╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧║ё
-<P>╓Б╓╥ <small>INSERT</small> ╓Рб©мя╓╥╓ф╓╓╓К╬Л╧Г╓о║╒<small>COPY</small> ╔Ё╔ч╔С╔и╓Р╩х╓ц╓фбГ╓╜╓й╔п╔ц╔а╫ХмЩ╓г╓╫╓Л╓Р╧т╓й╓╕╓Ё╓х╓Р╦║ф╓╓╥╓ф╡╪╓╣╓╓║ё╓Ё╓Л╓о║╒<small>INSERT</small> ╓Рйл║╧╓к╧т╓й╓╕╓Х╓Й╓Б╓ц╓х╧Бб╝╓г╓╧║ё╪║╓к║╒<small>BEGIN WORK/COMMIT</small> ╓н╔х╔И╔С╔╤╔╞╔╥╔Г╔С║╕╔ж╔М╔ц╔╞╓нцФ╓кл╣╓╓й╦╓о║╒╓╫╓Л╓И╪╚©х╓╛╓╫╓Л╓╬╓Л╓н╔х╔И╔С╔╤╔╞╔╥╔Г╔С╓кфЧ╓ц╓ф╓╓╓К╓х╦╚╓й╓╣╓Л╓ч╓╧║ё╓╓╓╞╓д╓╚╓нй╦╓Р╟Л╓д╓н╔х╔И╔С╔╤╔╞╔╥╔Г╔С║╕╔ж╔М╔ц╔╞╓нцФ╓г╧т╓й╓╕╓Ё╓х╓Р╧м╓╗╓ф╡╪╓╣╓╓║ё╓Ё╓Л╓к╓Х╓Й╔х╔И╔С╔╤╔╞╔╥╔Г╔С╓н╔╙║╪╔п║╪╔ь╔ц╔и╓╛╦╨╓Й╓ч╓╧║ё╓ч╓©║╒бГ╓╜╓й╔г║╪╔©╓нйя╧╧╓Р╧т╓й╓╕╨щ╓о╔╓╔С╔г╔ц╔╞╔╧╓Р╟ЛеыЁ╟╓╥╓ф║╒╨Н╓Йд╬╓╧╓Ё╓х╓Р╧м╓╗╓ф╓ъ╓ф╡╪╓╣╓╓║ё
-
-<P> ╔а╔Е║╪╔к╔С╔╟╓н╔╙╔в╔╥╔Г╔С╓╛╓╓╓╞╓д╓╚╓╒╓Й╓ч╓╧║ё<I>postmaster</I> ╓Р <I>-o -F</I> ╔╙╔в╔╥╔Г╔С╓г╣╞ф╟╓╧╓К╓Ё╓х╓к╓Х╓ц╓ф║╒<I>fsync()</I> ╓Рл╣╦З╓к╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧║ё╓Ё╓Л╓к╓Х╓ц╓ф║╒Ёф╔х╔И╔С╔╤╔╞╔╥╔Г╔СкХ╓к <I>fsync()</I> ╓г╔г╔ё╔╧╔╞╓Р╧╧©╥╓╧╓К╓н╓Р╩ъ╓А╓╣╓╩╓ч╓╧║ё
-
-<P> <I>postmaster</I> <I>-B</I> ╔╙╔в╔╥╔Г╔С╓Р╩х╓ц╓ф╔п╔ц╔╞╔╗╔С╔и║╕╔в╔М╔╩╔╧╓к╓Х╓Й╩х╓О╓Л╓К╤╕м╜╔А╔Б╔Й║╪║╕╔п╔ц╔у╔║╓РбГ╓╜╓╞╓╧╓К╓Ё╓х╓Б╓г╓╜╓ч╓╧║ё╓Б╓╥║╒╓Ё╓н╔я╔И╔А║╪╔©╓Р╧Б╓╞╓╥╓╧╓╝╓К╓х║╒╔╚║╪╔м╔К╓н╤╕м╜╔А╔Б╔Й║╪╤У╢ж╓ню╘╦бцм╓Р╠ш╓╗╓ф╓╥╓ч╓ц╓╕╓©╓А╓к <I>postmaster</I> ╓╛аЖ╓И╓й╓╞╓й╓К╓г╓╥╓Г╓╕║ё╢ШдЙцм╓г╓о║╒╓╫╓Л╓╬╓Л╓н╔п╔ц╔у╔║╓нбГ╓╜╓╣╓о 8K ╓г║╒╔п╔ц╔у╔║©Т╓о 64 ╓г╓╧║ё
-
-<P> ╔п╔ц╔╞╔╗╔С╔и╓Р <I>-S</I> ╔╙╔в╔╥╔Г╔С╓Р╩х╓ц╓ф║╒╓╫╓Л╓╬╓Л╓н╔п╔ц╔╞╔╗╔С╔и║╕╔в╔М╔╩╔╧╓╛╟Л╩Че╙╓ййб╓ыбь╓╗╓к╓Х╓ц╓ф╩х╓╕╔А╔Б╔Й║╪╓н╨гбГ╔╣╔╓╔╨╓РаЩ╓Д╓╧╓Ё╓х╓Б╓г╓╜╓ч╓╧║ё ╓╫╓н <I>-S</I> ╓нцм╓о╔╜╔М╔п╔╓╔хц╠╟л╓г║╒╢ШдЙцм╓о 512 (╓╧╓й╓О╓а║╒512K)╓г╓╧║ё
-
-<P> ╓ч╓©║╒<small>CLUSTER</small> ╔Ё╔ч╔С╔и╓Р╩х╓ц╓ф║╒╔ф║╪╔ж╔К╓н╔г║╪╔©╓Р╔╓╔С╔г╔ц╔╞╔╧╓к╧Г╓О╓╩╓К╓©╓А╓к╔╟╔К║╪╔в╡╫╓╧╓К╓Ё╓х╓Б╓г╓╜╓ч╓╧║ё╬э╓╥╓╞╓о║╒╔╙╔С╔И╔╓╔С╔ч╔к╔Е╔╒╔К╓г <I>CLUSTER</I> ╓Р╦╚╓ф╡╪╓╣╓╓║ё
-
-<P>
-<H4><A NAME="3.7">3.7</A>) ╓и╓н╓Х╓╕╓й╔г╔п╔╟╣║г╫╓╛╩х╓╗╓ч╓╧╓╚║╘</H4>
-
-<P> PostgreSQL ╓о║╒╔г╔п╔╟╓н╓©╓А╓к╟улё╓н╓╒╓К║╒╬Убж╬ПйС╓РйС╧П╓╧╓К╓╓╓╞╓д╓╚╓н╣║г╫╓Р╩Щ╓а╓ч╓╧║ё
-
-<P> ╓ч╓╨║╒--enable-cassert ╔╙╔в╔╥╔Г╔С╓г <I>configure</I> ╓РаЖ╓И╓╩╓ч╓╧║ё╓╫╓╕╓╥╓ф╔Ё╔С╔я╔╓╔К╓╧╓К╓Ё╓х╓к╓Х╓Й║╒бТ╩Ё╓н <I>assert()</I> ╓╛║╒╔п╔ц╔╞╔╗╔С╔и╓н©йд╫╬У╤╥╓Р╢ф╩К╓╥║╒╡©╓╚м╫╢Э╓╩╓л╓Ё╓х╓╛╣╞╓╜╓К╓х╔в╔М╔╟╔И╔Ю╓РдД╩ъ╓╧╓К╓Х╓╕╓к╓й╓Й╓ч╓╧║ё
-
-<P> <I>postmaster</I> ╓х <I>postgres</I> ╓нн╬йЩ╓г╓╓╓╞╓д╓╚╓н╔г╔п╔╟║╕╔╙╔в╔╥╔Г╔С╓нмЬмя╓╛╓г╓╜╓ч╓╧║ё╓ч╓╨║╒╪║╓н╓Х╓╕╓к <I>postmaster</I> ╓Р╣╞ф╟╓╧╓К╓х╓╜╓о╓╓╓д╓г╓Б║╒и╦╫Ю╫пно╓х╔╗╔И║╪╫пно╓Р╔М╔╟║╕╔у╔║╔╓╔К╓каВ╓К╓Х╓╕╓к╓╥╓ф╓╒╓К╓Ё╓х╓РЁн╓╚╓А╓ф╡╪╓╣╓╓║ё
-
-<PRE>
- cd /usr/local/pgsql
- ./bin/postmaster &gt;server.log 2&gt;&1 &
-</PRE>
-
-<P> ╓Ё╓Л╓к╓Х╓Й PostgreSQL ╓н╨г╬ЕиТ╓н╔г╔ё╔Л╔╞╔х╔Й╓к server.log ╔у╔║╔╓╔К╓╛цж╓╚╓Л╓ч╓╧║ё╓Ё╓н╔у╔║╔╓╔К╓о╔╣║╪╔п║╪╓╛аЬ╤Ь╓╥╓©лДбЙ╓Д╔╗╔И║╪╓к╓д╓╓╓фм╜мя╓й╬ПйС╓Р╢ч╓ъ╓ч╓╧║ё<I>Postmaster</I> ╓о╧╧╓к╬э╨ы╓й╬ПйС╓РйС╧П╓╧╓К╓©╓А╓н <I>-d</I> ╔╙╔в╔╥╔Г╔С╓Р╩Щ╓а╓ч╓╧║ё╓╫╓н <I>-d</I> ╔╙╔в╔╥╔Г╔С╓о║╒╔г╔п╔╟║╕╔Л╔ы╔К╓Р╩ьдЙ╓╥╓ч╓╧║ё╧Б╓╓╔г╔п╔╟║╕╔Л╔ы╔К╓г╓о║╒бГ╓╜╓й╔М╔╟╔у╔║╔╓╔К╓Рю╦ю╝╓╧╓К╓Ё╓х╓кцМ╟у╓╥╓й╓╞╓ф╓о╓й╓Й╓ч╓╩╓С║ё
-
-<P>╓Б╓╥║╒<i>postmaster</i>╓╛аЖ╓ц╓ф╓╓╓й╓╠╓Л╓п║╒<I>postgres</I>╔п╔ц╔╞╔╗╔С╔и╓Р╔Ё╔ч╔С╔и╧т╓╚╓ИаЖ╓И╓╩╓К╓Ё╓х╓╛╓г╓╜║╒д╬юэ<small>SQL</small>й╦╓Р╔©╔╓╔в╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧║ё╓Ё╓н╓Д╓Й╓╚╓©╓о║╒╔г╔п╔╟лэе╙╓н╓х╓╜<B>╓ю╓╠</B>╓╙╬╘╓А╓╥╓ч╓╧║ё╔╩╔ъ╔Ё╔М╔С╓г╓о╓й╓╞║╒╡Ч╧т╓╛лД╓╓╧Г╓О╓╩╓н╫╙╓Й╓к╓й╓К╓Ё╓х╓кцМ╟у╓╥╓ф╓╞╓ю╓╣╓╓║ё╓Б╓╥║╒╔г╔п╔╟╔╥╔С╔э╔К╓РфЧ╓Л╓ф╔Ё╔С╔я╔╓╔К╓╥╓ф╓╓╓Л╓п║╒╔г╔п╔ц╔╛╓Р╩х╓ц╓ф╡©╓╛╣╞╓╜╓ф╓╓╓К╓╚╓Р╦╚╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧║ёpostmaster ╓╚╓И╔п╔ц╔╞╔╗╔С╔и╓РЁ╚╩о╓╥╓©╓О╓╠╓г╓о╓й╓╓╓н╓г║╒фхн╘╓й╢д╤╜╓гаЖ╓ц╓ф╓╓╓К╓н╓г╓о╓й╓╞╔М╔ц╔╞║©╔п╔ц╔╞╔╗╔С╔и╓х╓нбпоц╓нлДбЙ╓╛╫ейё╓╧╓К╓Ё╓х╓о╓╒╓Й╓ч╓╩╓С║ё
-
- <P> ╓Б╓╥║╒<i>postmaster</i>╓╛аЖ╓ц╓ф╓╓╓Л╓п║╒╓╒╓К╔╕╔ё╔С╔и╔╕╓г
-<I>psql</I>╓РЁ╚╩о╓╧╓К╓х║╒<i>psql</i> ╓г╩х╓О╓Л╓К <i>postgres</i> ╔в╔М╔╩╔╧
-╓н<small>PID</small>╓╛╦╚╓д╓╚╓Й╓ч╓╧║ё╔г╔п╔ц╔╛╓Р╩х╓ц╓ф
-<i>postgres</i>╓н<small>PID</small>╓к╔╒╔©╔ц╔а(attach)╓╥╓ч╓╧║ё╔г╔п╔ц
-╔╛╓нцФ╓╚╓И╔ж╔Л║╪╔╞║╕╔щ╔╓╔С╔х╓Р╔╩╔ц╔х╓╥║╒<i>psql</i> ╓╚╓ИлД╓╓╧Г╓О╓╩╓Рх╞╧т
-╓╥╓ч╓╧║ё╔г╔п╔╟╓н╓©╓А╓к<i>postgres</i>╓Р╩оф╟╓╧╓К╬Л╧Г╓о║╒PGOPTIONS="-W n"
-╓РюъдЙ╓г╓╜║╒╓╫╓Л╓╚╓И║╒<i>psql</i> ╓РЁ╚╩о╓╥╓ч╓╧║ё╓Ё╓Л╓к╓Х╓Й║╒<i>n</i> иц
-Ё╚╩о╓Рцы╓И╓╩╓К╓о╓╨╓й╓н╓г║╒╔г╔п╔ц╔╛╓г╔в╔М╔╩╔╧╓к╔╒╔©╔ц╔а╓╥╓ф║╒╔ж╔Л║╪╔╞╔щ╔╓
-╔С╔х╓РюъдЙ╓╥║╒Ё╚╩о╓╚╓И╫Г╓Рди╓ц╓ф╦╚╓ф╓Ф╓╞╓Ё╓х╓╛╓г╓╜╓ч╓╧║ё
-
-<P> postgreSQL ╔в╔М╔╟╔И╔Ю╓к╓о║╒╔г╔п╔╟╓хю╜г╫б╛дЙ╓к╓х╓ф╓БлР╓кн╘╓д <I>-s</I>╓Д <I>-A</I>╓Д <I>-t</I> еЫ╓н╔╙╔в╔╥╔Г╔С╓╛╓╒╓Й╓ч╓╧║ё
-
-<P> ╡©╓х╓╓╓╕╢ь©Т╓╛╓и╓н╓╞╓И╓╓╪б╧т╩Ч╢ж╓Р©╘╓ц╓ф╓╓╓К╓╚╓Р╦╚╓К╓©╓А╓к║╒╔в╔М╔у╔║╔╓╔Й╔С╔╟║й╔в╔М╔у╔ё║╪╔Киу╓╜║к╓г╔Ё╔С╔я╔╓╔К╓╧╓К╓Ё╓х╓Б╡дг╫╓г╓╧║ё╓╫╓н╔п╔ц╔╞╔╗╔С╔и╓н╔в╔М╔у╔ё║╪╔К║╕╔у╔║╔╓╔К╓о <I>pgsql/data/base/dbname</I> ╔г╔ё╔Л╔╞╔х╔Й╓кЁйг╪╓╣╓Л╓К╓г╓╥╓Г╓╕║ё╔╞╔И╔╓╔╒╔С╔х╓н╔в╔М╔у╔ё║╪╔К╓о╔╞╔И╔╓╔╒╔С╔х╓н╦╫╧т╔г╔ё╔Л╔╞╔х╔Й╓кцж╓╚╓Л╓К╓г╓╥╓Г╓╕║ёLinux ╓г╓ч╓х╓Б╓й╔в╔М╔у╔║╔╓╔Й╔С╔╟╓Р╧т╓╕╓к╓о <I>-DLINUX_PROFILE</I> ╓г╔Ё╔С╔я╔╓╔К╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧║ё
-
-
-<P>
-<H4><A NAME="3.8">3.8</A>) юэбЁ╓╥╓Х╓╕╓х╓╧╓К╓х╓╜╓к <I>'Sorry, too many clients'</I> ╓╛╫п╓К╓н╓о╓й╓╪╓г╓╧╓╚║╘
-</H4>
-
-<P> <I>postmaster╓╛</I>ф╠╩Ч╩оф╟╓г╓╜╓К╔п╔ц╔╞╔╗╔С╔и╔в╔М╔╩╔╧╓кбп╓╧╓Кю╘╦б©Т╓РаЩ╓Д╓╧и╛мв╓╛╓╒╓Й╓ч╓╧║ё
-<P>╢ШдЙ╓н╨гбГ╔в╔М╔╩╔╧╓о32╔в╔М╔╩╔╧╓г╓╧║ё<I>-N</I>╓ке╛юз╓йцм╓Р╟З©Т╓к╓╥╓ф<I>postmaster</I>╓Р╨ф╣╞ф╟╓╧╓К╓╚║╒postgresql.conf ╓Р╫╓ю╣╓╧╓К╓Ё╓х╓к╓Х╓ц╓ф║╒╓╫╓нцм╓РаЩ╓Д╓╧╓Ё╓х╓╛╓г╓╜╓ч╓╧║ё
-
-║ё╢ШдЙ╓н╧╫ю╝╓г╓о<I>-N</I>╓о╨гбГ1024╓ч╓гюъдЙ╓г╓╜╓ч╓╧║ё╓Б╓╥║╒╓Б╓ц╓хи╛мв╓г╓╒╓Л╓п<I>include/config.h</I>╓нцФ╓н<small>MAXBACKENDS</small>╓РаЩ╡ц╓╣╓╩║╒╨ф╧╫цш╓╥╓ч╓╧║ё╓Б╓╥║╒к╬╓Ю╓й╓И<I>configure</I>╓н <I>--with-maxbackends</I>юзбь╓Р╩х╓ц╓ф║╒<I>-N</I>╓н╢ШдЙцм╓Р╧╫ю╝╩Ч╓кюъдЙ╓г╓╜╓ч╓╧║ё
-
-<P>╓Б╓╥║╒<I>-N</I> ╓Р 32╓Х╓Й╓БбГ╓╜╓╞╓╧╓К╓н╓г╓╒╓Л╓п║╒<I>-B</I>╓Б╢ШдЙ╓н64╓Х╓ЙбГ╓╜╓╓цм╓каЩ╡ц╓╣╓╩╓й╓╞╓ф╓о╓й╓И╓й╓╓╓╥║╒<I>-B</I> ╓о╬╞╓й╓╞╓х╓Б <I>-N</I> ╓н2гэ╓о╓й╓╞╓ф╓о╓й╓И╓╨║╒╓╙╓╫╓И╓╞╨г╧Бю╜г╫╓Рк╬╓Ю╓й╓И╓п╓╫╓Л╓Х╓ЙбГ╓╜╓╓цм╓╛и╛мв╓й╓о╓╨╓г╓╧║ё╔п╔ц╔╞╔╗╔С╔и╔в╔М╔╩╔╧╓Р╓©╓╞╓╣╓С╓к╓╧╓К╓х║╒╓╓╓М╓╓╓М╓йUnix╔╚║╪╔м╔К╧╫ю╝╔я╔И╔А║╪╔©╓БаЩ╓Д╓╧╓Ё╓х╓╛и╛мв╓к╓й╓К╓╚╓Б╓╥╓Л╓ч╓╩╓С║ё
-╤╕м╜╔А╔Б╔Й║╪║╕╔ж╔М╔ц╔╞╓н╨гбГцм(<small>SHMMAX</small>)║╒
-╔╩╔ч╔у╔╘╓н╨гбГ©Т(<small>SEMMNS</small>╓х<small>SEMMNI</small>)║╒
-╔в╔М╔╩╔╧╓н╨гбГ©Т(<small>NPROC</small>)║╒
-╔Ф║╪╔╤кХ╓н╨гбГ╔в╔М╔╩╔╧©Т(<small>MAXUPRC</small>)║╒
-Ё╚╓╞╔у╔║╔╓╔К╓н╨гбГ©Т(<small>NFILE</small>╓х<small>NINODE</small>
-╓БЁнг╖╩Ж╧Ю╓к╢ч╓ч╓Л╓ч╓╧║ё
-PostgreSQL╓к╣Ж╓╣╓Л╓К╔п╔ц╔╞╔╗╔С╔и╓н╔в╔М╔╩╔╧©Т╓╛ю╘╦б╓╣╓Л╓ф╓╓╓К╓н╓о║╒
-╔╥╔╧╔ф╔Ю╓н╔Й╔╫║╪╔╧╓Р╩х╓╓╡л╓╥╓ф╓╥╓ч╓╕╓Ё╓х╓РхР╓╠╓К╓©╓А╓г╓╧║ё
-
-<P>6.5╓Х╓Йа╟╓н╔п║╪╔╦╔Г╔С╓нPostgreSQL╓г╓о╔п╔ц╔╞╔╗╔С╔и╓н╨гбГ©Т╓о64╓г╓╥╓©╓╛║╒йя╧╧╓╧╓К╓к╓о║╒<I>include/storage/sinvaladt.h</I>╓нцФ╓нMaxBackendIdдЙ©Т╓Р╫╓ю╣╓╥╓©╦Е╓к╨ф╧╫цш╓╛и╛мв╓г╓╥╓©║ё
-
-<P>
-<H4><A NAME="3.9">3.9</A>) ╪╚й╛╓н╔г║╪╔©╔ы║╪╔╧║╕╔г╔ё╔Л╔╞╔х╔Й╓к╓╒╓К <I>pg_sorttemp.XXX</I>╔у╔║╔╓╔К╓о╡©╓г╓╧╓╚║╘
-</H4>
-
-<P> лД╓╓╧Г╓О╓╩╪б╧т╔Б╔╦╔Е║╪╔К╓к╓Х╓ц╓фю╦ю╝╓╣╓Л╓©╟Л╩Че╙╓й╔у╔║╔╓╔К╓г╓╧║ёнЦ╓╗╓п║╒╓Б╓╥ <small>ORDER BY</small> ╤Г╓РкЧ╓©╓╧╓©╓А╓к╔п╔ц╔╞╔╗╔С╔и╓н <I>-S</I> ╔я╔И╔А║╪╔©╓г╣Ж╡д╓╥╓©цм╓Х╓Й╓БбГ╓╜╓й╔╧╔з║╪╔╧╓╛╔╫║╪╔х╓н╨щ╓ки╛мв╓ю╓х╓╧╓К╓х║╒╟Н╓Л╓©╔г║╪╔©╓Рйщ╩Щ╓╧╓К╓©╓А╓к╟Л╩Че╙╓й╔у╔║╔╓╔К╓╛╓╓╓╞╓д╓╚ю╦ю╝╓╣╓Л╓ч╓╧║ё
-<P>
-╟Л╩Че╙╓й╔у╔║╔╓╔К╓о╪╚ф╟е╙╓к╬ц╓╥╣Н╓И╓Л╓К╓о╓╨╓г╓╧╓╛║╒╓Б╓╥║╒╔╫║╪╔х╓несцФ╓г╔п╔ц╔╞╔╗╔С╔и╓╛╔╞╔И╔ц╔╥╔Е╓╥╓ф╓╥╓ч╓╕╓х╓╫╓╕╓о╓й╓Й╓ч╓╩╓С║ё╓╫╓н╓х╓╜╔п╔ц╔╞╔╗╔С╔и╓╛╓р╓х╓д╓БаЖ╓ц╓ф╓й╓╠╓Л╓п║╒pg_tempNNN.NN╔у╔║╔╓╔К╓Р╬ц╓╥╓ф╓БбГ╬Фив╓г╓╧║ё
-
-
-<small><PRE>
- [лУцМ║╖
- SYSLOGD ╥пмЁ╓г╔М╔╟╓Р╫пно╓╧╓К╓к╓о║╒╓ч╓╨║╒configure ╓Р --enable-syslog
- иу╓╜╓гаЖ╓И╓╩╓©╦Е║╒╔Ё╔С╔я╔╓╔К╓х╔╓╔С╔╧╔х║╪╔К╓Р╧т╓й╓╓╓ч╓╧║ё
- ╪║╓к║╒syslog.conf ╓к local0.* ╓н ╫пноюХ╓Р╩ьдЙ╓╥(╢д╤╜йя©Т╓гйя╧╧╡дг╫)║╒
- syslogd ╓к HUP ╔╥╔╟╔й╔К╓РаВ╓ц╓ф╫И╢Э╡╫╓╥╓ф╓╙╓╜╓ч╓╧║ё╓╫╓╥╓ф║╒
- $PGDATA/pg_options ╓к syslog=2 ╓Р╡ц╓╗╓ф║╒ postmaster ╓Р -S
- ╔╙╔в╔╥╔Г╔Сиу╓╜╓к╓ф╔╣║╪╔п╔Б║╪╔и╓г╣╞ф╟╓╥╓ч╓╧║ё(╔п║╪╔╦╔Г╔С 7.1 ╓╚╓И╓о
- pg_options ╓о postgresql.conf ╓к╓й╓ц╓ф╓╓╓ч╓╧║ё)
- ]
-</PRE></small>
-
-
-<P>
-<P>
-<HR>
-<H2><CENTER>аЮ╨Н╬Е╓н╪алД</CENTER></H2>
-<P>
-
-<H4><A NAME="4.1">4.1</A>) ╔п╔╓╔й╔Й║╕╔╚║╪╔╫╔К╓хдл╬О╔╚║╪╔╫╔К╓х╓н╦╥л╘╓й╟Ц╓╓╓о╡©╓г╓╧╓╚║╘
-</H4>
-
-<P> ╬э╫р╓о║╒╔╙╔С╔И╔╓╔С╔ч╔к╔Е╔╒╔К╓г <small>DECLARE</small> ╓Р╦╚╓ф╡╪╓╣╓╓║ё
-
-<P>
-<H4><A NAME="4.2">4.2</A>) ╨г╫И╓н©Т╔М╔╕╓н╓ъ╓Р <small>SELECT</small> ╓╧╓К╓к╓о╓и╓╕╓╥╓ч╓╧╓╚║╘
-</H4>
-
-<P> ╔╙╔С╔И╔╓╔С╔ч╔к╔Е╔╒╔К╓г<small>FETCH</small>╓Р╦╚╓ф╓╞╓ю╓╣╓╓║ё╓╒╓К╓╓╓о║╒SELECT ... LIMIT....╓Р╩х╓ц╓ф╓ъ╓ф╡╪╓╣╓╓║ё
-
-<P>╓©╓х╓╗║╒мъ╓╥╓╓╓н╓о╨г╫И╓н©Т╔М╔╕╓ю╓╠╓г╓Б║╒╓╧╓ы╓ф╓нлД╓╓╧Г╓О╓╩╓Ри╬╡а╓╥╓й╓╞╓ф╓о╓й╓И╓й╓╓╓╚╓Б╓╥╓Л╓ч╓╩╓С║ё<small>ORDER BY</small> ╓Р╩Щ╓ц╓©лД╓╓╧Г╓О╓╩╓Р╧м╓╗╓ф╓ъ╓ф╡╪╓╣╓╓║ё
-╓Б╓╥║╒<small>ORDER BY</small>╓к╧Г╓ц╓©╔╓╔С╔г╔ц╔╞╔╧╓╛╓╒╓К╓х╓╧╓К╓х PostgreSQL╓омв╣А╓╣╓Л╓©╨г╫И╓н©Т╔М╔╕╓ю╓╠╓ги╬╡а╓г╓╜╓К╓╚╓Б╓╥╓Л╓ч╓╩╓С╓╛║╒╓г╓й╓Л╓п║╒PostgreSQL ╓о╟у©ч╓╥╓©╔М╔╕╓╛ю╦ю╝╓╣╓Л╓К╓ч╓г╓╧╓ы╓ф╓н╔М╔╕╓Ри╬╡а╓╥╓й╓╠╓Л╓п╓й╓И╓й╓╓╓╚╓Б╓╥╓Л╓ч╓╩╓С║ё
-
-<P>
-<H4><A NAME="4.3">4.3</A>) ╔ф║╪╔ж╔К╓Д╓╫╓нб╬╓н╬ПйС╓н╔Й╔╧╔х╓Р <I>psql</I> ╓г╦╚╓К╓к╓о╓и╓╕╓╥╓ч╓╧╓╚║╘
-</H4>
-
-<P>
- <I>psql</I>╓н╔╫║╪╔╧╔Ё║╪╔и╓х╓╥╓ф╫Я╓╚╓Л╓© <I>pgsql/src/bin/psql/describe.c</I> ╔у╔║╔╓╔К╓Рфи╓Ю╓Ё╓х╓╛╓╫╓неЗ╓╗╓г╓╧║ё
-╓╫╓Ё╓к╓о║╒psql╓н╔п╔ц╔╞╔╧╔И╔ц╔╥╔Е╔Ё╔ч╔С╔и╓к╓Х╓К╫пно╓н╓©╓А╓н<small>SQL</small>╔Ё╔ч╔С╔и╓╛╢ч╓ч╓Л╓ф╓╓╓ч╓╧║ё <I>psql</I> ╓к <I>-E</I> ╔╙╔в╔╥╔Г╔С╓Р╓д╓╠╓ф╣╞ф╟╓╧╓Л╓п║╒м©╓╗╓©╔Ё╔ч╔С╔и╓Р╪б╧т╓╧╓К╓©╓А╓нлД╓╓╧Г╓О╓╩╓╛╫пно╓╣╓Л╓ч╓╧║ё
-<P>
-
-
-<H4><A NAME="4.4">4.4</A>) ╔ф║╪╔ж╔К╓╚╓И╔╚╔И╔Ю╓н╨О╫Э╓о╓и╓н╓Х╓╕╓к╓╥╓ч╓╧╓╚║╘
-</H4>
-
-<P> <small>ALTER TABLE DROP COLUMN</small> ╓о╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╩╓С╓╛║╒╓╫╓нбЕ╓О╓Й╓к╓Ё╓╕╓╥╓ч╓╧:
-
-<PRE>
- BEGIN;
- LOCK TABLE old_table;
- SELECT ... -- ╨О╫Э╓╥╓©╓╓╔╚╔И╔Ю╟йЁ╟╓н╔╚╔И╔Ю╓Р╓╧╓ы╓фа╙бР╓╥╓ч╓╧║ё
- INTO TABLE new_table
- FROM old_table;
- DROP TABLE old_table;
- ALTER TABLE new_table RENAME TO old_table;
- COMMIT;
-</PRE>
-
-[лУцМ║╖╔╚╔И╔Ю╓нди╡ц╓о ALTER TABLE ADD COLUMN ╓г╧т╓╗╓ч╓╧║ё]
-
-
-<P>
-<H4><A NAME="4.5">4.5</A>) ╔М╔╕║╒╔ф║╪╔ж╔К║╒╔г║╪╔©╔ы║╪╔╧╓н╨гбГ╔╣╔╓╔╨╓о║╘
-</H4>
-
-<P> ю╘╦б╓о╟й╡╪╓н╓х╓╙╓Й╓г╓╧║ё
-<PRE>
-╔г║╪╔©╔ы║╪╔╧╓н╨гбГ╔╣╔╓╔╨? ю╘╦бл╣╓╥ (500GB ╓н╔г║╪╔©╔ы║╪╔╧╓Бб╦╨ъ╓╥╓ч╓╧)
-╔ф║╪╔ж╔К╓н╨гбГ╔╣╔╓╔╨? 16TB
-╔М╔╕╓н╨гбГ╔╣╔╓╔╨? 7.1╟й╧ъ╓гю╘╦бл╣╓╥
-╔у╔ё║╪╔К╔и╓н╨гбГ╔╣╔╓╔╨? 7.1╟й╧ъ╓г1GB
-╔ф║╪╔ж╔КфБ╓г╓н╨гбГ╔М╔╕©Т? ю╘╦бл╣╓╥
-╔ф║╪╔ж╔КфБ╓г╓н╨гбГ╔╚╔И╔Ю©Т? ╔╚╔И╔Ю╓н╥©╓к╓Х╓Й250-1600
-╔ф║╪╔ж╔КфБ╓г╓н╨гбГ╔╓╔С╔г╔╞╔╧©Т? ю╘╦бл╣╓╥
-</PRE>
-
-<P> ╓Б╓а╓М╓С║╒╓Ё╓Л╓И╓о╪б╨щ╓ол╣ю╘╦б╓г╓о╓й╓╞║╒╔г╔ё╔╧╔╞мфнл╓х╔А╔Б╔Й║╪╓Д╔╧╔О╔ц╔в╔╧╔з║╪╔╧╓нбГ╓╜╓╣╓к╓Х╓Йю╘╦б╓╣╓Л╓ч╓╧║ёю╜г╫╓о╓Ё╓Л╓И╓нцм╓╛╓Ё╓х╓н╓ш╓╚бГ╓╜╓й╩Ч╓кюЗ╓Й╓Р╪У╓╠╓ч╓╧║ё
-
-<P> ╨гбГ╔ф║╪╔ж╔К╔╣╔╓╔╨╓н16TB╓о╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓к╓Х╓К╣ПбГ╔у╔║╔╓╔К╓н╔╣╔щ║╪╔х╓ои╛мв╓х╓╥╓ч╓╩╓С║ё╣ПбГ╓й╔ф║╪╔ж╔К╓ойё©Т╓н1GB╓н╔у╔║╔╓╔К╓кй╛╓╠╓фйщб╦╓╣╓Л╓ч╓╧╓н╓г║╒╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓ню╘╦б╓о╫емв╓г╓о╓╒╓Й╓ч╓╩╓С║ё
-
-<P> ╔г╔у╔╘╔К╔х╓н╔ж╔М╔ц╔╞╔╣╔╓╔╨╓Р32k╓к╓╧╓К╓х╨гбГ╔ф║╪╔ж╔К╔╣╔╓╔╨╓х╨гбГ╔╚╔И╔Ю©Т╓х╓╛аЩ╡ц╓╥╓ч╓╧║ё
-
-
-<P>
-<H4><A NAME="4.6">4.6</A>) ╟Лхле╙╓й╔ф╔╜╔╧╔х╔у╔║╔╓╔К╓╚╓И╔г║╪╔©╓Рйщб╦╓╧╓К╓к╓о║╒╔г║╪╔©╔ы║╪╔╧╓н╔г╔ё╔╧╔╞мфнл╓о╓и╓н╓╞╓И╓╓и╛мв╓г╓╧║╘
-</H4>
-
-иАдл╓н╔ф╔╜╔╧╔х╔у╔║╔╓╔К╓Р PostgreSQL ╓н╔г║╪╔©╔ы║╪╔╧╓кйщб╦╓╧╓К╓к╓о║╒╨гбГ╓глС5гэ╓н╔г╔ё╔╧╔╞мфнл╓Ри╛мв╓х╓╥╓ч╓╧║ё<P>
-
-<P> нЦбЙ╓х╓╥╓ф║╒Ёф╧т╓кю╟©Т╓х╔ф╔╜╔╧╔х╣╜╫р╓Р╩Щ╓д 100,000╧т╓н╔у╔║╔╓╔К╓Р╧м╓╗
-╓ф╓ъ╓ч╓╥╓Г╓╕║ё╔ф╔╜╔╧╔х╓нй╦╩ЗнС╓нй©╤яд╧╓╣╓Р20╔п╔╓╔х╓х╡╬дЙ╓╧╓К╓х║╒╔у╔И╔ц╔х
-╔у╔║╔╓╔К╓нбГ╓╜╓╣╓олС2.8MB ╓г╓╧║ё╓Ё╓н╔г║╪╔©╓Р╢ч╓Ю PostgreSQL ╔г║╪╔©╔ы║╪╔╧
-╔у╔║╔╓╔К╓нбГ╓╜╓╣╓о╪║╓н╓Х╓╕╓клС6.4MB╓х╦╚юя╓Б╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧║╖
-
-<PRE>
- 36 bytes: Ёф╔М╔╕╓н╔ь╔ц╔ю(Ё╣╩╩)
- 24 bytes: ю╟©Т(int)╔у╔ё║╪╔К╔и╓х╔ф╔╜╔╧╔х(text)╔у╔ё║╪╔К╔и
- + 4 bytes: ╔з║╪╔╦╬Е╓н╔©╔ц╔в╔К╓ь╓н╔щ╔╓╔С╔©
- ----------------------------------------
- 64 bytes per row
-
- PostgreSQL ╓н╔г║╪╔©╔з║╪╔╦╔╣╔╓╔╨╓о 8192╔п╔╓╔х(8KB)╓й╓н╓г:
-
- 8192 bytes per page
- ------------------- = 128 rows per database page (юз╓Й╬Е╓╡)
- 64 bytes per row
-
- 100000 data rows
- -------------------- = 782 database pages
- 128 rows per page
-
-782 database pages * 8192 bytes per page = 6,406,144 bytes (6.4 MB)
-</PRE>
-
-<P>
-╔╓╔С╔г╔ц╔╞╔╧╓о║╒╓Ё╓Л╓ш╓и╓н╔╙║╪╔п╔ь╔ц╔и╓омв╣А╓╥╓ч╓╩╓С╓╛║╒╔╓╔С╔г╔ц╔╞╔╧иу╓╠╓╣╓Л╓К╔г║╪╔©╓Р╢ч╓Ю╟й╬Е║╒╓╫╓Л╓й╓Й╓кбГ╓╜╓╞╓й╓Й╓ч╓╧║ё
-
-<P>
-<H4><A NAME="4.7">4.7</A>) дЙ╣а╓╣╓Л╓©╔ф║╪╔ж╔К║╒╔╓╔С╔г╔ц╔╞╔╧║╒╔г║╪╔©╔ы║╪╔╧║╒╓╙╓Х╓с║╒╔Ф║╪╔╤╓Р╓и╓н╓Х╓╕╓к╓╥╓ф╦╚╓д╓╠╫п╓╥╓ч╓╧╓╚║╘
-</H4>
-
-<P> <I>psql</I> ╓к╓о╓╓╓М╓╓╓М╓й╔п╔ц╔╞╔╧╔И╔ц╔╥╔Е║╕╔Ё╔ч╔С╔и╓╛╓╒╓Й║╒╓Ё╓╕╓╥╓©╬ПйС╓Ри╫╪╗╓╥╓ч╓╧║ё╔п╔ц╔╞╔╧╔И╔ц╔╥╔Е║╕╔Ё╔ч╔С╔и╓н╪ОнЮ╓Р╦╚╓К╓к╓о \? ╓Р╩х╓ц╓ф╡╪╓╣╓╓║ё
-<P> ╓ч╓©║╒<I>pgsql/src/tutorial/syscat.source</I> ╔у╔║╔╓╔К╓РаЖ╓И╓╩╓ф╓ъ╓ф╡╪╓╣╓╓║ё╓╫╓Л╓о║╒бТ╩Ё╓н <small>SELECT</small> й╦╓к╓Х╓Йи╛мв╓й╬ПйС╓Р╔г║╪╔©╔ы║╪╔╧╓н╔╥╔╧╔ф╔Ю║╕╔ф║╪╔ж╔К╓╚╓И╪Х╓Й╫п╓╥╓фнЦ╪╗╓╥╓ф╓╞╓Л╓ч╓╧║ё╓ч╓©║╒<i>pg_</i> ╓г╩о╓ч╓К╔╥╔╧╔ф╔Ю╔ф║╪╔ж╔К╓к╓Б╣╜╫р╓╣╓Л╓ф╓╓╓ч╓╧║ё╓╣╓И╓к║╒<i>psql -l</i> ╓о╓╧╓ы╓ф╓н╔г║╪╔©╔ы║╪╔╧╓Р╔Й╔╧╔хи╫╪╗╓╥╓ч╓╧║ё
-
-<P>
-<H4><A NAME="4.8">4.8</A>) лД╓╓╧Г╓О╓╩╓╛цы╓╓╓╕╓╗║╒╔╓╔С╔г╔ц╔╞╔╧╓Р╩х╓ц╓ф╓╓╓Кмм╩р╓╛╓╒╓Й╓ч╓╩╓С║ё╓й╓╪╓г╓╧╓╚║╘
-</H4>
-
-╔╓╔С╔г╔ц╔╞╔╧╓о╪╚ф╟е╙╓к╓╧╓ы╓ф╓нлД╓╓╧Г╓О╓╩╓г╩х╓О╓Л╓К╓О╓╠╓г╓о╓╒╓Й╓ч╓╩╓С║ё╔ф║╪
-╔ж╔К╓╛╨г╬╝╔╣╔╓╔╨╓Х╓ЙбГ╓╜╓╞║╒лД╓╓╧Г╓О╓╩╓г╓╫╓н╓О╓╨╓╚╓й╔я║╪╔╩╔С╔ф║╪╔╦╓н╔М╔╕╓Р
-а╙бР╓╧╓К╩Ч╓ю╓╠║╒╔╓╔С╔г╔ц╔╞╔╧╓о╩х╓О╓Л╓ч╓╧║ё╓Ё╓Л╓о╔╓╔С╔г╔ц╔╞╔╧╔╧╔╜╔Ц╔С╓к╓Х
-╓Й╣╞╓Ё╓╣╓Л╓К╔И╔С╔ю╔Ю╓й╔г╔ё╔╧╔╞╔╒╔╞╔╩╔╧╓о║╒╔ф║╪╔ж╔К╓Р╔╧╔х╔Л║╪╔х╓кфи╓Ю╫Г╪║
-аЖ╨╨╓Х╓Й╓Бцы╓╞╓й╓К╓Ё╓х╓╛╓х╓╜╓и╓╜╓╒╓К╓╚╓И╓г╓╧║ё
-
- <P>╔╓╔С╔г╔ц╔╞╔╧╓Р╩х╓╕╓╚╓Р╥ХдЙ╓╧╓К╓©╓А╓к║╒PostgreSQL ╓о╔ф║╪╔ж╔К╓к╓д╓╓
-╓ф╓неЩ╥в╬ПйС╓Р╩Щ╓©╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С║ё╓Ё╓неЩ╥в╬ПйС╓о║╒<SMALL>VACUUM
-ANALYZE</SMALL>╓ч╓©╓о║╒ц╠╓к <SMALL>ANALYZE</SMALL> ╓Р╩х╓ц╓ф╪Щ╫╦╓╧╓К╓Ё╓х
-╓╛╓г╓╜╓ч╓╧║ёеЩ╥в╬ПйС╓Р╩х╓ц╓ф╔╙╔ж╔ф╔ё╔ч╔╓╔╤╓о╔ф║╪╔ж╔К╓нцФ╓к╓╒╓К╔М╔╕©Т╓Рцн
-╓Й║╒╔╓╔С╔г╔ц╔╞╔╧╓Р╩х╓╕╓ы╓╜╓╚╓н╓н╥ХдЙ╓Р╓Х╓Йю╣╓╥╓╞╓г╓╜╓ч╓╧║ёеЩ╥в╬ПйС╓о╨ге╛
-╓й╥К╧Г╫Г╓Д╥К╧ГйЩк║╓Р╥Х╓А╓К╬Е╓г╓Б╣╝╫е╓й╓Б╓н╓Б╓╒╓Й╓ч╓╧║ёеЩ╥в╬ПйС╓н╪Щ╫╦╓о║╒
-╔ф║╪╔ж╔К╓нфБмф╓╛╓╚╓О╓К╓хкХ╓к╥╚йж╓╥╓й╓╣╓Л╓К╓ы╓╜╓г╓╧║ё</P>
-
- <P> ╔╓╔С╔г╔ц╔╞╔╧╓о║╒дл╬О <SMALL>ORDER BY</SMALL> ╓Д╥К╧Г╓Р╧т╓й
-╓╕╓©╓А╓к╓о╩х╓О╓Л╓ч╓╩╓С║ё╫Г╪║╔╧╔╜╔Ц╔С╓кбЁ╓╞лю╪╗е╙╔╫║╪╔х╓о║╒╣ПбГ╓й╔ф║╪╔ж╔К
-╓н╔╓╔С╔г╔ц╔╞╔╧╔╧╔╜╔Ц╔С╓Х╓Й╓БиАдл╓о╧Бб╝╓г╓╧║ё</P>
- ╓╥╓╚╓╥║╒<SMALL>ORDER BY</SMALL>╓хах╓ъ╧Г╓О╓╣╓Л╓©<SMALL>LIMIT</SMALL>
-╓о║╒╔ф║╪╔ж╔К╓н╬╝╓╣╓йиТй╛╓Рйж╓╧╓©╓А╓к╓©╓с╓©╓с╔╓╔С╔г╔ц╔╞╔╧╓Р╩х╓╕╓г╓╥╓Г╓╕║ё
-
- <P> <SMALL>LIKE</SMALL> ╓╒╓К╓╓╓о <I>~</I> ╓н╓Х╓╕╓й╔О╔╓╔К╔и╔╚║╪╔и╠И╩╩
-╩р╓Р╩х╓╕╓х╓╜║╒╦║╨В╓нЁ╚╩о╓╛й╦╩ЗнС╓н╩о╓А╓ниТй╛╓к╦гдЙ╓╣╓Л╓ф╓╓╓К╓х╓╜╓к╓н╓ъ║╒
-╔╓╔С╔г╔ц╔╞╔╧╓╛╩х╓О╓Л╓ч╓╧║ё╓╫╓╕╓╓╓╕╓О╓╠╓г║╒╔╓╔С╔г╔ц╔╞╔╧╓Р╩х╓╕╓©╓А╓к╓о║╒
-<SMALL>LIKE</SMALL> ╔я╔©║╪╔С╓о<I>%</I>╓г╩о╓А╓й╓╓╓Х╓╕╓к╓╥╓ф║╒╓ч╓©║╒
-<I>~</I>(ю╣╣╛и╫╦╫)╔я╔©║╪╔С╓о<I>^</I> ╓г╩о╓А╓й╓╞╓ф╓о╓й╓Й╓ч╓╩╓С║ё
-
-[лУцМ║╖
- ╤╞ю╘е╙╓к╔╓╔С╔г╔ц╔╞╔╧╓Р╩х╓╕╓к╓о SET enable_seqscan = off ╓Р╪б╧т╓╥╓ч╓╧
-]
-
-
-<P>
-<H4><A NAME="4.9">4.9</A>) лД╓╓╧Г╓О╓╩╔╙╔ж╔ф╔ё╔ч╔╓╔╤╓╛╓и╓н╓Х╓╕╓клД╓╓╧Г╓О╓╩╓Ри╬╡а╓╧╓К╓н╓╚╓Р╦╚╓К╓к╓о╓и╓╕╓╥╓ч╓╧╓╚║╘
-</H4>
-
-<P> ╔╙╔С╔И╔╓╔С╔ч╔к╔Е╔╒╔К╓г <small>EXPLAIN</small> ╓Р╦╚╓ф╡╪╓╣╓╓║ё
-
-<P>
-<H3><A NAME="4.10">4.10</A>) R-tree ╔╓╔С╔г╔ц╔╞╔╧╓х╓о╡©╓г╓╧╓╚║╘</H3>
-
-<P> R-tree ╔╓╔С╔г╔ц╔╞╔╧╓о╤У╢же╙╓й╔г║╪╔©╓к╔╓╔С╔г╔ц╔╞╔╧╓Риу╓╠╓К╓©╓А╓к╩х╓О╓Л╓ч╓╧║ё╔о╔ц╔╥╔Е╔╓╔С╔г╔ц╔╞╔╧╓г╓охо╟о╓н╦║╨В╓╛╓г╓╜╓ч╓╩╓С║ё╓ч╓©║╒B-tree ╔╓╔С╔г╔ц╔╞╔╧╓г╓о║╒ё╠╪║╦╣╓г╓╥╓╚хо╟о╓н╦║╨В╓╛╓г╓╜╓ч╓╩╓С║ёR-tree ╔╓╔С╔г╔ц╔╞╔╧╓г╓╒╓Л╓пб©╪║╦╣╓н╔г║╪╔©╓Р╟╥╓╗╓ч╓╧║ё╓©╓х╓╗╓п║╒╓Б╓╥ R-tree ╔╓╔С╔г╔ц╔╞╔╧╓Р <I>point</I> ╥©╓нб╟ю╜╓киу╓╠╓К╓Ё╓х╓╛╓г╓╜╓К╓х╓╧╓К╓х╔╥╔╧╔ф╔Ю╓о║╒║жд╧йЩ╥а╓к╟о╓ч╓Л╓©ею╓Р╓╧╓ы╓фа╙бР╓╧╓К║в╓х╓╓╓╕╓Х╓╕╓йлД╓╓╧Г╓О╓╩╓к║╒╓Х╓Й╦Зн╗ни╓╞еЗ╓╗╓И╓Л╓ч╓╧║ё
-
-<P> R-Tree ╓нюъ╥в╓н╦╤е╣╓х╓й╓К╦╒╟р╓╒╓Коюй╦╓о:
-
-<P> Guttman, A. "R-Trees: A Dynamic Index Structure for Spatial Searching."
-Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57.
-
-<P> ╓Ё╓ноюй╦╓о║╒Stonebraker ╤╣╪Ь╓н "Readings in Database Systems"
-╓г╓Б╪Х╓Й╬Е╓╡╓И╓Л╓ф╓╓╓ч╓╧║ё
-
-<P>
-<small><PRE>
- [лУцМ║╖
- фЮниюХц╪бГ╓нюпюН╡б╪ё╓╣╓С╓Х╓ЙR-Tree╢ь╥╦╓нй╦╦╔╓Р╬р╡П╓╥╓фд╨╓╜╓ч╓╥╓©║ё
- фЭкэ╦Л Postgres ML ╓н╔╒║╪╔╚╔╓╔ж╓╚╓И "Subject: [postgres95 801] spatial data structures"
- <A HREF="http://www.sra.co.jp/people/t-ishii/PostgreSQL/mhonarc/pgsql-jp/1996Oct/msg00007.html">http://www.sra.co.jp/people/t-ishii/PostgreSQL/mhonarc/pgsql-jp/1996Oct/msg00007.html</A>
- ╓Р╓╢мВ╡╪╓╣╓╓║ё
- ]
-</PRE></small>
-
-<P> ах╧Ч╓ъ╓н R-Tree ╓г╔щ╔Й╔╢╔С╓Д╔э╔ц╔╞╔╧╓РаЮ╨Н╓г╓╜╓ч╓╧║ёмЩоюе╙╓к╓оR-Tree ╓о╓Б╓ц╓х╧Б╓╓╪║╦╣╓РаЮ╨Н╓╧╓К╓Х╓╕╓к╓БЁхд╔╓г╓╜╓ч╓╧║ё╪б╪ае╙╓к╓о║╒R-Tree ╓нЁхд╔╓к╓о╓а╓Г╓ц╓х╓╥╓©╨Н╤х╓╛и╛мв╓г╓╥╓ф║╒╦╫╨ъ║╒╡Ф║╧╓о╓╫╓Л╓Р╓и╓н╓Х╓╕╓к╓╧╓К╓╚╓к╓д╓╓╓ф╓нй╦╫Я╓Р╩Щ╓ц╓ф╓╓╓ч╓╩╓С║ё
-
-<P>
-<small><PRE>
- [лУцМ║╖
- ╔╓╔С╔©║╪╔╕╔ё╔╨╓нйр╡╛╓╣╓С╓╛б©╪║╦╣╢Ж╡©╔╙╔ж╔╦╔╖╔╞╔х╓ь╓нЁхд╔╨Н╤хцФ╓г╓╧║ё╬э╓╥╓╞╓о║╒
- <A HREF="http://www.interwiz.koganei.tokyo.jp/software/geometric/index.html">http://www.interwiz.koganei.tokyo.jp/software/geometric/index.html</A>
- ╓Р╓╢мВ╓╞╓ю╓╣╓╓║ё
- ]
-</PRE></small>
-
-
-<P>
-<H4><A NAME="4.11">4.11</A>) ╟Деае╙лД╓╓╧Г╓О╓╩╨ге╛╡╫╓х╓о╡©╓г╓╧╓╚║╘
-</H4>
-
-<P> GEQO ╔Б╔╦╔Е║╪╔К╓о║╒бТ╩Ё╓н╔ф║╪╔ж╔К╓Р╥К╧Г╓╧╓К╓х╓╜╓к║╒╟Деае╙╔╒╔К╔╢╔Й╔╨╔Ю(GA)╓глД╧Г╓О╓╩╓Р╧Бб╝╡╫╓╥╓ч╓╧║ё╓Ё╓Л╓к╓Х╓Й║╒╓╥╓И╓ъ╓д╓ж╓╥╓кц╣╨В╓Р╧т╓й╓О╓й╓╞╓ф╓Б║╒бГ╓╜╓й╥К╧Г(join queries)╓Р╟╥╓╕╓Ё╓х╓╛╓г╓╜╓К╓Х╓╕╓к╓й╓Й╓ч╓╧║ё
-
-<P>
-<H4><A NAME="4.12">4.12</A>) ю╣╣╛и╫╦╫╓г╓н╦║╨В╓ДбГй╦╩З╓х╬╝й╦╩З╓х╓Р╤Хйл╓╥╓й╓╓ю╣╣╛и╫╦╫╦║╨В╓о╓и╓н╓Х╓╕╓к╪б╦╫╓╥╓ч╓╧╓╚║╘бГй╦╩З╓х╬╝й╦╩З╓х╓Р╤Хйл╓╥╓й╓╓╦║╨В╓н╓©╓А╓н╔╓╔С╔г╔ц╔╞╔╧╓о╓и╓н╓Х╓╕╓к╩х╓╓╓ч╓╧╓╚║╘
-</H4>
-
-<P>
-<I>~</I>╠И╩╩╩р╓ою╣╣╛и╫╦╫╬х╧Г╓Р╧т╓й╓╓║╒<I>~*</I> ╓обГй╦╩З╓х╬╝й╦╩З╓Р╤Хйл╓╥╓й╓╓(case-insensitive)ю╣╣╛и╫╦╫╬х╧Г╓Р╧т╓╓╓ч╓╧║ё PostgreSQL 7.1 ╟й╧ъ╓г╓о║╒бГй╦╩З╓х╬╝й╦╩З╓Р╤Хйл╓╥╓й╓╓ <small>LIKE</small> ╠И╩╩╩р╓Р <small>ILIKE</small> ╓х╓╓╓╓╓ч╓╧║ё
-
-
-<P>бГй╦╩З╓х╬╝й╦╩З╓Р╤Хйл╓╥╓й╓╓еЫцмхФЁс╪║╓н╓Х╓╕╓ки╫╦╫╓г╓╜╓К║╖
-
- <PRE>
- <STRONG>SELECT *</STRONG>
- FROM tab
- WHERE lower(col) = 'abc'
- </PRE>
-
-и╦╫Ю╔╓╔С╔г╔ц╔╞╔╧╓г╓о╩х╓О╓Л╓╨║╒╓╥╓╚╓╥╓й╓╛╓И║╒╓Б╓╥╢ь©Т╔╓╔С╔г╔ц╔╞╔╧╓Р
-╨Н╓ц╓©╓й╓И╓╫╓Л╓╛╩х╓О╓Л╓К╓г╓╥╓Г╓╕║ё
-
- <PRE>
- CREATE INDEX tabindex on tab (lower(col));
- </PRE>
-
-
-
-
-<PRE>
- WHERE lower(textfield) LIKE lower(pattern)
-</PRE>
-
-
-<P>
-<H4><A NAME="4.13">4.13</A>) лД╓╓╧Г╓О╓╩╓нцФ╓г║╒╔у╔ё║╪╔К╔и╓╛ <small>NULL</small> ╓г╓╒╓К╓Ё╓х╓Р╦║╫п╓╧╓К╓к╓о╓и╓╕╓╥╓ч╓╧╓╚║╘
-</H4>
-
- <P>╔╚╔И╔Ю╓Р <SMALL>IS NULL</SMALL> ╓х <SMALL>IS NOT NULL</SMALL>
-╓х╓г╩Н╓╥╓ф╓ъ╓ч╓╧║ё</P>
-
-<P>
-<H4><A NAME="4.14">4.14</A>) мм║╧╓йй╦╩З╥©╓н╓╫╓Л╓╬╓Л╓н╟Ц╓╓╓о╡©╓г╓╧╓╚║╘
-</H4>
-
-<PRE>
-Type Internal Name Notes
---------------------------------------------------
-"char" char 1 character
-CHAR(#) bpchar ╩ьдЙ╓╣╓Л╓©╦гдЙд╧╓х╓й╓К╓Х╓╕╓к╤УгР╓╛╣м╓А╓И╓Л╓К
-VARCHAR(#) varchar д╧╓╣╓н╬Е╦б╓нл╣╓╓╔ф╔╜╔╧╔х
-TEXT text д╧╓╣╓ню╘╦б╓о╨гбГ╔М╔╕д╧╓к╓Х╓К
-BYTEA bytea ╡дйяд╧╓н╔п╔╓╔хгшнС(null-byte safe)
-</PRE>
-
-<P> фБиТл╬╓к╓╙лэ╓к╓╚╓╚╓К╓н╓о║╒╔╥╔╧╔ф╔Ю║╕╔╚╔©╔М╔╟╓Рд╢╓ы╓К╓х╓╜╓Д║╒╔╗╔И║╪╔А╔ц╔╩║╪╔╦╓Р╪У╓╠╪Х╓К╓х╓╜╓г╓╧║ё
-
-
-<P> ╬Е╣╜╓н╥©╓н╓╕╓а╦Е╓нё╢╓д╓н╥©╓о "varlena" ╥©╓г╓╧(╓╧╓й╓О╓а║╒╔г╔ё╔╧╔╞╓н╨г╫И╓нё╢╔п╔╓╔х╓╛╔г║╪╔©д╧╓г║╒╓╫╓Л╓н╦Е╓к╪б╨щ╓н╔г║╪╔©╓╛бЁ╓╜╓ч╓╧)║ё╓Ё╓н╓Х╓╕╓к╪б╨щ╓н╤У╢ж╓оюК╦ю╓╣╓Л╓©бГ╓╜╓╣╓Х╓Й╓Б╬╞╓╥бГ╓╜╓╞╓й╓Й╓ч╓╧║ё╓╥╓╚╓╥║╒╓Ё╓Л╓И╓н╔г║╪╔©╥©╓о<small>TOAST</small>╓к╓Х╓Й╟╣╫л╓╣╓Л╓©╓Ййё©Т╔М╔╕╓кео╓ц╓фйщб╦╓╣╓Л╓©╓Й╓╥╓ф║╒╔г╔ё╔╧╔╞╬Е╓н╤У╢ж╓о╩в╓ц╓©╓Х╓Й╬╝╓╣╓╞╓й╓Й╓ч╓╧║ё
-
- <P><SMALL>CHAR()</SMALL>╓о╓╓╓д╓Бд╧╓╣╓╛ф╠╓╦й╦╩ЗнС╓Рйщб╦╓╧╓К╓н╓к╨ге╛╓г
-╓╧║ё<SMALL>VARCHAR()</SMALL> ╓о╡дйяд╧╓нй╦╩ЗнС╓Рйщб╦╓╧╓К╓н╓к╨ге╛╓г╓╧╓╛║╒
-йщб╦╓г╓╜╓Кй╦╩ЗнС╓нд╧╓╣╓кю╘╦б╓╛╓╒╓Й╓ч╓╧║ё<SMALL>TEXT</SMALL> ╓од╧╓╣╓кю╘╦б
-╓нл╣╓╓й╦╩ЗнС╓нйщб╦╓©╓А╓н╓Б╓н╓г║╒╨гбГ1╔╝╔╛╔п╔╓╔х╓г╓╧║ё
-<SMALL>BYTEA</SMALL>╓о║╒иТй╛е╙╓к<SMALL>NULL</SMALL> ╓н╔п╔╓╔х╓Р╢ч╓Ю╔п╔╓╔й
-╔Й╔г║╪╔©╓Рйщб╦╓╧╓К╓©╓А╓н╓Б╓н╓г╓╧║ё</P>
-
-
-<P>
-<H4><A NAME="4.15.1">4.15.1</A>) длхж(serial)║©╪╚ф╟аЩй╛╔у╔ё║╪╔К╔и╓о╓и╓н╓Х╓╕╓к╓д╓╞╓Й╓ч╓╧╓╚║╘
-</H4>
-
-<P> PostgreSQL ╓о <small>SERIAL</small> ╔г║╪╔©╥©╓Р╔╣╔щ║╪╔х╓╥╓ч╓╧║ё╔╚╔И╔Ю╬Е╓кдлхж╓х╔╓╔С╔г╔ц╔╞╔╧╓Р╪╚ф╟╨Ню╝╓╥╓ч╓╧║ё╓©╓х╓╗╓п║╒
-
-<PRE>
- CREATE TABLE person (
- id SERIAL,
- name TEXT
- );
-</PRE>
-╓о╪╚ф╟е╙╓к╪║╓н╓Х╓╕╓ккщлУ╓╣╓Л╓ч╓╧:
-<PRE>
- CREATE SEQUENCE person_id_seq;
- CREATE TABLE person (
- id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
- name TEXT
- );
- CREATE UNIQUE INDEX person_id_key ON person ( id );
-</PRE>
-длхж╓к╓д╓╓╓ф╓н╓Б╓ц╓х╬э╓╥╓╓╬ПйС╓о║╒╔╙╔С╔И╔╓╔С╔ч╔к╔Е╔╒╔К╓г <I>create_sequence</I> ╓Р╓╢мВ╡╪╓╣╓╓║ё
-<P> ╓ч╓©║╒Ёф╔М╔╕╓н<I>OID</I>╔у╔ё║╪╔К╔и╓Р╟Л╟уцм╓х╓╥╓ф╩х╓╕╓Ё╓х╓Б╓г╓╜╓ч╓╧║ё╓╥╓╚╓╥╓й╓╛╓И║╒╓Б╓╥╓Б╔г║╪╔©╔ы║╪╔╧╓Р╔ю╔С╔в╓╥╓ф╓Й╔М║╪╔и╓╧╓Ки╛мв╓╛╓╒╓К╬Л╧Г╓о║╒<small>OID</small>╓Р╡╧б╦╓╧╓К╓©╓А╓к<I>pg_dump</I> ╓г <I>-o</I>╔╙╔в╔╥╔Г╔С╓Р╩х╓╕╓╚║╒╓ч╓©╓о║╒<small>COPY WITH OIDS</I>╔╙╔в╔╥╔Г╔С╓Р╩х╓╕и╛мв╓╛╓╒╓Й╓ч╓╧║ё
-
- Bruce Momjian ╓н<A HREF="http://www.PostgreSQL.org/docs/aw_pgsql_book">(http://www.PostgreSQL.org/docs/aw_pgsql_book)╓н Numbering Rows</A>╓н╬о╓к╓╒╓Й╓╒╓ч╓╧║ё
-
-
-<H4><A NAME="4.15.2">4.15.2</A>) <small>SERIAL</small>╔г║╪╔©╥©╓качфЧ╓╣╓Л╓Кцм╓о║╒╓и╓╕╓╧╓Л╓пфю╓И╓Л╓ч╓╧╓╚║╘
-</H4>
- <P>╓р╓х╓д╓нйЩк║╓о║╒<I>nextval()</I> ╢ь©Т╓Р╩х╓ц╓ф╓╫╓нцм╓РачфЧ╓╧╓К<I>
-а╟(before)╓к</I> SEQUENCE ╔╙╔ж╔╦╔╖╔╞╔х╓╚╓И╪║╓н <small>SERIAL</small> цм╓Р╪Х╓Й╫п╓╥║╒╓╫╓Л╓╚╓И╪б╨щ╓качфЧ╓Р╓╧╓К╓Ё╓х╓г╓╧║ё<A
-HREF="#4.16.1">4.16.1</A> ╓ннЦ╓г╩х╓ц╓©╔ф║╪╔ж╔К╓Р╩х╓╕╓х╓╧╓К╓х║╒Perl ╓г╓о
-╪║╓н╓Х╓╕╓к╓й╓Й╓ч╓╧║ё
-
-<PRE>
- new_id = output of "SELECT nextval('person_id_seq')"
- INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal');
-</PRE>
-
-╓╫╓╕╓╥╓ф║╒<tt>new_id</tt> ╓кйщб╦╓╥╓©©╥╓╥╓╓цм╓Рб╬╓нлД╓╓╧Г╓О╓╩╓к(╓©╓х╓╗╓п║╒<tt>person</tt> ╔ф║╪╔ж╔К╓кбп╓╧╓КЁ╟иТ╔╜║╪(foreign key)╓н╓Х╓╕╓к)╩х╓╕╓х╓Х╓╓╓г╓╥╓Г╓╕║ё╪╚ф╟е╙╓к╨Н╓И╓Л╓©<small>SEQUENCE</small>╔╙╔ж╔╦╔╖╔╞╔х╓нл╬а╟╓о║╒&lt;<I>table</I>&gt;_&lt;<I>serialcolumn</I>&gt;_<I>seq</I> ╓н╓Х╓╕╓к╓й╓Й║╒╓Ё╓н╓╕╓а║╒<I>table</I> ╓х <I>serialcolumn</I> ╓о╓╫╓Л╓╬╓Л╔ф║╪╔ж╔К╓нл╬а╟╓х<small>SERIAL</small>╔╚╔И╔Ю╓нл╬а╟╓г╓╧║ё
-<P>
-
-╓╒╓К╓╓╓о║╒м©╓╗╓И╓Л╓©<small>SERIAL</small>цм╓Р║╒╓╫╓Л╓╛╢ШдЙцм╓х╓╥╓фачфЧ╓╣╓Л╓©<I>╦Е╓г(after)</I>║╒ <I>currval</I>() ╢ь©Т╓Р╩х╓ц╓ф╪Х╓Й╫п╓╧╓Ё╓х╓Б╓г╓╜╓ч╓╧║ё╓©╓х╓╗╓п║╒
-
-<PRE>
- INSERT INTO person (name) VALUES ('Blaise Pascal');
- new_id = currval('person_id_seq');
-</PRE>
-
-╨г╦Е╓к║╒<small>INSERT</small>й╦╓╚╓Ийж╓К<A HREF="#4.17"><small>OID</small></A>╓Р╩х╓ц╓ф║╒╢ШдЙцм╓Р╓ъ╓д╓╠╓К╓Ё╓х╓Б╓г╓╜╓ч╓╧╓╛║╒╓╥╓╚╓╥║╒╓Ё╓Л╓о╨г╓Б╟э©╒ю╜╓ндЦ╓╓╓Д╓ЙйЩ╓г╓╥╓Г╓╕║ёPerl╓нDBI╓г Edmund Mergl ╓н╨Н╓ц╓© DBD::Pg ╔Б╔╦╔Е║╪╔К╓Р╩х╓╗╓п║╒$sth->execute() ╓н╦Е╓к $sth-&gt{pg_oid_status} ╓Р╥пмЁ╓╥╓ф╓╫╓н OID цм╓Р╩х╓╗╓К╓Х╓╕╓к╓╧╓К╓Ё╓х╓о╓г╓╜╓ч╓╧║ё
-
-<P>
-<H4><A NAME="4.15.3">4.15.3</A>) б╬╓н╔Ф║╪╔╤╓х╓н╤╔╧Г╬Убж╓РхР╓╠╓К╓©╓А╓к╓о║╒<I>currval()</I> ╓х <I>nextval()</I> ╓о╩х╓О╓й╓╓╓ш╓╕╓╛╓Х╓╓╓н╓г╓╥╓Г╓╕╓╚║╘
-</H4>
-
- <P>╓╫╓Л╓о╓╒╓Й╓ч╓╩╓С║ёCurrval() ╓о║╒╓╧╓ы╓ф╓н╔Ф║╪╔╤╓г╓о╓╒╓Й╓ч╓╩╓С╓╛║╒╓╒╓й╓©╓н╔п╔ц╔╞╔╗╔С╔и╓км©╓╗╓И╓Л╓©╦╫╨ъ╓нцм╓Рйж╓╥╓ч╓╧║ё
-
-
-<H4><A name="4.15.4">4.15.4</A>) ╔х╔И╔С╔╤╔╞╔╥╔Г╔С╓╛цФцг╓╥╓©╓х╓╜╓к╓Б╓╕╓╓
-╓а╓и╔╥║╪╔╠╔С╔╧хж╧Ф╓╛╩х╓О╓Л╓й╓╓╓н╓о╓й╓╪╓г╓╧╓╚║╘╔╥║╪╔╠╔С╔╧║©SERIAL╔╚╔И╔Ю╓к
-╤У╓╜╓╛╓╒╓К╓н╓о╓й╓╪╓г╓╧╓╚║╘
-</H4>
-
- <P>ф╠╩Чю╜╓Р╡Ча╠╓╧╓К╓©╓А╓к║╒╪б╧тцФ╓н╔х╔И╔С╔╤╔╞╔╥╔Г╔С╓к║╒и╛мв╓г╔х
-╔И╔С╔╤╔╞╔╥╔Г╔С╓╛╫╙н╩╓╧╓К╓ч╓г╔М╔ц╔╞╓╣╓Л╓й╓╓╔╥║╪╔╠╔С╔╧цм╓Рм©╓╗╓ф╓╓╓ч╓╧║ё
-╓Ё╓н╓©╓А╔х╔И╔С╔╤╔╞╔╥╔Г╔С╓╛цФцг╓╣╓Л╓К╓ххж╧ФЁД╓ЙеЖ╓ф╓к╔╝╔Ц╔ц╔в╓Рю╦╓╦╓ч╓╧║ё
-</P>
-
-<P>
-<H4><A NAME="4.16">4.16</A>) <small>OID</small> ╓х╓о╡©╓г╓╧╓╚║╘ <small>TID</small> ╓х╓о╡©╓г╓╧╓╚║╘
-</H4>
-
-<P> <small>OID</small> ╓х╓о╟Л╟у╓н╔М╔╕ID ╓кбп╓╧╓К PostgreSQL ╓неЗ╓╗╓г╓╧║ёPostgreSQL ╓нцФ╓г╓д╓╞╓И╓Л╓К╓╧╓ы╓ф╓н╔М╔╕╓о╟Л╟у╓н <small>OID</small> ╓Рфю╓ч╓╧║ё<I>initdb</I> ╓гх╞ю╦╓╣╓Л╓К <small>OID</small> ╓о╓╧╓ы╓ф 16384 (<I>backend/access/transam.h</I> ╓╚╓И)╓Х╓Й╬╝╓╣╓йцм╓г╓╧║ё<I>initdb</I> ╦Е╓н╓╧╓ы╓ф╓н <small>OID</small> (╔Ф║╪╔╤╨Ню╝)╓о╓╫╓Л╟й╬Е╓нцм╓к╓й╓Й╓ч╓╧║ё
-╢ШдЙ╓г╓о║╒╓Ё╓Л╓И╓╧╓ы╓ф╓н <small>OID</small>╓о╟Л╓д╓н╔г║╪╔ж╔К╓Д╔г║╪╔©╔ы║╪╔╧фБ╓кн╠╓ч╓И╓╨║╒PostgreSQL ╔╓╔С╔╧╔х╔Л║╪╔╥╔Г╔Са╢бн╓нцФ╓г╟Л╟у╓г╓╧║ё
-
-<P> PostgreSQL ╓о╔ф║╪╔ж╔К╢ж╓н╔М╔╕╓Р╥К╓с╓д╓╠╓К╓©╓А╓к║╒╓╫╓н╔╥╔╧╔ф╔Ю╔ф║╪╔ж╔КфБ╓к <small>OID</small> ╓Р╩х╓╓╓ч╓╧║ё╓Ё╓н <small>OID</small> ╓офцдЙ╓н╔Ф║╪╔╤╓н╔М╔╕╓Р╪╠йл╓╧╓К╓©╓А╓Д╥К╧Г╓нцФ╓г╩х╓О╓Л╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧║ё<small>OID</small> ╓нцм╓Рйщб╦╓╧╓К╓©╓А╓к╓о <I>OID</I> ╥©╓Р╔╚╔И╔Ю╓к╩х╓╕╓Ё╓х╓Р╬╘╓А╓ч╓╧║ё╓Х╓Йб╝╓╞╔╒╔╞╔╩╔╧╓╧╓К╓©╓А╓к <I>OID</I> ╔у╔ё║╪╔К╔и╓к╔╓╔С╔г╔ц╔╞╔╧╓Р╨Н╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧║ё
-
- O<small>ID</small> ╓о║╒а╢╓ф╓н╔г║╪╔©╔ы║╪╔╧╓г╩х╓О╓Л╓КцФ╠Шнн╟Х╓╚╓И║╒а╢╓ф╓н©╥╓╥╓╓╔М╔╕╓кЁД╓ЙеЖ╓ф╓И╓Л╓ч╓╧║ё<small>OID</small> ╓Рб╬╓н╡©╓╚╓кйя╓╗╓©╓╓║╒╓╒╓К╓╓╓о╦╣╓н <small>OID</small> ╓Б╔ф║╪╔ж╔К╓х╟Л╫О╓к╔Ё╔т║╪╓╥╓©╓╓╓н╓й╓И║╒╓г╓╜╓й╓╞╓о╓╒╓Й╓ч╓╩╓С║ё
-
-
-<PRE>
- CREATE TABLE new (old_oid oid, mycol int);
- SELECT old_oid, mycol INTO new FROM old;
- COPY new TO '/tmp/pgtable';
- DELETE FROM new;
- COPY new WITH OIDS FROM '/tmp/pgtable';
-<!--
- CREATE TABLE new_table (mycol int);
- INSERT INTO new_table (oid, mycol) SELECT oid, mycol FROM old_table;
--->
-</PRE>
-
-<P> O<small>ID</small> ╓о║╒4╔п╔╓╔х╓ню╟©Т╓х╓╥╓фйщб╦╓╣╓Л╓ф╓╓╓К╓н╓г║╒40╡╞╓Р╠ш╓╗╓К╓х╟Н╓Л╓ф╓╥╓ч╓╕╓г╓╥╓Г╓╕║ёц╞╓Б╓Ё╓Л╓╛╣╞╓╜╓©╓хйС╧П╓╥╓ф╓╞╓К©м╓о╓╓╓ч╓╩╓С╓г╓╥╓©╓╛║╒╓╫╓╕╓й╓Ка╟╓к╓Ё╓ню╘╦б╓Р╪Х╓Й╫Э╓╞╓Ё╓х╓Р╥в╡Х╓╥╓ф╓╓╓ч╓╧║ё
-
-<P> T<small>ID</small> ╓офцдЙ╓нй╙мЩ╔М╔╕╓Р╓╫╓н╔ж╔М╔ц╔╞╓х╔╙╔у╔╩╔ц╔хцм╓г╪╠йл╓╧╓К╓©╓А╓к╩х╓О╓Л╓ч╓╧║ё<small>TID</small> ╓о╔М╔╕╓╛╫╓ю╣╓╣╓Л╓©╓Й╨ф╔М║╪╔и╓╣╓Л╓К╓хйя╓О╓Й╓ч╓╧║ё╓╫╓Л╓И╓н <small>TID</small> ╓о║╒й╙мЩ╔М╔╕╓Р╩ь╓╧╓©╓А╓к╔╓╔С╔г╔ц╔╞╔╧╣╜╨э╓г╩х╓О╓Л╓ч╓╧║ё
-
-<P>
-<H4><A NAME="4.17">4.17</A>) PostgreSQL ╓г╩х╓О╓Л╓К╓╓╓╞╓д╓╚╓нмя╦Л╓н╟улё╓о╡©╓г╓╧╓╚║╘
-</H4>
-
-<P> ╓╓╓╞╓д╓╚╓н╔╫║╪╔╧╔Ё║╪╔и╓Д╦е╓╓й╦╫Я╓нцФ╓к╓о║╒╓╫╓Л╓╬╓нюЛлГй╛лН╓нцФ╓г╓Б╓ц╓х╟Лхле╙╓к╩х╓О╓Л╓КюЛлГмя╦Л╓╛╩х╓О╓Л╓ф╓╓╓ч╓╧║ё
-
-<UL>
-<LI> ╔ф║╪╔ж╔К(table)║╒╢ь╥╦(relation)║╒╔╞╔И╔╧(class)
-<LI> ╔М╔╕(row)║╒╔Л╔Ё║╪╔и(record)║╒╔©╔ц╔в╔К(tuple)
-<LI> ╔╚╔И╔Ю(column)║╒╔у╔ё║╪╔К╔и(field)║╒б╟ю╜(attribute)
-<LI> ╪Хфю(retrieve)║╒а╙бР(select)
-<LI> цж╢╧(replace)║╒╧╧©╥(update)
-<LI> ди╡ц(append)║╒ачфЧ(insert)
-<LI> <small>OID</small>, о╒хж(serial value)
-<LI> ╔щ║╪╔©╔К(portal), ╔╚║╪╔╫╔К(cursor)
-<LI> нн╟Хйя©Т(range variable)║╒╔ф║╪╔ж╔Кл╬(table name)║╒╔ф║╪╔ж╔Кйлл╬(table alias)
-</UL>
-<P>╟Лхле╙╓й╔г║╪╔©╔ы║╪╔╧мя╦Л╓н╔Й╔╧╔х╓о║╖<a
-href="http://www.comptechnews.com/~reaster/dbdesign.html">
-http://www.comptechnews.com/~reaster/dbdesign.html</a>
-╓г╦╚╓д╓╠╓И╓Л╓ч╓╧║ё
-
-<P>
-<H4><A NAME="4.18">4.18</A>) ╔╗╔И║╪╔А╔ц╔╩║╪╔╦ <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>╓╛╫п╓К╓н╓о╓й╓╪╓г╓╧╓╚║╘
-</H4>
-<P>
-╓Б╓╥║╒7.1 ╓Х╓Й╓Б╦е╓╓╔п║╪╔╦╔Г╔С╓Р╓╙╩х╓╓╓н╬Л╧Г╓о║╒╔╒╔ц╔в╔г║╪╔х╓к╓Х╓ц╓ф╓Ё╓нлДбЙ╓Р
-╡Р╥Х╓г╓╜╓К╓г╓╥╓Г╓╕║ё╓╫╓Л╓х║╒╔╥╔╧╔ф╔Ю╓н╡╬аш╔А╔Б╔Й║╪╓Ра╢╓ф╩х╓╓╡л╓©╓╥╓ф╓╥╓ч╓ц╓ф╓╓╓К╡дг╫ю╜╓╛╓╒╓К╓╚║╒╔╚║╪╔м╔К╓╛╓╒╓К╔Й╔╫║╪╔╧╓к╓д╓╓╓ф╓Б╓дю╘╦бцм╓╛дЦ╓╧╓╝╓К╡дг╫ю╜╓╛╓╒╓Й╓ч╓╧║ё
-<I>postmaster</I> ╓Р╩оф╟╓╧╓Ка╟╓к╓Ё╓Л╓Р╩Н╓╥╓ф╓ъ╓ф╡╪╓╣╓╓║╖
-
-<PRE>
- ulimit -d 262144
- limit datasize 256m
-</PRE>
-
-<P>
-╔╥╔╖╔К╓к╓Х╓ц╓ф║╒╓и╓а╓И╓╚╓р╓х╓д╓╛ю╝╦Ы╓╧╓К╓г╓╥╓Г╓╕╓╛║╒╓Ё╓Л╓о╔в╔М╔╩╔╧╓н╔г║╪╔©╔╩╔╟╔А╔С╔хю╘╦б╓Р╓Х╓Й╧Б╓╞юъдЙ╓╥║╒╓©╓ж╓СлД╓╓╧Г╓О╓╩╓╛╢╟╥К╓╧╓К╓Х╓╕╓к╓й╓К╓г╓╥╓Г╓╕║ё╓Ё╓н╔Ё╔ч╔С╔и╓о╦╫╧т╓н╔в╔М╔╩╔╧╓х║╒╓Ё╓н╔Ё╔ч╔С╔и╓РаЖ╓И╓╩╓©╦Е╓к╨Н╓И╓Л╓Ка╢╓ф╓н╔╣╔ж╔в╔М╔╩╔╧╓к╓д╓╓╓фе╛мя╓╣╓Л╓ч╓╧║ё╔п╔ц╔╞╔╗╔С╔и╓╛╓х╓ф╓Бб©╓╞╓н╔г║╪╔©╓Рйж╓╧╓©╓А╓к<small>SQL</small> ╔╞╔И╔╓╔╒╔С╔х╓глДбЙ╓╛бЁ╓╓╓ф╓╓╓К╓н╓г╓╒╓Л╓п║╒╔╞╔И╔╓╔╒╔С╔х╓РЁ╚╩о╓╧╓Ка╟╓к╓Ё╓Л╓Р╩Н╓╥╓ф╓ъ╓ф╓╞╓ю╓╣╓╓║ё
-
-<P>
-<H4><A NAME="4.19">4.19</A>) ╓и╓н╔п║╪╔╦╔Г╔С╓н PostgreSQL ╓РаЖ╓И╓╩╓ф╓╓╓К╓╚╓Рд╢╓ы╓К╓к╓о╓и╓╕╓╥╓ч╓╧╓╚║╘<BR>
-</H4>
-<P>
-<I>psql</I> ╓╚╓И <tt>select version();</tt> ╓Р╔©╔╓╔в╓╥╓ч╓╧║ё
-<P>
-
-
-<H4><A NAME="4.20">4.20</A>) ╔И║╪╔╦║╕╔╙╔ж╔╦╔╖╔╞╔х╓наЮ╨Н╓г<I>invalid large obj descriptor</I> ╓Р╪У╓╠╪Х╓Й╓ч╓╥╓©║ё╓й╓╪╓г╓╥╓Г╓╕╓╚║╘
-</H4>
-
-<P>╔И║╪╔╦║╕╔╙╔ж╔╦╔╖╔╞╔хаЮ╨Н╓Р╓╧╓К╓х╓╜╓о║╒а╟╦Е╓к<tt>BEGIN WORK</tt>╓х<tt>COMMIT</tt>╓Риу╓╠╓Ки╛мв╓╛╓╒╓Й╓ч╓╧║ё╓╧╓й╓О╓а║╒<tt>lo_open</tt> ... <tt>lo_close</tt>╓Р╓о╓╣╓ъ╧Ч╓ъ╓ч╓╧║ё
-
-<P>╦╫╨ъ╓о║╒PostgreSQL╓н╔х╔И╔С╔╤╔╞╔╥╔Г╔С╓н╔Ё╔ъ╔ц╔х╩Ч╓к╔И║╪╔╦║╕╔╙╔ж╔╦╔╖╔╞╔х║╕╔о╔С╔и╔К╓Рйд╓╦╓К╓Ё╓х╓к╓Х╓Й║╒<I>lo_open</I>╔Ё╔ч╔С╔и╓╛╢╟н╩╓╥╓©д╬╦Е╓к╤╞ю╘е╙╓к╔К║╪╔К╓Р╪б╧т╓╥╓ч╓╧║ё╓Ё╓н╓©╓А║╒╨г╫И╓к╔о╔С╔и╔К╓кбп╓╥╓ф╡©╓╚╓Р╓╥╓Х╓╕╓х╓╧╓К╓х║╒<I>invalid large obj descriptor(╔И║╪╔╦║╕╔╙╔ж╔╦╔╖╔╞╔х╓н╣╜╫р╩р╓╛итю╣)</I>╓х╓й╓Й╓ч╓╧║ё╓╫╓Л╓г║╒╓Б╓╥║╒╔х╔И╔С╔╤╔╞╔╥╔Г╔С╓Р╩х╓╕╓н╓Рк╨╓Л╓К╓х║╒║й╬╞╓й╓╞╓х╓Б╓ш╓х╓С╓и╓н╩Ч╢ж║кф╞╓╓╓ф╓╓╓©╔Ё║╪╔и╓╛╔╗╔И║╪╔А╔ц╔╩║╪╔╦╓Р╫п╓╧╓н╓г╓╧║ё
-
-<P>╓Б╓╥║╒<small>ODBC</small>╓н╓Х╓╕╓й╔╞╔И╔╓╔╒╔С╔х╔╓╔С╔©║╪╔у╔╖║╪╔╧╓Р╓╙╩х╓╓╓й╓И║╒<tt>auto-commit off</tt>╓РюъдЙ╓╧╓Ки╛мв╓╛╓╒╓К╓╚╓Б╓╥╓Л╓ч╓╩╓С║ё
-<P>
-
-
-<H4><A NAME="4.21">4.21</A>) ╦╫╨ъ╓н╩Ч╧О╓╛╔г╔у╔╘╔К╔х╓х╓й╓К╓Х╓╕╓й╔╚╔И╔Ю╓о╓и╓н╓Х╓╕╓к╓д╓╞╓Й╓ч╓╧╓╚║╘<BR></H4>
-
-<P><i>CURRENT_TIMESTAMP</i>╓Р╩х╓╓╓ч╓╧:
-<PRE>
- CREATE TABLE test (x int, modtime timestamp DEFAULT >CURRENT_TIMESTAMP );
-</PRE>
-<P>
-
-
-<H4><A NAME="4.22">4.22</A>) ╓й╓╪║╒<small>IN</small>╓Р╩х╓╕иШлД╓╓╧Г╓О╓╩╓╛╓х╓ф╓Бцы╓╓╓н╓г╓╧╓╚║╘
-</H4>
-<P>
-╦╫╨ъ║╒Ё╟иТлД╓╓╧Г╓О╓╩╓нЁф╔М╔╕╓к╓д╓╓╓фиШлД╓╓╧Г╓О╓╩╓н╥К╡л╓Р╫Гхж╓к╔╧╔╜╔Ц╔С╓╧╓К╓Ё╓х╓к╓Х╓Й║╒иШлД╓╓╧Г╓О╓╩╓РЁ╟иТлД╓╓╧Г╓О╓╩╓к╥К╧Г╓╥╓ф╓╓╓ч╓╧║ёеЖлл╓о<small>IN</small>╓Р<small>EXIST</small>S╓гцж╓╜╢╧╓╗╓К╓Ё╓х╓г╓╧║╖
-<PRE>
- <STRONG>SELECT *</STRONG>
- FROM tab
- WHERE col1 IN (SELECT col2 FROM TAB2)
-</PRE>
-╓Р║╒цж╓╜╢╧╓╗╓ф║╖
-<PRE>
- SELECT *
- FROM tab
- WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2)
-</PRE>
-╓х╓╥╓ч╓╧║ё
-╓Ё╓ню╘╦б╓о╬╜мХ╓н╔Й╔Й║╪╔╧╓гд╬╓╥╓©╓╓╓х╩в╓ц╓ф╓╓╓ч╓╧║ё
-<P>
-
-<H4><A NAME="4.23">4.23</A>) <i>Ё╟иТ</i>╥К╧Г(<i>outer</i> join)╓о╓и╓н╓Х╓╕╓к╪б╦╫╓╥╓ч╓╧╓╚?<BR></H4>
-<P>
-PostgreSQL 7.1 ╟й╧ъ╓г╓о<small>SQL</small>и╦╫Ю╧╫й╦╓Р╩х╓╕Ё╟иТ╥К╧Г(╔╒╔╕╔©║╪╔╦╔Г╔╓╔С)╓Р╔╣╔щ║╪╔х╓╥╓ч╓╧║ё╓Ё╓Ё╓к║╒нЦбЙ╓╛2╓д╓╒╓Й╓ч╓╧║ё
-
-<pre>
-<STRONG>SELECT *</STRONG>
- FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);</pre>
-╓╒╓К╓╓╓о
-<pre>
-<STRONG>SELECT *</STRONG>
- FROM t1 LEFT OUTER JOIN t2 USING (col);</pre>
-
-╓Ё╓Л╓И╓н╬щд╖е╙╓йлД╓╓╧Г╓О╓╩╓г╓о t1.col ╓Р t2.col ╓х╥К╧Г╓╥╓ф║╒t1 ╓н╥К╧Г╓╣╓Л╓й╓╚╓ц╓©╔М╔╕(t2 ╓х╟Лцв╓╥╓й╓╚╓ц╓©╔М╔╕)╓Бйж╓╥╓ф╓╓╓ч╓╧║ё<small>RIGHT</small> ╥К╧Г╓о t2 ╓н╥К╧Г╓╣╓Л╓й╓╚╓ц╓©╔М╔╕╓Р╡ц╓╗╓К╓г╓╥╓Г╓╕║ё<small>FULL</small> ╥К╧Г╓о║╒╟Лцв╓╥╓©╔М╔╕╓к t1 ╓х t2 ╓╚╓И╓о╥К╧Г╓╣╓Л╓й╓╚╓ц╓©╔М╔╕╓Рйж╓╧╓г╓╥╓Г╓╕║ё<small>OUTER</small> ╓х╓╓╓╕╦юму╓о╔╙╔в╔╥╔Г╔С╓г <small>LEFT</small>, <small>RIGHT</small>, ╓ч╓©╓о <small>FULL</small> ╓й╓и╓н╥К╧Г╓Р╡╬дЙ╓╣╓Л╓ф╓╓╓ч╓╧║ё
-
-╟йа╟╓н╔Й╔Й║╪╔╧╓г╓оЁ╟иТ╥К╧Г(outer join)╓Р<small>UNION</small> ╓х <small>NOT IN</small> ╓Р╩х╓ц╓ф╔╥╔ъ╔Е╔Л║╪╔х╓г╓╜╓ч╓╧║ё
-╓©╓х╓╗╓п║╒<i>tab1</i> ╓х <i>tab2</i> ╓Р╥К╧Г╓╧╓К╓х╓╜╓о║╒╪║╓нлД╓╓╧Г╓О╓╩╓гфС╓д╓н╔ф║╪╔ж╔К╓Р<i>Ё╟иТ</i>╥К╧Г╓╥╓ч╓╧║ё
-
-<PRE>
- SELECT tab1.col1, tab2.col2
- FROM tab1, tab2
- WHERE tab1.col1 = tab2.col1
-<STRONG>UNION ALL</STRONG>
- SELECT tab1.col1, NULL
- FROM tab1
- WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
- ORDER BY col1
-</PRE>
-
-<P>
-<H4><A NAME="4.24">4.24</A>) йё©Т╓н╔г║╪╔©╔ы║╪╔╧╓Р╩х╓╕лД╓╓╧Г╓О╓╩╓о╓и╓н╓Х╓╕╓к╓╧╓Л╓п╓г╓╜╓ч╓╧╓╚║╘<BR></H4>
-
-<P>
-╦╫╧т(current)╓Р╫Э╓╓╓ф║╒╔г║╪╔©╔ы║╪╔╧╓ь╓нлД╓╓╧Г╓О╓╩йЩк║╓о╓╒╓Й╓ч╓╩╓С║ё╓х╓╓╓╕╓н╓БPostgreSQL╓╛╔г║╪╔©╔ы║╪╔╧╩емм╓н╔╥╔╧╔ф╔Ю╔╚╔©╔М╔╟╓Рфи╓ъ╧Ч╓Ю╓©╓А╓г║╒╓╫╓Ё╓к╓о║╒╓©╓х╓╗╓╫╓н╓у╓Й╓Р╓╧╓К╓ю╓╠╓к╓╥╓М║╒╔г║╪╔©╔ы║╪╔╧╓Р╠ш╓╗╓флД╓╓╧Г╓О╓╩╓Р╓╧╓К╓╧╓ы╓╛╓╒╓Й╓ч╓╩╓С║ё
-<P>
-╓Б╓а╓М╓С║╒╔╞╔И╔╓╔╒╔С╔х╓оф╠╩Ч╓к╟ш╓й╓Кйё©Т╓н╔г║╪╔©╔ы║╪╔╧╓ьюэбЁ╓╥╓ф╓╫╓Ё╓к╓╒╓К╬ПйС╓Р╔ч║╪╔╦╓╧╓К╓Ё╓х╓о╓г╓╜╓ч╓╧║ё
-
-<P>
-<H4><A NAME="4.25">4.25</A>) ╢ь©Т╓гйё©Т╓н╔М╔╕╓ч╓©╓о╔╚╔И╔Ю╓Рйж╓╧╓к╓о╓и╓╕╓╥╓ч╓╧╓╚║╘<BR></H4>
-
- <P>╓Б╓╥║╒PL/pgSQL ╢ь©Т╓г<i>refcursors</i>╓Р╩х╓╕╓х╥К╡л╓нах╓Рйж╓╧╓Ё╓х╓╛╓г╓╜╓ч╓╧║ё<a
-href="http://developer.postgresql.org/docs/postgres/plpgsql-cursors.html">
-http://developer.postgresql.org/docs/postgres/plpgsql-cursors.html</a> ╓н
-23.7.3.3 юА╓Р╓╢мВ╡╪╓╣╓╓║ё</P>
-
-
-<P>
-<HR>
-<H2><CENTER>PostgreSQL╓нЁхд╔╓к╓д╓╓╓ф╓н╪алД</CENTER></H2>
-<P>
-
-<H4><A NAME="5.1">5.1</A>) ╪╚й╛╓г╫Я╓╓╓©╔Ф║╪╔╤дЙ╣а╢ь©Т╓Р psql ╓нцФ╓г╪б╧т╓╧╓К╓х╔Ё╔╒║╕╔ю╔С╔в╓╥╓ф╓╥╓ч╓╕╓н╓о╓й╓╪╓г╓╧╓╚║╘
-</H4>
-
-<P> лДбЙ╓о©╖║╧╓х╧м╓╗╓И╓Л╓ч╓╧╓╛║╒╓ч╓╨╨г╫И╓к║╒╨Ню╝╓╥╓©╔Ф║╪╔╤дЙ╣а╢ь©Т╓Рц╠фх╓н╔ф╔╧╔х╔в╔М╔╟╔И╔Ю╓к╓╥╓ф╩Н╓╥╓ф╓ъ╓ф╡╪╓╣╓╓║ё
-
-
-<P>
-<H4><A NAME="5.2">5.2</A>) PostgreSQL мя╓к╫Я╓╓╓©╓а╓Г╓ц╓хаге╗╓й©╥╓╥╓╓╥©╓Д╢ь©Т╓РдС╤║╓╥╓ф╔в╔М╔╦╔╖╔╞╔х╓к╧в╦╔╓╥╓©╓╓╓н╓г╓╧╓╛║╘
-</H4>
-
-<P> Ё╖╓╣╓С╓н╧т╓й╓ц╓©Ёхд╔╓Р║╒<I>pgsql-hackers</I> ╔А║╪╔Й╔С╔╟║╕╔Й╔╧╔х╓каВ╓ц╓ф╓╞╓ю╓╣╓╓║ё╓╫╓╥╓ф║╒╓Ф╓╞╓Ф╓╞╓о╓╫╓╕╓╥╓©Ёхд╔╓╛ <I>contrib/</I> ╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓нцФ╓кфЧ╓К╓Ё╓х╓к╓й╓К╓г╓╥╓Г╓╕║ё
-
-<P>
-<H4><A NAME="5.3">5.3</A>) ╔©╔в╔К╓Рйж╓╧ C╦ю╦Л╓н╢ь©Т╓о╓и╓н╓Х╓╕╓к╫Я╓╜╓ч╓╧╓╚║╘
-</H4>
-
-<P> ╦╤мЩе╙╓к╓о╡дг╫╓г╓╧╓╛║╒╓Ё╓Л╓к╓о╣Ф╤к╓нл╞╣╩╓Рмв╓╥╓ч╓╧╓н╓г║╒цЬ╪т╓н╓ч╓О╓Й╓г╓ол╓╓юц╞╓Б╓Д╓ц╓©╓Ё╓х╓╛╓╒╓Й╓ч╓╩╓С║ё
-
-<P><H4><A NAME="5.4">5.4</A>) ╔╫║╪╔╧║╕╔у╔║╔╓╔К╓Рйя╧╧╓╥╓ч╓╥╓©║ё╨ф╔Ё╔С╔я╔╓╔К╓╥╓ф╓Бйя╡╫╓╛╦╚╓И╓Л╓й╓╓╓н╓о╓й╓╪╓г╓╧╓╚║╘
-</H4>
-
-<P> ╓╓╓╞╓д╓╚╓н <I>Makefile</I> ╓╛╔╓╔С╔╞╔К║╪╔и║╕╔у╔║╔╓╔К╓кбп╓╥╓фе╛юз╓й╟мб╦╢ь╥╦╓Р╩Щ╓ц╓ф╓╓╓ч╓╩╓С║ё<I>make clean</I> ╓Р╓╥╓ф╓╚╓И╓Б╓╕╟Леы <I>make</I> ╓Р╧т╓й╓О╓й╓╞╓ф╓о╓й╓Й╓ч╓╩╓С║ё╓Б╓╥║╒<small>GCC</small> ╓Р╓╙╩х╓╓╓г╓╒╓Л╓п <i>configure</i> ╓н <i>--enable-depend</i> ╔╙╔в╔╥╔Г╔С╓Р╩х╓ц╓ф║╒╔Ё╔С╔я╔╓╔И╓к╟мб╦╢ь╥╦╓Р╪╚ф╟е╙╓кд╢╓ы╓╣╓╩╓К╓Ё╓х╓Б╓г╓╜╓ч╓╧║ё
-
-
-<HR>
-
-<small><PRE>
-[лУцМ║╖
- фЭкэ╦Лхг╓ню╫╨Н╓к╓д╓╓╓ф╓о╟й╡╪╓ндл╓Й╓г╓╧║ё
-
- ╨г╫╙╧╧©╥фЭ: 2002г╞05╥Н08фЭ
- кщлУ╪т: ╥╛б╪ ╫А (<A HREF="mailto:juk@postgresql.jp">Jun Kuwamura &lt;juk@postgresql.jp&gt;</A>)
-
- ╓Ё╓нFAQ╓ноблУ╓н╨Ню╝╓к╓╒╓©╓Й╤╗но╓Р╓╥╓ф╓╞╓ю╓╣╓ц╓©йЩ║╧(╥и╬н╓он╛╓╣╓╩╓ф╓╓╓©╓ю╓╜╓ч╓╧):
-
- едцГ л╜(<A HREF="mailto:Tanaka.Minoru@keiken.co.jp">Minoru Tanaka &lt;Tanaka.Minoru@keiken.co.jp&gt;</A>)
- юп╟Ф цёив(<A HREF="mailto:t-ishii@sra.co.jp">Tatsuo Ishii &lt;t-ishii@sra.co.jp&gt;</A>)
- СНфё цн©м(<A HREF="mailto:tomos@elelab.nsc.co.jp">Tomohito Saitoh &lt;tomos@elelab.nsc.co.jp&gt;</A>)
- го╬Л х╔(<A HREF="mailto:baba@kusastro.kyoto-u.ac.jp">Hajime Baba &lt;baba@kusastro.kyoto-u.ac.jp&gt;</A>)
- ╡╛кэ ╟Л╧╛(<A HREF="mailto:kokamoto@itg.hitachi.co.jp">Kazuyuki Okamoto &lt;kokamoto@itg.hitachi.co.jp&gt;</A>)
- ╬╝©Ш ╬╪╟Л(<A HREF="mailto:s-kosuge@str.hitachi.co.jp">Shoichi Kosuge &lt;s-kosuge@str.hitachi.co.jp&gt;</A>)
- ╩Ё╡╪ ╣аг╥(<A HREF="mailto:dica@eurus.dti.ne.jp">Yoshiyuki Yamashita &lt;dica@eurus.dti.ne.jp&gt;</A>)
- ╤╜ ©©бюо╨(<A HREF="mailto:s_sakai@mxn.mesh.ne.jp">Sintaro Sakai &lt;s_sakai@mxn.mesh.ne.jp&gt;</A>)
- ю╦╠ш ╬╩╦й(<A HREF="mailto:ogochan@zetabits.com">Masami Ogoshi &lt;ogochan@zetabits.com&gt;</A>)
- юпюН ╫с╧т(<A HREF="mailto:tosiyuki@gol.com">Toshiyuki Ishikawa &lt;tosiyuki@gol.com&gt;</A>)
- кэед лп╧╜(<A HREF="mailto:fwif0083@mb.infoweb.ne.jp">Shigehiro Honda &lt;fwif0083@mb.infoweb.ne.jp&gt;</A>)
- ╓╩╓╩ ╓╦╓Е╓С(<A HREF="mailto:sesejun@linet.gr.jp">Jun Sese &lt;sesejun@linet.gr.jp&gt;</A>)
- ©юц╚ ╠я╧╖(<A HREF="mailto:hkamiya@catvmics.ne.jp">Hidetaka Kamiya &lt;hkamiya@catvmics.ne.jp&gt;</A>)
-
- ╓Р╓о╓╦╓А║╒╔щ╔╧╔х╔╟╔Л╔╧╓к╢ь╓╧╓КоцбЙк╜иы╓й<A HREF="http://www.sra.co.jp/people/t-ishii/PostgreSQL/ML/info.html">фЭкэ╦Л╔щ╔╧╔х╔╟╔Л╔╧║╕╔А║╪╔Й╔С╔╟╔Й╔╧╔х</A>║╒
- облУ╓н╓╜╓ц╓╚╓╠╓Р╨Н╓ц╓ф╓╞╓Л╓© <A HREF="http://jf.linux.or.jp/">JF(Linux Japanese FAQ Mailing List)╔в╔М╔╦╔╖╔╞╔х</A>║╒╓╫╓нб╬║╒
- д╬юэ╓╒╓К╓╓╓о╢жюэе╙╓к╓╚╓╚╓О╓ц╓ф╓╓╓К╓╧╓ы╓ф╓н╔╙║╪╔в╔С╔╫║╪╔╧╔Ё╔ъ╔Е╔к╔ф╔ё║╪╓н
- Ё╖╓╣╓С╓к╢╤╪у╓╥╓ч╓╧║ё
-
-
- фЭкэ╦Лхг╓н╓Ё╓нй╦╫Я╓о║╒╟й╡╪╓╚╓И╓Б╓©╓и╓Л╓ч╓╧║ё
- <A HREF="http://www.rccm.co.jp/~juk/pgsql/">http://www.rccm.co.jp/~juk/pgsql/</A>(FAQоблУ PostgreSQL ╓к╓д╓╓╓ф╓Х╓╞╓╒╓К╪алД)
- <A HREF="http://www.linux.or.jp/JF/">http://www.linux.or.jp/JF/</A>(PostgreSQL-FAQ.j)
- <A HREF="http://www.sra.co.jp/people/t-ishii/PostgreSQL/doc-jp/">http://www.sra.co.jp/people/t-ishii/PostgreSQL/doc-jp/</A>
-
- ╓й╓╙║╒╓Ё╓ноблУ╓к╢ь╓╧╓К╓╢╟у╦╚╓о(<A HREF="mailto:juk@postgresql.jp">juk@postgresql.jp</A>)╓ч╓г╓╙╢С╓╩╡╪╓╣╓╓║ё
-]
-</PRE></small>
-
-</BODY>
-</HTML>
diff --git a/doc/src/FAQ/FAQ_polish.html b/doc/src/FAQ/FAQ_polish.html
deleted file mode 100644
index 56a052cf66f..00000000000
--- a/doc/src/FAQ/FAQ_polish.html
+++ /dev/null
@@ -1,1448 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD html 4.01 transitional//EN">
-
-<HTML>
- <!-- DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN" -->
- <!-- HTML -->
-
- <HEAD>
- <META name="generator" content="HTML Tidy, see www.w3.org">
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
- <TITLE>PostgreSQL FAQ</TITLE>
- </HEAD>
-
- <BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000"
- alink="#0000ff">
-
- <H1>Frequently Asked Questions (FAQ) o PostgreSQL</H1>
-
- <P>Ostatnia aktualizacja: Thu Apr 18 00:44:51 EDT 2002</P>
-
- <P>Obecny maintainer: Bruce Momjian (<A href=
- "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
- </P>
- <P>TЁumaczenie: Marcin Mazurek (<A href=
- "mailto:m.mazurek@netsync.pl">m.mazurek@netsync.pl</A>)<BR>
- </P>
-
-
- <P>Najbardziej aktualn╠ wersjЙ tego dokumentu mo©na znale╪Ф pod
- adresem:
- <A href=
- "http://www.Postgresql.org/docs/faq-english.html">http://www.PostgreSQL.org/docs/faq-english.html</A>.</P>
-
- <P>Odpowiedzi na pytania dotycz╠ce konkretnych systemСw operacyjnych
- mo©na znale╪Ф pod adresem:
- <A href=
- "http://www.PostgreSQL.org/users-lounge/docs/faq.html">http://www.PostgreSQL.org/users-lounge/docs/faq.html</A>.</P>
- <HR>
-
- <H2 align="center">Pytania ogСlne</H2>
- <A href="#1.1">1.1</A>) Co to jest PostgreSQL? Jak to wymawiaФ?<BR>
- <A href="#1.2">1.2</A>) Jak╠ licencj╠ chroniony jest PostgreSQL?<BR>
- <A href="#1.3">1.3</A>) Na jakich systemach Unixowych dziaЁa
- PostreSQL?<BR>
- <A href="#1.4">1.4</A>) Na jakich nie-Unixowych systemach dziaЁa
- PostgreSQL?<BR>
- <A href="#1.5">1.5</A>) Sk╠d mogЙ ╤ci╠gn╠Ф PostgreSQL?<BR>
- <A href="#1.6">1.6</A>) Gdzie mo©na szukaФ wsparcia technicznego?<BR>
- <A href="#1.7">1.7</A>) Jaka jest ostatnia dostЙpna wersja?<BR>
- <A href="#1.8">1.8</A>) Jaka dokumentacja jest dostЙpna?<BR>
- <A href="#1.9">1.9</A>) Gdzie mogЙ znale╪Ф informacjЙ o znanych
- bЁЙdach czy brakuj╠cych rozwi╠zanich?<BR>
- <A href="#1.10">1.10</A>) Jak mogЙ siЙ nauczyФ <SMALL>SQL</SMALL>?<BR>
- <A href="#1.11">1.11</A>) Czy PostgreSQL ma rozwi╠zany problem Y2K?<BR>
- <A href="#1.12">1.12</A>) Jak mogЙ siЙ przyЁ╠czyФ do grupy osСb
- bezpo╤rednio pracuj╠cych nad rozwojem PostgreSQL?<BR>
- <A href="#1.13">1.13</A>) Jak mogЙ zgЁaszaФ bЁЙdy?<BR>
- <A href="#1.14">1.14</A>) Jak mo©na porСwnaФ PostgreSQL w stosunku
- do innych <SMALL>DBMS</SMALL>?<BR>
- <A href="#1.15">1.15</A>) W jaki sposСb mogЙ wesprzeФ finansowo
- PostgreSQL?<BR>
-
- <H2 align="center">Pytania u©ytkownikСw</H2>
- <A href="#2.1">2.1</A>) Czy s╠ jakie╤ driwery <SMALL>ODBC</SMALL> dla
- PostgreSQL?<BR>
- <A href="#2.2">2.2</A>) Jakie istniej╠ narzЙdzia pozwalaj╠ce na dostЙp do
- PostgreSQL przez www?<BR>
- <A href="#2.3">2.3</A>) Czy istnieje jakie╤ GUI dla PostgreSQL?
- NarzЙdzie do raportowania? Interfejs dla "embedded query language"?<BR>
- <A href="#2.4">2.4</A>) Za pomoc╠ jakich jЙzykСw programowania mo©na
- siЙ komunikowaФ z PostgreSQL?<BR>
-
-
- <H2 align="center">Pytania administratora</H2>
- <A href="#3.1">3.1</A>) Jak mogЙ zainstalowaФ PostgreSQL w innej
- lokalizacji ni© <I>/usr/local/pgsql</I>?<BR>
- <A href="#3.2">3.2</A>) Podczas startu <I>postmaster'a</I>,
- otrzymujЙ komunikat:
- <I>Bad System Call</I> lub "core dumped". Dlaczego?<BR>
- <A href="#3.3">3.3</A>) Podczas startu <I>postmaster'a</I>,
- otrzymujЙ komunikato bЁЙdzie: <I>IpcMemoryCreate</I>. Dlaczego?<BR>
- <A href="#3.4">3.4</A>) Podczas startu <I>postmaster'a</I>,
- otrzymujЙ komunikat o bЁЙdzie: <I>IpcSemaphoreCreate</I>. Dlaczego?<BR>
- <A href="#3.5">3.5</A>) W jaki sposСb mogЙ kontrolowaФ poЁ╠czenia z
- innych hostСw?<BR>
- <A href="#3.6">3.6</A>) Jak powinienem skonfigurowaФ system baz
- danych aby uzyskaФ lepsz╠ wydajno╤Ф?<BR>
- <A href="#3.7">3.7</A>) Jakie s╠ mo©liwo╤ci wyszukiwania bЁЙdСw?<BR>
- <A href="#3.8">3.8</A>) Sk╠d siЙ bierze komunikat: <I>"Sorry, too many
- clients"</I> podczas prСby poЁ╠czenia siЙ z baz╠ danych?<BR>
- <A href="#3.9">3.9</A>) Co to za pliki typu <I>pg_sorttempNNN.NN</I>
- , ktСre znajduj╠ siЙ w katalogu z plikami bazy danych?<BR>
-
-
- <H2 align="center">Pytania dotycz╠ce u©ytkowania</H2>
- <A href="#4.1">4.1</A>) Jaka jest rС©nica pomiЙdzy kursorami
- binarnymi (binary cursors) i zwykЁymi kursorami (normal cursors)?<BR>
- <A href="#4.2">4.2</A>) Jak mogЙ pobraФ za pomoc╠ <SMALL>SELECT</SMALL>
- jedynie kilka pierwszych wynikСw zapytania?<BR>
- <A href="#4.3">4.3</A>) Jak mogЙ uzyskaФ listЙ wszystkich tabel czy
- innych rzeczy pod <I>psql</I>?<BR>
- <A href="#4.4">4.4</A>) Jak usun╠Ф kolumnЙ z tabeli?<BR>
- <A href="#4.5">4.5</A>) Jaki jest maksymalny rozmiar dla rzЙdu,
- tabeli i bazy danych?<BR>
- <A href="#4.6">4.6</A>) Jak du©o miejsca w bazie danych jest
- potrzebne aby przechowaФ dane ze zwyczajnego pliku tekstowego?<BR>
- <A href="#4.7">4.7</A>) Jak mogЙ sprawdziФ jakie tabele, klucze,
- bazy danych i u©ytkownicy s╠ utworzeni?<BR>
- <A href="#4.8">4.8</A>) Moje zapytania s╠ wolne lub nie u©ywaj╠
- kluczy. Dlaczego?<BR>
- <A href="#4.9">4.9</A>) Jak mogЙ sprawdziФ w jakis sposСb "query
- optimizer" wykonuje moje zapytanie?<BR>
- <A href="#4.10">4.10</A>) Co to jest "R-tree index"?<BR>
- <A href="#4.11">4.11</A>) Co to jest "Genetic Query Optimizer"?<BR>
- <A href="#4.12">4.12</A>) Jak mogЙ u©ywaФ wyra©eЯ regularnych w
- zapytaniach i zapytaЯ case-insensitive w wyra©eniach regularnych?
- Jak korzystaФ z indeksСw dla zapytaЯ case-insensitive?<BR>
- <A href="#4.13">4.13</A>) Jak sprawdziФ w zapytaniu czy pole ma
- warto╤Ф <SMALL>NULL</SMALL>?<BR>
- <A href="#4.14">4.14</A>) Jaka jest rС©nica pomiЙdzy rС©nymi typami
- tekstowymi (character types)?<BR>
- <A href="#4.15.1">4.15.1</A>) Jak mogЙ utworzyФ pole typu int, ktСre samo
- zwiЙksza swoj╠ warto╤Ф?<BR>
- <A href="#4.15.2">4.15.2</A>) Jak pobraФ warto╤Ф pola typu
- <SMALL>SERIAL</SMALL> po wykonaniu insert'u?<BR>
- <A href="#4.15.3">4.15.3</A>) Czy u©ycie <I>currval()</I> i
- <I>nextval()</I> nie doprowadzi do "race condition" z innymi
- u©ytkownikami?<BR>
- <A href="#4.15.4">4.15.4</A>) Dlaczego numery sekwencji nie s╠
- ponownie u©ywane przy przerwaniu transakcji?
- Sk╠d siЙ bior╠ luki w numerowaniu kolumny tabeli sekwencjami/SERIALem?<BR>
- <A href="#4.16">4.16</A>) Co to jest <SMALL>OID</SMALL>? Co to jest
- <SMALL>TID</SMALL>?<BR>
- <A href="#4.17">4.17</A>) Jakie jest znaczenie niektСrych terminСw w
- PostgreSQL?<BR>
- <A href="#4.18">4.18</A>) Sk╠d bierze siЙ ten bЁ╠d: <I>"ERROR: Memory
- exhausted in AllocSetAlloc()"</I>?<BR>
- <A href="#4.19">4.19</A>) Jak sprawdziФ jakiej wersji PostgreSQL
- u©ywam?<BR>
- <A href="#4.20">4.20</A>) Dlaczego operacje, ktСre wykonujЙ na
- du©ych obiektach "large-object" zwracaj╠ komunikat:
- <I>"invalid large obj descriptor"</I>?<BR>
- <A href="#4.21">4.21</A>) Jak stworzyФ kolumnЙ ktСrej domy╤ln╠
- warto╤ci╠ bЙdzie bie©╠cy czas?<BR>
- <A href="#4.22">4.22</A>) Dlaczego zapytania u©ywaj╠ce
- <CODE><SMALL>IN</SMALL></CODE> s╠ takie wolne?<BR>
- <A href="#4.23">4.23</A>) Jak wykonaФ "outer join"?<BR>
- <A href="#4.24">4.24</A>) Jak wykonywaФ zapytanie u©ywaj╠ce kilku
- baz danych jednocze╤nie?<BR>
- <A href="#4.25">4.25</A>) Jak zwrСciФ w funkcji wiele rzЙdСw lub
- kolumn?<BR>
-
-
- <H2 align="center">Rozwijanie PostgreSQL</H2>
- <A href="#5.1">5.1</A>) NapisaЁem wЁasn╠ funkcjЙ. Kiedy u©yjЙ jej w
- <I>psql</I>, program zrzuca pamiЙФ (dump core)?<BR>
- <A href="#5.2">5.2</A>) Jak mogЙ dodaФ/zgЁosiФ nowe typy czy funkcje
- do PostgreSQL?<BR>
- <A href="#5.3">5.3</A>) Jak napisaФ funkcjЙ C zwracaj╠c╠ krotkЙ
- (tuple)?<BR>
- <A href="#5.4">5.4</A>) ZmieniЁem plik ╪rСdЁowy. Dlaczego po
- rekompilacji nie widaФ zmiany?<BR>
-
- <HR>
-
- <H2 align="center">Pytania ogСlne</H2>
-
- <H4><A name="1.1">1.1</A>) Co to jest PostgreSQL? Jak to wymawiaФ?</H4>
-
- <P>PostgreSQL wymawia siЙ <I>Post-Gres-kju-el</I>.</P>
-
- <P>PostgreSQL jest rozszerzeniem systemu zarz╠dzania bazami danych -
- POSTGRES, kolejn╠ generacj╠ rozwojowego prototypu <SMALL>DBMS</SMALL>.
- Mimo, ©e PostgreSQL zachowaЁ bardzo dobrze zbudowany model danych
- (data model) i bogaty zestaw typСw danych POSTGRES'a, zast╠piЁ
- PostQuel'owy jЙzyk zapytaЯ z rozbudowanym podzbiorem jЙzyka
- <SMALL>SQL</SMALL>. PostgreSQL jest oprogramowaniem darmowym
- z dostЙpnymi caЁymi ╪rСdЁami.
- </P>
-
- <P>RozwСj PostgreSQL jest prowadzony przez grupЙ ludzi z Internetu,
- komunikuj╠cych siЙ poprzez mailowe listy dyskusyjne PostgreSQL.
- Obecnym koordynatorem jest Marc G. Fournier (<A href=
- "mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A>). (Zobacz
- poni©ej jak siЙ przyЁ╠czyФ). Ta grupa ludzi jest odpowiedzialna za
- caЁy rozwСj PostgreSQL.</P>
-
- <P>Autorami PostgreSQL 1.01 byli Andrew Yu and Jolly Chen.
- Wiele innych osСb pomogЁo przy portowaniu, testowaniu, debugowaniu, i
- rozwijaniu kodu. Oryginalny kod Postgresa, na ktСrym zostaЁ oparty
- PostgreSQL, byЁ wysiЁkiem studentСw oraz pracownikСw pracuj╠cych pod
- kierownictwem profesora Michael'a Stonebraker'a z University of
- California w Berkeley.</P>
-
- <P>Oryginaln╠ nazw╠ oprogramowania w Berkeley byЁ Postgres. Po
- dodaniu obsЁugi <SMALL>SQL</SMALL> w 1995, nazwa zostaЁa zmieniona
- na Postgres95. Pod koniec roku 1996 nazwa zostaЁa zmieniona na
- PostgreSQL.</P>
-
- <H4><A name="1.2">1.2</A>) Jak╠ licencj╠ chroniony jest
- PostgreSQL?</H4>
-
- <P>PostgreSQL objЙty jest nastЙpuj╠c╠ licencj╠:</P>
-
- <P>PostgreSQL Data Base Management System</P>
-
- <P>Portions copyright (c) 1996-2002, PostgreSQL Global Development
- Group Portions Copyright (c) 1994-6 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>
-
- <P>Tekst powy©ej, jest klasyczn╠ licencj╠ BSD.
- Nie posiada ona ©adnych restrykcji co do u©ywania kodu ╪rСdЁowego.
- Podoba nam siЙ i nie zamierzamy jej zmieniaФ.
-
- <H4><A name="1.3">1.3</A>) Na jakich systemach Unixowych dziaЁa
- PostreSQL?</H4>
-
- <P>PostgreSQL powinien dziaЁaФ na wszystkich nowych Unix-podobnych
- systemach. Platformy, ktСre zostaЁy szczegСЁowo przetestowane podczas
- publikowania PostgreSQL s╠ wymienione w dokumentacji opisuj╠cej
- instalacjЙ.</P>
-
- <H4><A name="1.4">1.4</A>) Na jakich nie-Unixowych systemach dziaЁa
- PostgreSQL?</H4>
-
- <P><STRONG>Klient</STRONG></P>
-
- <P>Mo©liwa jest kompilacja bibliteki C <I>libpq</I> C, psql oraz
- innych interfejsСw i uruchamianie ich na platformie MS Windows. W tym
- wypadku klient jest uruchamiany na MS Windows a z serwerem komunikuje siЙ
- poprzez TCP/IP. Serwer mo©e dziaЁaФ na dowolnej wspieranej platformie
- Unixowej. Plik <I>win31.mak</I> jest doЁ╠czony
- do ╪rСdeЁ, aby mo©na byЁo stworzyФ bibliotekЙ <I>libpq</I> oraz
- program <I>psql</I> dziaЁaj╠ce w ╤rodowisku Win32. PostgreSQL mo©e siЙ
- tak©e komunikowaФ z klientami <SMALL>ODBC</SMALL>.</P>
-
- <P><STRONG>Serwer</STRONG></P>
-
- <P>Serwer mo©e byФ uruchamiany na Windows NT i Win2k u©ywaj╠c
- bibliotek Cygwin, Cygnus Unix/NT. W pliku <I>pgsql/doc/FAQ_MSWIN</I>
- znajduj╠cym siЙ w ╪rСdЁach lub pod adresem: <A href=
- "http://www.postgresql.org/docs/faq-mswin.html">MS Windows FAQ</A>
- na naszych stronach. Nie planujemy tworzyФ portu przeznaczonego
- docelowo dla platformy Microsoft.</P>
-
- <H4><A name="1.5">1.5</A>) Sk╠d mo©na ╤ci╠gn╠Ф PostgreSQL?</H4>
-
- <P>GЁСwny serwer ftp z dostЙpem "anonymous" dla PostgreSQL znajduje
- siЙ <A href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>.
- je╤li szukasz mirrorСw sprawd╪ nasz╠ gЁСwn╠ stronЙ www.<P>
-
- <H4><A name="1.6">1.6</A>) Gdzie mo©na szukaФ wsparcia technicznego?</H4>
-
- <P>Adres gЁСwnej listy mailowej: <A href=
- "mailto:pgsql-general@PostgreSQL.org">pgsql-general@PostgreSQL.org</A>.
- Jest ona przeznaczona dyskusjom dotycz╠cym spraw zwi╠zanych z PostgreSQL.
- ╞eby zapisac siЙ na listЙ, wy╤lij email z nastЙpuj╠cymi liniami w
- tre╤ci maila (nie w temacie):</P>
-<PRE>
- subscribe
- end
-</PRE>
-
- <P>na adres: <A href=
- "mailto:pgsql-general-request@PostgreSQL.org">pgsql-general-request@PostgreSQL.org</A>.</P>
-
- <P>DostЙpna jest tak©e lista wysyЁaj╠ca digesty. Aby zapisaФ siЙ na
- ni╠, wy╤lij email na adres:
- <A href=
- "mailto:pgsql-general-digest-request@PostgreSQL.org">pgsql-general-digest-request@PostgreSQL.org</A>
- z tre╤ci╠ maila zawieraj╠c╠:</P>
-<PRE>
- subscribe
- end
-</PRE>
- Digesty s╠ wysyЁane do czЁonkСw listy, kiedy na gЁСwn╠ listЙ dotrze ok
- 30k wiadomo╤ci.
-
- <P>DostЙpna jest tak©e lista po╤wiЙcona bЁЙdom znalezionym w
- PostgreSQL. Aby zapisaФ siЙ na ni╠ wy╤lij email na adres:
- <A href=
- "mailto:pgsql-bugs-request@PostgreSQL.org">pgsql-bugs-request@PostgreSQL.org</A>
- z tre╤ci╠ maila zawieraj╠c╠:</P>
-<PRE>
- subscribe
- end
-</PRE>
- Lista po╤wiЙcona dyskusjom developerСw jest dostЙpna pod adresem:
- <A href=
- "mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</A>
- Aby siЙ na ni╠ zapisaФ wy╤lij na jej adres mail z tre╤ci╠:
-<PRE>
- subscribe
- end
-</PRE>
-
- <P>Dodatkowe informacje o listach mailowych dotycz╠cych PostgreSQL
- mo©na znale╪Ф na stronach WWW PostgreSQL pod adresem:</P>
-
- <BLOCKQUOTE>
- <A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A>
- </BLOCKQUOTE>
-
- <P>W sieci EFNet istnieje kanaЁ IRC <I>#PostgreSQL</I>. Ja, do
- poЁ╠czenia siЙ z kanaЁem u©ywam Unixowego polecenia <CODE>irc -c
- '#PostgreSQL' "$USER" irc.phoenix.net.</CODE></P>
-
- <P>Lista firm oferuj╠cych wsparcie na zasadach komercyjnych znajduje
- siЙ pod adresem: <A href=
- "http://www.postgresql.org/users-lounge/commercial-support.html">http://www.postgresql.org/users-lounge/commercial-support.html</A>.</P>
-
- <H4><A name="1.7">1.7</A>) Jaka jest ostatnia dostЙpna wersja?</H4>
-
- <P>Ostatnia dostЙpna wersja PostgreSQL to 7.2.1.</P>
-
- <P>Planujemy publikowanie kolejnych wersji co cztery miesi╠ce.</P>
-
- <H4><A name="1.8">1.8</A>) Jaka dokumentacja jest dostЙpna?</H4>
-
- <P>Kilka manuali, stron podЙcznika man, oraz kilka przykЁadСw do
- testowania s╠ zaЁ╠czone w samej dystrybucji. Znajduj╠ siЙ one w
- katalogu <I>/doc</I>. Manual mo©e byФ tak©e przegl╠dany poprzez
- strony www pod adresem <A href=
- "http://www.PostgreSQL.org/users-lounge/docs/">http://www.PostgreSQL.org/users-lounge/docs/</A>.</P>
-
- <P>Istniej╠ tak©e dwie ksi╠©ki dostЙpne online pod adresami
- <A href=
- "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
- i <A href=
- "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>.
- Lista ksi╠©ek o PostgreSQL, ktСre mo©na kupiФ znajduje siЙ pod adresem
- <A href=
- "http://www.postgresql.org/books/">http://www.postgresql.org/books/</A>.
- ZbiСr technicznych artykuЁСw o PostgreSQL znajduje siЙ pod adresem <A
- href=
- "http://techdocs.postgresql.org/">http://techdocs.postgresql.org/</A>.</P>
-
- <P><I>psql</I> posiada kilka wbudowanych poleceЯ \d, za pomoca ktСrych
- mo©na sprawdziФ informacje dotycz╠ce typСw, operatorСw, funkcji,
- aggregatСw itd.</P>
-
- <P>Na naszej stronie mo©na znale╪Ф du©o wiЙcej dokumentacji.</P>
-
- <H4><A name="1.9">1.9</A>) Gdzie mo©na znale╪Ф informacjЙ o znanych
- bЁЙdach czy brakuj╠cych rozwi╠zanich?</H4>
-
- <P>PostgreSQL wspiera rozszerzony podzbiСr standardu <SMALL>SQL</SMALL>-92.
- Sprawd╪ nasz╠ listЙ <A href="http://developer.PostgreSQL.org/todo.php">TODO</A>
- aby znale╪Ф informacjЙ o znanych problemach, brakuj╠cych
- rozwi╠zaniach czy przyszЁych planach.</P>
-
- <H4><A name="1.10">1.10</A>) Jak mogЙ siЙ nauczyФ
- <SMALL>SQL</SMALL>?</H4>
-
- <P>Ksi╠©ka o PostgreSQL <A href=
- "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
- uczy <SMALL>SQL</SMALL>. Jest jeszcze inna ksi╠zka o PostgreSQL
- dostЙpna pod adresem: <A href=
- "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook.</A>
- Dobry tutorial mo©esz znale╪Ф pod adresem: <A href=
- "http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A>
- oraz <A href=
- "http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">
- http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,</A>
- i <A href=
- "http://sqlcourse.com/">http://sqlcourse.com.</A></P>
-
- <P>Jeszcze inny to "Teach Yourself SQL in 21 Days, Second Edition"
- pod adresem: <A href=
- "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A></P>
-
- <P>Wielu z naszych u©ytkownikСw poleca <I>The Practical SQL Handbook</I>,
- Bowman, Judith S., et al., Addison-Wesley. Inni polecaj╠ <I>The
- Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>
-
- <H4><A name="1.11">1.11</A>) Czy PostgreSQL ma rozwi╠zany problem Y2K?</H4>
-
- <P>Tak, bez problemu radzimy sobie z datami po roku 2000 AD, oraz
- przed rokiem 2000 BC.</P>
-
- <H4><A name="1.12">1.12</A>) Jak mogЙ siЙ przyЁ╠czyФ do grupy osСb
- bezpo╤rednio pracuj╠cych nad rozwojem PostgreSQL?</H4>
-
- <P>Przede wszystkim ╤ci╠gnij ostatnie dostЙpne ╪rСdЁa i przeczytaj
- dokumentacjЙ przeznaczon╠ dla developerСw na naszej stronie www lub
- dostЙpn╠ tak©e w ╪rСdЁach PostgreSQL. NastЙpnie zapisz siЙ na listy
- mailowe <I>pgsql-hackers</I> i
- <I>pgsql-patches</I>. I na koniec, wysyЁaj nam wysokiej jako╤ci
- patch'e na listЙ pgsql-patches.</P>
-
- <P>Jest okoЁo 12 osСb, ktСre maj╠ uprawnienia do commit'owania w
- <SMALL>CVS</SMALL> PostgreSQL'a. Ka©dy z nich submitowaЁ tak wiele
- wysokiej jako╤ci patchy, ©e staЁo siЙ niemo©liwe dla obecnych
- commiterСw byФ z nimi na bie©╠co, maj╠c pewno╤Ф ©e s╠ to poprawki
- wysokiej jako╤ci.</P>
-
- <H4><A name="1.13">1.13</A>) Jak mogЙ zgЁaszaФ bЁЙdy?</H4>
-
- <P>Zajrzyj na stronЙ <A href=
- "http://www.postgresql.org/bugs/bugs.php">PostgreSQL BugTool</A>, na
- ktСrej opisane s╠ wskazСwki jak zgЁaszaФ informacje o bЁЙdach.</P>
-
- <P>Zajrzyj tak©e na nasz ftp <A href=
- "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>, aby
- sprawdziФ czy nie ma nowszych wersji PostgreSQL czy patchy.</P>
-
- <H4><A name="1.14">1.14</A>) Jak mo©na porСwnaФ PostgreSQL w stosunku
- do innych <SMALL>DBMS</SMALL>?</H4>
-
- <P>Jest kilka sposobСw oceny softwaru: mo©liwo╤ci,
- wydajno╤Ф, stabilno╤Ф, wsparcie i cena.</P>
-
- <DL>
- <DT><B>Mo©liwo╤ci</B></DT>
-
- <DD>PostgreSQL posiada mo©liwo╤ci dostЙpne w du©ych, komercyjnych
- systemach <SMALL>DBMS</SMALL>, takie jak transakcje, podzapytania
- (subselects), triggery, widoki, klucze obce, referential integrity,
- oraz wyrafinowany system blokowania. Mamy tak©e wЁa╤ciow╤ci ktСrych
- inni nie posiadaj╠, jak typy definiowane przez u©ytkownika,
- dziedziczenie, rules, multi-version concurrency control, ktСra
- redukuje problemy z blokowaiem (lock contention).<BR>
- <BR>
- </DD>
-
- <DT><B>Wydajno╤Ф</B></DT>
-
- <DD>PostgreSQL dziaЁa w dwСch trybach. Standardowy tryb <I>fsync</I>
- zrzuca ka©d╠ zakoЯczon╠ transakcjЙ na dysk, gwarantuj╠c w ten
- sposСb to, ©e je╤li system operacyjny siЙ zawiesi lub straci
- zasilanie wci╠gu kilku nastepnych sekund, wszystkie Twoje dane
- zostan╠ bezpiecznie zapisane na dysku. W tym trybie, jeste╤my
- wolniejsi ni© wiЙkszo╤Ф komercyjnych baz danych, czЙ╤ciowo dlatego
- ©e niewiele z nich wykonuje taki sposСb zapisywania danych jako
- domy╤lne ustawienie.
- W trybie <I>no-fsync</I> z reguЁy jeste╤my szybsi ni© komercyjne
- bazy danych, chocia© w tym wypadku zawieszenie siЙ systemu mo©e
- spowodowaФ uszkodzenie danych. Pracujemy nad tym, aby stworzyФ
- po╤redni tryb, ktСry powoduje mniejsz╠ redukcjЙ wydajno╤ci ni© tryb
- fsync i pozwoli na integralno╤Ф danych w przeci╠gu 30 sekund do
- zaЁamania siЙ systemu operacyjnego.<BR>
- <BR>
- PorСwnuj╠c do MySQL czy innych prostych baz danych, jeste╤my
- wolniejsi przy wykonywaniu insertСw/updatСw przez narzut
- spowodowany przez transakcje. Oczywi╤cie MySQL nie posiada ©adnej z
- wymienionych wy©ej <I>mo©liwo╤ci</I>. PostgreSQL zostaЁ zbudowany
- aby byФ DBMS elastycznym i bogatym z rС©norakie mo©liwo╤ci,
- aczkolwiek dbamy, aby poprawiaФ jego wydajno╤Ф poprzez analizЙ
- kodu ╪rСdЁowego i profilowanie. Ciekawe porСwnanie PostgreSQL i MySQL
- mo©na znale╪Ф pod adresem <A href=
- "http://openacs.org/why-not-mysql.html">http://openacs.org/why-not-mysql.html</A><BR>
-
- <BR>
- Ka©de poЁ╠czenie klienta jest obsЁugiwane przez nas poprzez
- stworzenie nowego procesu Unixowego. Procesy backendu dziel╠
- bufory danych oraz informacjЙ o blokadach. U©ywaj╠c wielu
- procesorСw, rС©ne backendy mog╠ bez problemu dziaЁaФ na rС©nych
- procesorach.<BR>
- <BR>
- </DD>
-
- <DT><B>Stabilno╤Ф</B></DT>
-
- <DD>Zdajemy sobie sprawЙ, ©e <SMALL>DBMS</SMALL> musi byФ stabilny,
- w przeciwnym wypadku jest bez warto╤ci. Staramy siЙ publikowaФ kod
- stabilny, dobrze przetestowany, z minimum mo©liwych bЁЙdСw. Ka©de
- wydanie poprzedza conajmniej miesi╠c testСw wersji beta. Patrz╠c na
- historiЙ wydaЯ PostgreSQL widaФ, ©e dostarczamy stabilne, dobrze
- sprawdzone wersje, ktСre s╠ gotowe do u©ycia w ╤rodowisku
- produkcyjnym. My╤limy, ©e proces publikowania kolejnych wersji
- opracowany przez nas jest jednym z lepszych w╤rСd innych twСrcСw
- oprogramowania bazodanowego.<BR>
- <BR>
- </DD>
-
- <DT><B>Wsparcie</B></DT>
-
- <DD>DziЙki naszym listom mailowym masz dostЙp do du©ej liczby
- programistСw i u©ytkownikСw, ktСrzy pomagaj╠ rozwi╠zaФ ka©dy
- napotkany problem. Chocia© nie mo©emy gwarantowaФ znalezienia
- rozwi╠zania danego problemu, nie rС©nimy siЙ w tym od innych
- komercyjnych systemСw <SMALL>DBMS</SMALL>. Bezpo╤redni kontakt z
- programistami, u©ytkownikami, dokumentacj╠ i kodem ╪rСdЁowym
- sprawiaj╠, ©e wsparcie oferowane PostgreSQL niejednokrotnie jest
- lepsze ni© w innych systemach <SMALL>DBMS</SMALL>. Istnieje tak©e
- mo©liwo╤Ф skorzystania z komercyjnego wsparcia dla tych, ktСrych
- takiego rozwi╠zania potrzebuj╠.
- (Sprawd╪ <A href="#1.6">ten punkt FAQ</A>.)<BR>
- <BR>
- </DD>
-
- <DT><B>Cena</B></DT>
-
- <DD>Korzystanie z PostgreSQL jest darmowe, zarСwno w przypadku
- komercyjnym jak i niekomercyjnym. Mo©esz korzystaФ z naszego kodu
- ╪rСdЁowego w Twoim produkcie bez ©adnych ograniczeЯ, poza tymi
- wymienionymi w licencji BSD przytoczonej powy©ej.<BR>
- <BR>
- </DD>
- </DL>
-
- <H4><A name="1.15">1.15</A>) W jaki sposСb mogЙ wesprzeФ finansowo
- PostgreSQL?</H4>
-
- <P>PostgreSQL korzysta z najlepszej infrastruktury od samego pocz╠tku
- istnienia projektu, tzn. sze╤ciu lat. Wszystko to zawdziЙczamy Marc'owi
- Fournier'owi, ktСry stworzyЁ t╠ infrastrukturЙ i zarz╠dza ni╠ od
- lat.</P>
-
- <P>Wysokiej jako╤ci infrastruktura jest bardzo wa©na dla ka©dego
- projektu open-source. Zapobiega przerwom w rozwoju projektu i
- jakimkolwiek przestojom.</P>
-
- <P>Oczywi╤cie korzystanie z wysokiej jako╤ci infrastruktury nie jest
- tanie. Istnieje wiele rСznych miesiЙcznych, czy jednorazowych
- wydatkСw, ktСre trzeba ponosiФ aby wszystko dziaЁaЁo jak nale©y.
- Je╤li Ty, b╠d╪ Twoja firma mo©e wspomСc finansowo rozwСj PostgreSQL
- odwied╪ adres: <A href=
- "http://www.pgsql.com/pg_goodies">http://www.pgsql.com/pg_goodies</A>
- gdzie opisane jest jak to zrobiФ.</P>
-
- <P>Chocia© na stronie wspomniana jest nazwa PostgreSQL Inc, "datki"
- s╠ przeznaczone jedynie na rozwСj projektu PostgreSQL i nie s╠
- przeznaczane na finansowanie jakiejkolwiek firmy. Je╤li wolisz,
- mo©esz wysЁaФ czek na adres kontaktowy.</P>
- <HR>
-
- <H2 align="center">User Client Questions</H2>
-
- <H4><A name="2.1">2.1</A>) Czy s╠ jakie╤ driwery <SMALL>ODBC</SMALL> dla
- PostgreSQL?</H4>
-
- <P>DostЙpne s╠ dwa driwery <SMALL>ODBC</SMALL>: PsqlODBC
- i OpenLink <SMALL>ODBC</SMALL>.</P>
-
- <P>PsqlODBC jest doЁ╠czony do ╪rСdeЁ. WiЙcej informacji na jego temat
- mo©esz znale╪Ф pod adresem: <A href=
- "ftp://ftp.PostgreSQL.org/pub/odbc/">ftp://ftp.PostgreSQL.org/pub/odbc/</A>.</P>
-
- <P>OpenLink <SMALL>ODBC</SMALL> mo©e byФ pobrany z adresu: <A href=
- "http://www.openlinksw.com/">http://www.openlinksw.com</A>.
- WspСЁpracuje ze standardowym oprogramowaniem klienckim <SMALL>ODBC</SMALL>
- wiЙc w ten sposСb mo©esz korzystaФ z PostgreSQL <SMALL>ODBC</SMALL>
- dostЙpnego na ka©dej plaformie ktСr╠ wspiera (Win, Mac, Unix, VMS).</P>
-
- <P>Autorzy bЙd╠ prawdopodobnie sprzedawaФ ten produkt osobom ktСre
- wymagaj╠ komercyjnego wsparcia, ale wersja darmowa bЙdzie zawsze
- dostЙpna. Wszystkie pytania mo©esz wysyЁaФ na adres: <A href=
- "mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>.</P>
-
- <P>Sprawd╪ tak©e rozdziaЁ o <A href=
- "http://www.postgresql.org/devel-corner/docs/programmer/odbc.html">ODBC
- w "Programmer's Guide"</A>.</P>
-
- <H4><A name="2.2">2.2</A>) Jakie istniej╠ narzЙdzia pozwalaj╠ce na dostЙp do
- PostgreSQL przez www?</H4>
-
- <P>Dobry podrЙcznik dla pocz╠tkuj╠cych o dostЙpie do bazy danych
- przez www mo©esz znale╪Ф pod adresem:
- <A href="http://www.webreview.com">http://www.webreview.com</A></P>
-
- <P>Inny znajduje siЙ pod adresem: <A href=
- "http://www.phone.net/home/mwm/hotlist/">http://www.phone.net/home/mwm/hotlist/.</A></P>
-
- <P>Do integracji z www, ╤wietnym rozwi╠zaniem jest PHP. Mo©esz
- znale╪Ф wiЙcej informacji na ten temat pod adresem
- <A href="http://www.php.net">http://www.php.net</A>.</P>
-
- <P>Wiele osСb w przypadku skomplikowanych rozwi╠zaЯ uzywa Perl'a i
- moduЁu CGI.pl.</P>
-
- <H4><A name="2.3">2.3</A>) Czy istnieje jakie╤ GUI dla PostgreSQL?
- NarzЙdzie do raportowania? Interfejs dla "embedded query
- language"?</H4>
-
- <P>Mamy caЁkiem miЁy interfejs graficzny, ktСry zostaЁ nazwany
- <I>pgaccess</I> i jest on dostarczany jako czЙ╤Ф ╪rСdeЁ.
- <I>pgaccess</I> posiada tak©e generator raportСw. Mo©na go znale╪Ф
- pod adresem <A href=
- "http://www.flex.ro/pgaccess">http://www.flex.ro/pgaccess</A></P>
-
- <P>UdostЙpnili╤my tak©e <I>ecpg</I>, ktСry jest "embedded SQL query
- language interface" dla jЙzyka C.</P>
-
- <H4><A name="2.4">2.4</A>) Za pomoc╠ jakich jЙzykСw programowania
- mo©na siЙ komunikowaФ z PostgreSQL?</H4>
-
- <P>Mamy wsparcie dla:</P>
-
- <UL>
- <LI>C (libpq)</LI>
-
- <LI>C++ (libpq++)</LI>
-
- <LI>Embedded C (ecpg)</LI>
-
- <LI>Java (jdbc)</LI>
-
- <LI>Perl (perl5)</LI>
-
- <LI>ODBC (odbc)</LI>
-
- <LI>Python (PyGreSQL)</LI>
-
- <LI>TCL (libpgtcl)</LI>
-
- <LI>C Easy API (libpgeasy)</LI>
-
- <LI>Embedded <SMALL>HTML</SMALL> (<A href=
- "http://www.php.net">PHP z http://www.php.net</A>)</LI>
- </UL>
- <HR>
-
- <H2 align="center">Pytania administratora</H2>
-
- <H4><A name="3.1">3.1</A>) Jak mogЙ zainstalowaФ PostgreSQL w innej
- lokalizacji ni© <I>/usr/local/pgsql</I>?</H4>
-
- <P>U©yj opcji <I>--prefix</I> podczas uruchamiania skryptu
- <I>configure</I>.</P>
-
- <H4><A name="3.2">3.2</A>) Podczas startu <I>postmaster'a</I>,
- otrzymujЙ komunikat o bЁЙdzie: <I>Bad System Call</I> lub "core dumped".
- Dlaczego?</H4>
-
-
- <P>Ten bЁ╠d mo©e byФ wynikiem wielu problemСw, ale na pocz╠tek
- sprawd╪ czy masz zainstalowane rozszerzenia systemu V w j╠drze
- systemu. PostgreSQL wymaga do pracy zainstalowanej obsЁugi pamiЙci
- dzielonej i semaforСw.</P>
-
- <H4><A name="3.3">3.3</A>) Podczas startu <I>postmaster'a</I>,
- otrzymujЙ komunikat o bЁЙdzie: <I>IpcMemoryCreate</I>.
- Dlaczego?</H4>
-
- <P>Albo nie masz poprawnie skonfigurowanej obsЁugi pamiЙci dzielonej
- w j╠drze systemu, albo musisz zwiЙkszyФ jej dostЙpny rozmiar.
- DokЁadna ilo╤Ф jak╠ potrzebujesz jest zale©na od architektury systemu
- na jakim pracujesz, jak du©o buforСw oraz jak du©o procesСw backendu
- skonfigurowaЁe╤ dla <I>postmaster'a</I>. Dla wiЙkszo╤ci systemСw, z
- domy╤ln╠ liczb╠ buforСw i procesСw potrzebujesz minimum w
- przybli©eniu 1MB. Zobacz <A href=
- "http://www.postgresql.org/idocs/index.php?kernel-resources.html">PostgreSQL
- Administrator's Guide</A> gdzie szczegСЁowo zostaЁo opisane
- wykorzystanie pamiЙci dzielonej i semaforСw.</P>
-
- <H4><A name="3.4">3.4</A>) Podczas startu <I>postmaster'a</I>,
- otrzymujЙ komunikat o bЁЙdzie: <I>IpcSemaphoreCreate</I>.
- Dlaczego?</H4>
-
- <P>Je╤li tre╤Ф bЁЙdu brzmi: <I>IpcSemaphoreCreate: semget failed
- (No space left on device)</I> oznacza to, ©e j╠dro systemu nie jest
- skonfigurowane do obsЁugi wystarczaj╠cej liczby semaforСw.
- Postgres wymaga jednego semafor'a na potencjalny jeden proces backend.
- Tymczasowym rozwi╠zaniem jest uruchomienie programu <I>postmaster</I>
- z mniejsz╠ maksymaln╠ liczb╠ procesСw backend.
- U©yj opcji <I>-N</i> z parameterem mniejszym od domy╤lnego - 32.
- Bardziej trwaЁym rozwi╠zaniem jest zwiЙkszenie parametrСw
- <SMALL>SEMMNS</SMALL> i <SMALL>SEMMNI</SMALL> j╠dra twojego systemu.</P>
-
- <P>NiedziaЁaj╠ce semafory mog╠ spowodowaФ niepoprawne zamkniЙcie
- systemu w czasie intensywnego korzystania z bazy.</P>
- <P>Je╤li tre╤Ф bЁЙdu jest inna, mo©e to oznaczaФ, ©e obsЁuga semaforСw
- nie zostaЁa wЁ╠czona do j╠dra wcale. Zobacz PostgreSQL
- Administrator's Guide po bardziej szczegСЁowe informacje o pamiЙci
- dzielonej i semaforach.</P>
-
- <H4><A name="3.5">3.5</A>) W jaki sposСb mogЙ kontrolowaФ poЁ╠czenia
- z innych hostСw?</H4>
-
- <P>Domy╤lnie PostgreSQL pozwala jedynie na poЁ╠czenia za pomoc╠
- socketСw Unixowych z lokalnego hosta. Inne hosty nie bЙd╠ mogЁy siЙ
- poЁ╠czyФ z serwerem dopСki nie zostanie dodana opcja <I>-i</I> do
- <I>postmaster'a</I>,
- <B>oraz</B> nie umo©liwi siЙ autoryzacji na podstawie adresu hostСw
- modyfikuj╠c odpowiednio plik
- <I>$PGDATA/pg_hba.conf</I>. To zmiany pozwol╠ na
- poЁ╠czenia TCP/IP.</P>
-
- <H4><A name="3.6">3.6</A>) Jak powinienem skonfigurowaФ system baz
- danych aby uzyskaФ lepsz╠ wydajno╤Ф?</H4>
-
- <P>Indeksy bez w╠tpienia mog╠ przyspieszyФ wykonywanie zapytaЯ.
- Polecenie <SMALL>EXPLAIN</SMALL> pozwala zobaczyФ jak PostgreSQL
- interpretuje Twoje zapytanie i ktСre indeksy s╠ u©ywane.</P>
-
- <P>Je╤li wykonujesz bardzo du©o <SMALL>INSERTСw</SMALL>, mo©e warto
- je wykonaФ za pomoc╠ jednego du©ego pliku u©ywaj╠c polecenia
- <SMALL>COPY</SMALL>. Jest to du©o szybsze ni© pojedyncze
- <SMALL>INSERTy.</SMALL> Po drugie polecenia SQL nie zawarte w bloku
- okre╤laj╠cym transakcjЙ - <SMALL>BEGIN WORK/COMMIT</SMALL>, s╠
- traktowane jako pojedyncza transakcja. Rozwa© wykonanie kilku
- poleceЯ/zdaЯ SQL w jednym bloku transakcji. To redukuje narzut
- powodowany przez transakcjЙ. Przy du©ych zmianach w danych, warto
- usun╠Ф i stworzyФ na nowo indeksy.</P>
-
- <P>Jest kilka opcji pozwalaj╠cych na poprawienie wydajno╤ci.
- Mo©esz wyЁ╠czyФ <I>fsync()</I> poprzez uruchomienie <I>postmaster'a</I>
- z opcjami <I>-o -F</I>. To spowoduje, ©e
- <I>fsync()</I> nie bЙdzie zrzucaЁ danych na dysk po ka©dej
- transakcji.</P>
-
- <P>Mo©esz tak©e uruchomiФ <I>postmaster'a</I> z opcj╠ <I>-B</I>
- aby zwiЙkszyФ wielko╤Ф pamiЙci dzielonej u©ywanej przez procesy
- backendСw. Je╤li ustawisz t╠ warto╤Ф zbyt wysoko i przekroczysz limity
- ustawione przez kernel na pamiЙФ dzielon╠, <I>postmaster</I> mo©e siЙ
- nie uruchomiФ. Ka©dy bufor zajmuje 8K a domy╤lna ilo╤Ф buforСw to 64.</P>
-
- <P>Mo©esz tak©e u©yФ opcji <I>-S</I> dla backendu aby zwiЙkszyФ
- maksymaln╠ warto╤Ф pamiЙci u©ywan╠ przez proces backendu podczas
- sortowania. Opcja <I>-S</I> jest ustawiana warto╤ci╠ podawan╠ w
- kilobajtach, domy╤lna warto╤Ф to 512K.</P>
-
- <P>Mo©esz tak©e u©yФ polecenia <SMALL>CLUSTER</SMALL> aby pogrupowaФ
- dane w tabelach wg indeksu. Zobacz opis polecenia <SMALL>CLUSTER</SMALL>
- w manualu ©eby dowiedzieФ siЙ wiЙcej.</P>
-
- <H4><A name="3.7">3.7</A>) Jakie s╠ mo©liwo╤ci wyszukiwania
- bЁЙdСw?</H4>
-
- <P>PostgreSQL ma kilka mo©liwo╤ci na raportowanie informacji o
- jego statusie, ktСre mog╠ byФ przydatne przy debugowaniu procesu.</P>
-
- <P>Przede wszystkim uruchom skrypt <I>configure</I> z opcj╠
- --enable-cassert, wiele funkcji <I>assert()</I> monitoruj╠ postЙp
- procesu backend i zatrzymuj╠ program kiedy wydarzy siЙ co╤
- nieoczekiwanego.</P>
-
- <P>ZarСwno <I>postmaster</I> jak i <I>postgres</I> maj╠ kilka opcji
- do debugowania. Za ka©dym razem kiedy uruchamiasz <I>postmaster'a</I>,
- upewnij siЙ, ©e wysyЁasz standardowe wyj╤cie i error do pliku z
- logami, np. w ten sposСb:</P>
-<PRE>
- cd /usr/local/pgsql
- ./bin/postmaster &gt;server.log 2&gt;&amp;1 &amp;
-</PRE>
-
- <P>To utworzy plik server.log w gЁСwnym katalogu PostgreSQL.
- Ten plik zawiera po©yteczne informacje o problemach i bЁЙdach, ktСre
- wydarzyЁy siЙ podczas pracy serwera. <I>Postmaster</I> posiada opcjЙ
- <I>-d</I>, ktСra pozwala na raportowanie bardzo szczegСlowych
- informacji. Do opcji <I>-d</I> podajemy liczbЙ, ktСra okre╤la
- szczegСЁowo╤Ф wysyЁanych informacji. Musisz mieФ ╤wiadomo╤Ф, ©e
- wysoki poziom logowania bЙdzie powodowaЁ tworzenie bardzo duzych
- plikСw z logami.</P>
-
- <P>Je╤li <I>postmaster</I> nie zostaЁ uruchomiony, mo©esz uruchomiФ
- <I>postgres'owy</I> backend z linii poleceЯ, i uruchomiФ Twoje
- polecenie <SMALL>SQL</SMALL> bezpo╤rednio na nim.
- Taki sposСb jest polecany <B>jedynie</B> w przypadku debugowania.
- ZwrСФ uwagЙ, ©e w tym wypadku zapytanie koЯczy znak nowej linii a nie
- ╤rednik. Je╤li skompilowaЁe╤ z opcjami debugowania mozesz u©yФ
- debuggera aby sprawdziФ co siЙ dzieje. Poniew© backend nie zostaЁ
- uruchomiony przez <I>postmaster'a</I>, nie dziaЁa w identycznym
- ╤rodowisku, co oznacza ©e powtСrzenie warunkСw w jakich wyst╠piЁy
- problemy moze byФ problemem.</P>
-
- <P>Je╤li <I>postmaster</I> dziaЁa, uruchom <I>psql</I> w jednym z
- okien, nastЙpnie znajd╪ <SMALL>PID</SMALL> procesu <I>postgres</I>
- u©ywanego przez <I>psql</I>. U©yj debuggera aby do
- <SMALL>PID'u</SMALL> <I>postgres'a</I>. Mo©esz ustawiaФ puЁapki
- (breakpoints) w debuggerze i wykonywaФ zapytania z <I>psql</I>.
- Je╤li debugujesz uruchamianie <I>postgres'a</I>, mo©esz ustawiФ zmienn╠
- PGOPTIONS="-W n", nastЙpnie uruchomiФ <I>psql</I>.
- Opcja ta pozwoli spowolniФ uruchomienie na
- <I>n</I> sekund aby╤ mСgЁ siЙ poЁ╠czyФ z procesem za pomoc╠
- debugera, ustawiФ jakiekolwiek puЁapki i kontynuowaФ proces
- uruchamiania.</P>
-
- <P><I>postgres</I> mo©e byФ uruchamiany z opcjami <I>-s, -A</I> i
- <I>-t</I>, ktСre mog╠ byФ bardzo przydatne przy debuggowaniu i ocenie
- wydajno╤ci.</P>
-
- <P>Mo©esz tak©e skompilowaФ z profilingiem aby zobaczyФ jakie funkcje
- ile czasu wykonuj╠ siЙ. Pliki profilowane dla backendu zostan╠
- umieszczone w katalogu
- <I>pgsql/data/base/dbname</I>. Pliki profilu klienta zostan╠
- umieszczone w bie©╠cym katalogu klienta. Linux wymaga aby kompilowaФ
- z opcj╠ <I>-DLINUX_PROFILE</I> aby profilowanie odbywaЁo siЙ
- poprawnie.</P>
-
- <H4><A name="3.8">3.8</A>) Sk╠d siЙ bierze komunikat: <I>"Sorry, too
- many clients"</I> podczas prСby poЁ╠czenia siЙ z baz╠ danych?</H4>
-
- <P>Musisz zwiЙkszyФ limit ilo╤ci jednoczesnych procesСw bacekendu
- dla procesu <I>postmaster'a</I>.</P>
-
- <P>Domy╤lny limit to 32 procesy. Mo©esz go zwiЙkszyФ przez restart
- <I>postmaster</I> z odpowiedni╠ warto╤ci╠ ustawian╠ opcjЙ <I>-N</I> w
- pliku <I>postgresql.conf</I>.</P>
-
- <P>We╪ pod uwagЙ, ©e je╤li zwiЙkszysz warto╤Ф podan╠ w opcji
- <I>-N</I> na wiЙcej ni© 32 musisz tak©e zwiЙkszyФ warto╤Ф w opcji
- <I>-B</I> ponad jej domy╤ln╠ warto╤Ф 64; warto╤Ф <I>-B</I> musi byФ
- co najmniej dwa razy wiЙksza od warto╤ci podanej w opcji
- <I>-N</I>, a prawdopodobnie powinna byФ w rzeczywisto╤ci jeszcze
- wiЙksza dla optymalnej wydajno╤ci.
- Dla du©ej liczby procesСw backendu na pewno zauwa©ysz, ©e trzeba
- zwiЙkszyФ rС©ne parametry j╠dra Unixa. Rzeczy, ktСre powniene╤
- sprawdziФ to maksymalna liczba blokСw pamiЙci dzielonej,
- <SMALL>SHMMAX;</SMALL> maksymalna liczba semaforСw, <SMALL>SEMMNS</SMALL>
- oraz <SMALL>SEMMNI;</SMALL>
- maksymalna liczba procesСw, <SMALL>NPROC;</SMALL> maksymalna liczba
- procesСw na jednego u©ytkownika, <SMALL>MAXUPRC;</SMALL> i maksymalna
- liczba otwartych plikСw, <SMALL>NFILE</SMALL> oraz
- <SMALL>NINODE.</SMALL> PowСd dla ktСrego PostgreSQL ma limit na
- maksymaln╠ liczbЙ procesСw backendu to obawa o wyczerpanie zasobСw
- systemu.</P>
-
- <P>W wersjach PostgreSQL wcze╤niejszych ni© 6.5, maksymalna liczba
- backendСw byЁa ustawiona na 64, a zmiana tej warto╤ci wymaga
- rekompliacji po zmianie staЁej MaxBackendId w pliku
- <I>include/storage/sinvaladt.h</I>.</P>
-
- <H4><A name="3.9">3.9</A>) Co to s╠ za pliki typu:
- <I>pg_sorttempNNN.NN</I>,
- ktСre znajduj╠ siЙ w katalogu z plikami bazy danych?</H4>
-
- <P>S╠ to tymczasowe pliki utworzone przez executor. Dla przykЁadu,
- je╤li jaka╤ operacja sortowania jest wymagana do wykonania
- <SMALL>ORDER BY,</SMALL> a samo sortowanie wymaga wiЙcej miejsca ni©
- paratmetr backendu
- <I>-S</I> ustawiЁ do wykorzystania, wtedy tymczasowe pliki s╠ u©ywane
- do przechowywania tych danych.</P>
-
- <P>Pliki tymczasowe powinny byФ usuniЙte automatycznie, ale mogЁo siЙ
- to nie staФ je╤li proces backendu w miЙdzyczasie nie zakoЯczyЁ siЙ
- poprawnie podczas operacji sortowania. Je╤li w danym momencie nie
- dziaЁaj╠ ©adne procesy backendСw mozesz spokojnie usun╠Ф pliki
- pg_tempNNN.NN.</P>
- <HR>
-
- <H2 align="center">Pytania dotycz╠ce u©ywania</H2>
-
- <H4><A name="4.1">4.1</A>) Jaka jest rС©nica pomiЙdzy kursorami
- binarnymi (binary cursors) i zwykЁymi kursorami (normal
- cursors)?</H4>
-
- <P>Zobacz w manualu opis polecenia <SMALL>DECLARE</SMALL>.</P>
-
- <H4><A name="4.2">4.2</A>) Jak mogЙ pobraФ za pomoc╠
- <SMALL>SELECT</SMALL> jedynie kilka pierwszych wynikСw
- zapytania?</H4>
-
- <P>Zobacz w manualu opis polecenia <SMALL>FETCH</SMALL> lub u©yj
- polecenia <SMALL>SELECT</SMALL> ... <SMALL>LIMIT</SMALL>....</P>
-
- <P>Nawet je╤li chesz pobraФ kilka pierwszych rzЙdСw z wyniku
- zapytania, caЁe zapytanie musi zostaФ wykonane. Byc mo©e powiniene╤
- skorzystaФ z polecenia <SMALL>ORDER BY.</SMALL>
- Je╤li istnieje indeks ktСry odpowiada polom okre╤lonym przez
- <SMALL>ORDER BY</SMALL>, PostgreSQL mo©e wykorzystaФ jedynie kilka
- pierwszych rzЙdСw, byФ mo©e bЙdzie konieczno╤Ф wykonania zapytania do
- momentu a© zostan╠ znalezione po©╠dane wyniki.</P>
-
- <H4><A name="4.3">4.3</A>) Jak mogЙ uzyskaФ listЙ wszystkich tabel
- czy innych rzeczy pod <I>psql</I>?</H4>
-
- <P>Mo©esz sprawdziФ zawarto╤Ф ╪rСdeЁ <I>psql</I>, a konkretnie plik
- <I>pgsql/src/bin/psql/describe.c</I>. Zawiera on polecenia
- <SMALL>SQL</SMALL> ktСre generuja wyniki komend z backslashem.
- Mo©esz tak©e uruchomiФ <I>psql</I> z opcj╠
- <I>-E</I> wtedy po wykonaniu polecenia z backslashem wy╤wietlane
- bЙdzie zapytanie, ktСre w rzeczywisto╤ci jest wykonywane.</P>
-
- <H4><A name="4.4">4.4</A>) Jak usun╠Ф kolumnЙ z tabeli?</H4>
-
- <P>Nie mamy zaimplementowanego <SMALL>ALTER TABLE DROP
- COLUMN,</SMALL> ale mo©esz zrobiФ tak:</P>
-<PRE>
- SELECT ... -- wybierz zawarto╤Ф wszystkich kolumn poza t╠ jedn╠ ktСrej chcesz siЙ pozbyФ
- INTO TABLE new_table
- FROM old_table;
- DROP TABLE old_table;
- ALTER TABLE new_table RENAME TO old_table;
-</PRE>
-
- <H4><A name="4.5">4.5</A>) Jaki jest maksymalny rozmiar dla rzЙdu,
- tabeli i bazy danych?</H4>
-
- <P>Oto wszystkie ograniczenia:</P>
-<PRE>
- Maksymalny rozmiar dla bazdy danych? nieograniczony ( istniej╠ bazy danych o wielko╤ci 500 GB databases )
- Maksymalny rozmiar dla tabeli? 16 TB
- Maksymalny rozmiar dla rzЙdu? nieograniczony w 7.1 i pС╪niejszych
- Maksymalny rozmiar pola? 1 GB w 7.1 and later
- Maksymalna liczba rzЙdСw w tabeli? nieograniczona
- Maksymalna liczba kolumn w tabeli? 250-1600 w zale©ono╤ci od typСw kolumn
- Makasymalna liczba indeksСw na tabeli? nieograniczona
-</PRE>
-
- Oczywi╤cie "nieograniczony" nie jest prawd╠ tak do koЯca, istniej╠
- ograniczenia wynikaj╠ce z dostЙpnego miejsca na dysku, pamiЙci/swapa.
- Kiedy wielko╤ci te bЙd╠ bardzo du©e mo©e odbiФ siЙ to na wydajno╤ci.
-
- <P>Maksymalny rozmiar tabeli, czyli 16 TB nie wymaga od systemu
- operacyjnego wsparcia dla du©ych plikСw. Du©e tabele s╠ przechowywane
- jako pliki o rozmiarze 1 GB, wiЙc ograniczenia co do wielko╤ci plikСw
- narzucone przez system plikСw nie s╠ istotne.</P>
-
- <P>Masymalny rozmiar tabeli i maksymalna liczba kolumn mo©e byФ
- zwiЙkszona je╤li zwiЙkszymy domy╤lny rozmiar bloku (block size) do
- 32k.</P>
-
- <H4><A name="4.6">4.6</A>) Jak du©o miejsca w bazie danych jest
- konieczne aby przechowywaФ dane ze zwyczajnego pliku
- tekstowego?</H4>
-
- <P>Baza danych PostgreSQL mo©e potrzebowaФ do piЙciu razy wiЙcej
- miejsca na przechowywanie danych z plikСw tekstowych ni© ich
- objЙto╤Ф.</P>
-
- <P>Jako przykЁad mo©emy rozwa©yФ plik skЁadaj╠cy siЙ z 100,000 linii
- zbudowanych z liczby caЁkowitej oraz opisu tekstowego w ka©dej.
- ZaЁС©my, ©e ╤rednio ka©dy ЁaЯcuch tekstu w linii zajmuje 20
- bajtСw. CaЁy plik powinien zajmowaФ ok. 2.8 MB. Rozmiar pliku bazy danych w
- PostgreSQL zawieraj╠cego te dane mozna oszacowaФ na okoЁo 6.4MB:</P>
-
-<PRE>
- 36 bajtСw: nagЁСwek ka©dego rzЙdu w przybli©eniu)
- 24 bajty: jedno pole int i jedno pole typu text
- + 4 bajty: wka╪nik na stronie do krotki
- --------------------------------------------------
- 64 bajty w jednym rzЙdzie
-
- Strona danych w PostgreSQL zajmuje 8192 bajtСw (8 KB), wiЙc:
-
- 8192 bajtСw na stronЙ
- --------------------- = 128 rzЙdСw na jedn╠ strone w bazie (zaokr╠glone w dСЁ)
- 64 bajtСw na rz╠d
-
- 100000 rzЙdСw danych
- ----------------------- = 782 stron w bazie danych (zaokr╠glone w gСrЙ)
- 128 rzЙdСw na stronЙ
-
-782 stron w bazie * 8192 bajtСw na stronЙ = 6,406,144 bajtСw (6.4 MB)
-</PRE>
-
- <P>Indeksy nie powoduj╠ du©ego narzutu na zajmowane miejsce,
- ale zawieraj╠ pewne dane,
- wiЙc w pewnych przypadkach moga byФ caЁkiem du©e.</P>
-
- <H4><A name="4.7">4.7</A>) Jak mogЙ sprawdziФ jakie tabele, klucze,
- bazy danych i u©ytkownicy s╠ utworzeni?</H4>
-
- <P><I>psql</I> ma caЁkiem du©╠ ilo╤Ф poleceЯ z backslashem aby
- wydobyФ takie informacje. Wprowad╪ \? aby zobaczyФ ich spis. Istniej╠
- tak©e tablice systemowe rozpoczynaj╠ce siЙ od <i>pg_</i>, zawieraj╠ce
- interesuj╠ce Ciebie informacje. Wykonanie <i>psql -l</i> poka©e spis
- wszystkich baz danych.</P>
-
- <P>Obejrzyj tak©e plik <I>pgsql/src/tutorial/syscat.source</I>.
- Zawiera on wiele z zapytaЯ typu <SMALL>SELECT</SMALL>, ktСre s╠
- potrzebne aby wydobyФ informacje z tablic systemowych.</P>
-
- <H4><A name="4.8">4.8</A>) Moje zapytania s╠ wolne lub nie u©ywaj╠
- kluczy. Dlaczego?</H4>
-
- Indeksy nie s╠ u©ywane automatycznie przez k╠©de z zapytaЯ. Ideksy s╠
- u©ywane jedynie gdy tabela jest odpowiedniego rozmiaru, wiЙkszego ni©
- wymagany minimalny, a zapytanie wybiera jedynie maЁy procent
- zawarto╤ci tabeli. Wynika to z tego, ©e losowy dostep do dysku
- powodowany przez ideksowane poszukiwanie jest czasami wolniejsze ni©
- poszukiwanie sekwencyjne bez u©ycia kluczy.
-
- <P>╞eby zdecydowaФ czy indeks powinien byc u©ywany, PostgreSQL musi
- mieФ statystyki dotycz╠ce danej tabeli. S╠ one gromadzone przez
- u©ycie polecenia <SMALL>VACUUM ANALYZE</SMALL>, lub poprostu
- <SMALL>ANALYZE</SMALL>. u©ywaj╠c statystyk, optymalizator wie ile
- rzЙdСw jest w tabeli i mo©e lepiej okre╤liФ czy indeksy powinny byФ
- u©yte. Statystyki mog╠ byФ tak©e pomocne w okre╤leniu najlepszej
- kolejno╤ci wykonania zЁ╠czenia (join) i jego sposobu. Gromadzenie
- statystyk powinno siЙ odbywaФ w okre╤lonych interwaЁach czasu
- poniewa© dane w tabelach zmieniaj╠ siЙ.</P>
-
- <P>Indeksy nie s╠ zazwyczaj u©ywane przez <SMALL>ORDER BY</SMALL> lub
- przy wykonywaniu zЁ╠czeЯ (join). Sekwencyjne przeszukiwanie po ktСrym
- nastЙpuje sortowanie jest zazwyczaj szybsze niЙ wyszukiwanie za
- pomoc╠ indeksu na du©ej tabeli.</P>
- Jakkolwiek <SMALL>LIMIT</SMALL> w poЁ╠czeniu z <SMALL>ORDER BY</SMALL>
- czЙsto bЙdzie wykorzystywaЁ indeksСw poniew╠z jedynie maЁa czЙ╤c z
- tabeli jest zwracana.
-
- <P>Kiedy u©ywa siЙ operatorСw dopasuj╠cych takich jak
- <SMALL>LIKE</SMALL> lub <I>~</I>, indeksy bЙd╠ u©ywane jedynie je╤li
- pocz╠tek wyszukiwania jest oparty na pocz╠tku ЁaЯcucha tekstu.
- Dlatego, aby u©ywac indeksСw,
- dopasowania operatorem <SMALL>LIKE</SMALL> nie mog╠ siЙ zaczynaФ
- <I>%</I>, a dopasowania operatorem <I>~</I> (dopasowania regularne)
- musz╠ siЙ zaczynaФ znakiem specjalnym <I>^</I>.</P>
-
- <H4><A name="4.9">4.9</A>) Jak mogЙ sprawdziФ w jakis sposСb "query
- optimizer" wykonuje moje zapytanie?</H4>
-
- <P>Zobacz manual dla polecenia <SMALL>EXPLAIN</SMALL>.</P>
-
- <H4><A name="4.10">4.10</A>) Co to jest "R-tree index"?</H4>
-
- <P>Indeks R-tree jest u©ywany do indeksowania danych przestrzennych.
- Indeks hasuuj╠cy nie nadaje siЙ do wyszukiwania odlegЁo╤ci.
- Natomiast indeks typu B-tree mo©e wyszukiwaФ odleglo╤ci jedynie w
- jednowymiarowych przestrzeniach. R-tree indeks radzi sobie z
- przestrzeniami wielo-wymiarowymi. Dla przykЁadu, je╤li zostanie
- zaЁo©ony indeks typu R-tree na polu typu <I>point</I>, system mo©e
- bardziej wydajnie odpowiadaФ na zapytania typu
- "select all points within a bounding rectangle."</P>
-
- <P>╛rСdЁowym dokumentem opisuj╠cym oryginalnie projektowanie R-tree
- indeksСw jest:</P>
-
- <P>Guttman, A. "R-trees: A Dynamic Index Structure for Spatial
- Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt
- of Data, 45-57.</P>
-
- <P>Ten dokument mo©esz znale╪Ф tak©e w pracy Stonebraker'a "Readings in
- Database Systems".</P>
-
- <P>Wbudowane indeksy R-trees radz╠ sobie w wielobokami i boxes.
- Teoretycznie, indeksy R-tree mog╠ byФ rozszerzone o mo©liwo╤ci
- indeksowania w wiЙcej wymiarowych przestrzeniach. W praktyce,
- rozbudowa indeksСw R-tree wymaga trochЙ pracy, a w tej chwili nie
- dysponujemy jak╠kolwiek dokumentacj╠ jak to zrobiФ.</P>
-
- <H4><A name="4.11">4.11</A>) Co to jest "Genetic Query
- Optimizer"?</H4>
-
- <P>ModuЁ <SMALL>GEQO</SMALL> ma za zadanie przyspieszenie
- optymalizacji zapytaЯ Ё╠cz╠c wiele tabel za pomoc╠ algorytmСw
- genetycznych (Genetic Algorithm (GA)). Pozwala na u©ywanie du©ych
- zapytaЯ Ё╠cz╠cych tabele (join queries) bez wykorzystywania
- zasobo©ernego wyszukiwania.</P>
-
- <H4><A name="4.12">4.12</A>) Jak mogЙ u©ywaФ wyra©eЯ regularnych w
- zapytaniach i zapytaЯ case-insensitive w wyra©eniach
- regularnych?
- jak korzystaФ z indeksСw dla zapytaЯ case-insensitive?</H4>
-
- <P>Operator <I>~</I> moze byФ wykorzystywany do wyszukiwania za
- pomoc╠ wyra©eЯ regularnych, a
- <I>~*</I> do wyszukiwania case-insensitive z wyra©eniami
- regularnymi.
- Wariant case-insensitive dla <SMALL>LIKE</SMALL> zostaЁ nazwany
- <SMALL>ILIKE</SMALL> i jest dostЙpny w PostgreSQL 7.1 i pС╪niejszych
- wersjach.</P>
-
- <P>PorСwnania case-insensitive s╠ zazwyczaj wykonywane w nastЙpuj╠cy
- sposСb:</P>
-<PRE>
- SELECT *
- FROM tab
- WHERE lower(col) = 'abc'
-
-</PRE>
- W tym wypadku standardowe indeksy nie bЙd╠ u©ywane. Mo©esz utworzyФ
- indeks funkcyjny, poprzez:
-<PRE>
- CREATE INDEX tabindex on tab (lower(col));
-
-</PRE>
-
- <H4><A name="4.13">4.13</A>) Jak sprawdziФ w zapytaniu czy pole ma
- warto╤Ф <SMALL>NULL</SMALL>?</H4>
-
- <P>Mo©esz to sprawdziФ, testuj╠c warto╤Ф kolumny warunkiem
- <SMALL>IS NULL</SMALL> albo <SMALL>IS NOT NULL</SMALL>.</P>
-
- <H4><A name="4.14">4.14</A>) Jaka jest rС©nica pomiЙdzy rС©nymi
- typami tekstowymi (character types)?</H4>
-<PRE>
-Type Nazwa wewnЙtrzna Uwagi
---------------------------------------------------
-"char" char 1 znak
-CHAR(#) bpchar wypeЁniane pustymi znakami do podanej dЁugo╤ci
-VARCHAR(#) varchar rozmiar okre╤la maksymaln╠ dЁugo╤Ф, nie ma tutaj wypeЁniania
-TEXT text bez limitu na dЁugo╤Ф ЁaЯcucha
-BYTEA bytea zmiennej dЁugo╤ci tablica bajtСw (null-byte safe)
-</PRE>
-
- <P>Je╤li bЙdziesz przegl╠daФ katalogi systemowe lub komunikaty o
- bЁЙdach czЙsto spotkasz siЙ z podanymi powy©ej nazwami
- wewnЙtrznymi.</P>
-
- <P>Ostatnie cztery typy powy©ej to tzw typy "varlena" (np. pierwsze
- cztery bajty na dysku to dЁugo╤Ф, po ktСrych jest data). Dlatego
- faktyczna dЁugo╤c takiego ЁaЯcucha jest trochЙ wiЙksza ni©
- zadeklarowany rozmiar. Te typy tak©e podlegaj╠ kompresji lub mog╠ byФ
- przechowywane out-of-line jako <SMALL>TOAST</SMALL>, wiЙc faktyczne
- zu©ycie miejsca na dysku mo©e byФ mniejsze ni© oczekiwane.</P>
-
- <P><SMALL>CHAR()</SMALL> jast najlepszym typem do przechowywania
- ЁaЯcuchСw o tej samej dЁugo╤ci. <SMALL>VARCHAR()</SMALL> jest
- najodpowiedniejszy do przechowywania ЁaЯcuchСw o rС©nej dЁugo╤ci
- ale okre╤la on maksymaln╠ jego dЁugo╤Ф. <SMALL>TEXT</SMALL> jest
- najlepszy dla ЁaЯcuchСw o dowolnej dЁugo╤ci, nie przekraczaj╠cej 1GB.
- <SMALL>BYTEA</SMALL> sЁu©y do przechowywania danych binarnych,
- w szczegСlno╤ci dla danych zawieraj╠cych <SMALL>NULL</SMALL> bajty.</P>
-
- <H4><A name="4.15.1">4.15.1</A>) Jak mogЙ utworzyФ pole ktСre samo
- zwiЙksza swoj╠ warto╤Ф?</H4>
-
- <P>PostgreSQL ma zaimplementowany typ <SMALL>SERIAL</SMALL>.
- Automatycznie tworzy sekwencjЙ i indeks na tej kolumnie. Dla
- przykladu:</P>
-<PRE>
- CREATE TABLE person (
- id SERIAL,
- name TEXT
- );
-</PRE>
- zostanie automatycznie prztЁumaczone na:
-<PRE>
- CREATE SEQUENCE person_id_seq;
- CREATE TABLE person (
- id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
- name TEXT
- );
- CREATE UNIQUE INDEX person_id_key ON person ( id );
-</PRE>
- WiЙcej informacji o sekwencjach znajdziesz w manualu o
- <I>create_sequence</I>. Mo©esz tak©e u©yФ pola <I>OID</I> jako
- unikalnej warto╤ci dla ka©dego rzЙdu danych. Je╤li bЙdziesz
- potrzebowaЁ z backupowaФ dane robi╠c dump bazy i odtworzyФ j╠, musisz
- u©yc <I>pg_dump</I> z opcj╠ <I>-o</I> lub polecenia <SMALL>COPY
- WITH OIDS</SMALL> aby zachowaФ <SMALL>OIDy</SMALL>.
-
- <H4><A name="4.15.2">4.15.2</A>) Jak pobraФ warto╤Ф pola typu
- <SMALL>SERIAL</SMALL> po wykonaniu insert'u?</H4>
-
- <P>Jednym z podej╤Ф jest pobranie kolejnej warto╤ci typu
- <SMALL>SERIAL</SMALL> z sekwencji za pomoc╠ funkcji <I>nextval()</I>
- <I>zanim</I> zostanie wstawiona, a pС╪niej nale©y jej u©yФ. U©ywaj╠c
- przykЁadu z tabeli z punktu <A href="#4.15.1">4.15.1</A>, mo©e to
- wygl╠daФ w Perlu na przykЁad w ten sposСb:</P>
-
-<PRE>
- new_id = output of "SELECT nextval('person_id_seq')"
- INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal');
-</PRE>
- BЙdziesz miaЁ wtedy t╠ warto╤Ф przechowan╠ w zmiennej
- <CODE>new_id</CODE> do u©ytku w innych zapytaniach (np. jako klucz
- obcy do tabeli <CODE>person</CODE>). Warto zwrСciФ uwagЙ, ©e nazwa
- automatycznie utworzonej sekwencji
- <SMALL>SEQUENCE</SMALL> bЙdzie nastЙpuj╠ca:
- &lt;<I>tabela</I>&gt;_&lt;<I>kolumnatypuserial</I>&gt;_<I>seq</I>,
- gdzie
- <I>tabela</I> i <I>kolumnatypuserial</I> s╠ nazwami Twojej tabeli i
- Twojej kolumny typu <SMALL>SERIAL</SMALL>.
-
- <P>Inne rozwi╠zanie to u©ycie funkcji <I>currval</I>() na pola typu
- <SMALL>SERIAL</SMALL> po dodaniu nowej warto╤ci do rzЙdu zawieraj╠cego
- kolumnЙ typu <SMALL>SERIAL</SMALL> z wstawion╠ domy╤lnie warto╤ci╠,
- np.</P>
-<PRE>
- INSERT INTO person (name) VALUES ('Blaise Pascal');
- new_id = output of "SELECT currval('person_id_seq')";
-</PRE>
- Ostatecznie mo©esz u©yФ <A href="#4.16"><SMALL>OID</SMALL></A>
- zwracanej po wykonaniu <SMALL>INSERT</SMALL>, chocia© to jest najmniej
- przeno╤ne rozwi╠zanie.
- W Perlu, wykorzystuj╠c bibliotekЙ DBI z moduЁem Edmunda Mergla
- DBD::Pg, oid jest dostЙpny poprzez <I>$sth-&gt;{pg_oid_status}</I> po
- wykonaniu <I>$sth-&gt;execute()</I>.
-
- <H4><A name="4.15.3">4.15.3</A>) Czy u©ycie <I>currval()</I> i
- <I>nextval()</I> nie doprowadzi do race condition z innymi
- u©ytkownikami?</H4>
-
- <P>Nie. currval() zwraca bie©╠c╠ warto╤Ф przypisan╠ przez TwСj
- backend, a nie przez wszystkich u©ytkownikСw.</P>
-
- <H4><A name="4.15.4">4.15.4</A>) Dlaczego numery sekwencji nie s╠
- ponownie u©ywane przy przerwaniu transakcji?
- Sk╠d siЙ bior╠ luki w numerowaniu kolumny tabeli
- sekwancjami/SERIALem?</H4>
-
- <P>Aby poprawiФ zbie©no╤Ф (concurrency), warto╤ci sekwencji s╠
- podawane dziaЁaj╠cym transakcjom kiedy tego potrzebuj╠ i nie s╠
- blokowane dopСki transakcja siЙ nie zakoЯczy. To spowoduje przerwy w
- numerowaniu z przerwanych transakcji.</P>
-
- <H4><A name="4.16">4.16</A>) Co to jest <SMALL>OID</SMALL>? Co to
- jest
- <SMALL>TID</SMALL>?</H4>
-
- <P><SMALL>OID</SMALL> s╠ PostgreSQL'owym rozwi╠zaniem problemu
- unikalnych numerСw rzЙdСw. Ka©dy rz╠d tworzony przez PostgreSQL
- otrzymuje unikalny <SMALL>OID</SMALL>. Wszystkie <SMALL>OID</SMALL>y
- generowane podczas procesu uruchamianego przez skrypt
- <I>initdb</I> maj╠ mniejsz╠ warto╤Ф ni© 16384 (na podstawie pliku
- <I>backend/access/transam.h</I>). Wszystkie
- <SMALL>OID</SMALL>y tworzone przez u©ytkownika sa rСwne lub wiЙksze
- podanej wcze╤niej warto╤ci. Domy╤lnie
- wszystkie <SMALL>OID</SMALL>y s╠ unikalne nie tylko w pojedyЯczej
- tabeli czy bazie danych ale w caЁej instalacji PostgreSQL.</P>
-
- <P>PostgreSQL u©ywa <SMALL>OIDСw</SMALL> w swoim wewnЙtrznym systemie
- tabel, aby mo©na byЁo je Ё╠czyФ.
- Te <SMALL>OIDy</SMALL> mog╠ byc u©ywane aby identyfikowac rzЙdy w
- tabelach i wykorzystywaФ je w zЁ╠czeniach tych tabel. Zaleca siЙ aby╤
- u©ywaЁ typu <SMALL>OID</SMALL> aby przechowywaФ warto╤ci
- <SMALL>OID</SMALL>. Mo©esz utworzyФ indeks na polu
- <SMALL>OID</SMALL> aby dostЙp do niego byЁ szybszy.</P>
-
- <P><SMALL>OID</SMALL> s╠ przypisane do wszystkich rzЙdСw z jednego
- gЁСwnego miejsca i u©ywane sa przez wszystkie bazy danych. Je╤li
- chciaЁby╤ zmieniФ <SMALL>OID</SMALL> na co╤ innego, lub je╤li
- chciaЁby╤ zrobiФ kopiЙ tabeli, z orginalnymi <SMALL>OIDami</SMALL>
- nie ma ©adnego przeciwwskazania aby╤ to zrobiЁ:</P>
-
-<PRE>
- CREATE TABLE new_table(old_oid oid, mycol int);
- SELECT old_oid, mycol INTO new FROM old;
- COPY new TO '/tmp/pgtable';
- DELETE FROM new;
- COPY new WITH OIDS FROM '/tmp/pgtable';
-<!--
- CREATE TABLE new_table (mycol int);
- INSERT INTO new_table (oid, mycol) SELECT oid, mycol FROM old_table;
--->
-</PRE>
-
- <P><SMALL>OIDy</SMALL> s╠ przechowywane jako cztero-bajtowe liczby
- caЁkowite i skoЯcz╠ siЙ po osi╠gniЙciu czterech miliardСw. Nikt jak
- dot╠d nie zgЁosiЁ aby co╤ takiego siЙ stalo, ale mamy zamiar pozbyФ
- siЙ tego ograniczenia zanim kto╤ to zgЁosi.</P>
-
- <P><SMALL>TID</SMALL> s╠ u©ywane aby zidentyfikowaФ konkretne rzЙdy z
- blokami i warto╤ci╠ ofsetСw. <SMALL>TIDy</SMALL> zmieniaj╠ siЙ wraz
- ze zmianami rzЙdСw. Sa u©ywane przez indeksy, aby wskazywaФ do
- fizycznych rzЙdСw.</P>
-
- <H4><A name="4.17">4.17</A>) Jakie jest znaczenie niektСrych terminСw
- w PostgreSQL?</H4>
-
- <P>W czЙ╤ci kodu ╪rСdЁowego i starszej dokumentacji u©ywamy terminСw,
- ktСre maj╠ bardziej ogСlne znaczenie. Oto niektСre z nich:</P>
-
- <UL>
- <LI>table, relation, class</LI>
-
- <LI>row, record, tuple</LI>
-
- <LI>column, field, attribute</LI>
-
- <LI>retrieve, select</LI>
-
- <LI>replace, update</LI>
-
- <LI>append, insert</LI>
-
- <LI><SMALL>OID</SMALL>, serial value</LI>
-
- <LI>portal, cursor</LI>
-
- <LI>range variable, table name, table alias</LI>
- </UL>
-
- <P>ListЙ terminСw zwi╠zanych z bazami danych mo©esz znale╪Ф pod tym
- adresem:<A href=
- "http://www.comptechnews.com/~reaster/dbdesign.html">http://www.comptechnews.com/~reaster/dbdesign.html</A></P>
-
- <H4><A name="4.18">4.18</A>) Sk╠d bierze siЙ ten bЁ╠d <I>"ERROR:
- Memory exhausted in AllocSetAlloc()"</I>?</H4>
-
- <P>Je╤li u©ywasz wersji starszej ni© 7.1, upgrade mo©e rozwi╠zaФ ten
- problem. Jest tak©e mozliwe, ©e po prostu wyczerpaЁa Ci siЙ pamiЙФ
- wirtualna (virtual memory) w systemie lub TwСj kernel ma zbyt nisko
- ustawione limity dla pewnych zasobСw. SprСbuj wykonaФ nastЙpuj╠ce
- polecenia zanim uruchomisz <I>postmaster'a</I>:</P>
-<PRE>
- ulimit -d 262144
- limit datasize 256m
-</PRE>
- W zale©no╤ci od shell'a jakiego u©ywasz jedno z tych poleceЯ mo©e nie
- zadziaЁaФ, ale to ustawienie pozwoli ustawiФ segment danych dla
- procesu znacznie wiЙkszy i byФ mo©e pozwoli wykonaФ zapytanie.
- To polecenie zadziaЁa dla bie©╠cego procesu oraz wszytkich podprocesСw
- utworzonych po wykonaniu polecenia. Je╤li ten problem wystЙpuje z
- klientem <SMALL>SQL</SMALL>, poniewa© backend zwraca zbyt du©o danych,
- sprСbuj wykonaФ to polecenie przed uruchomieniem klienta.
-
- <H4><A name="4.19">4.19</A>) Jak sprawdziФ jakiej wersji PostgreSQL
- u©ywam?</H4>
-
- <P>W <I>psql</I>, wpisz <CODE>select version();</CODE></P>
-
- <H4><A name="4.20">4.20</A>) Dlaczego operacje, ktСre wykonujЙ na
- du©ych obiektach "large-object" zwracaj╠ komunikat:
- <I>"invalid large obj descriptor"</I>?</H4>
-
- <P>Musisz u©yФ <CODE>BEGIN WORK</CODE> i <CODE>COMMIT</CODE>
- przed i po u©yciu uchwytu do du©ego obiektu, tzn. musisz nimi otoczyФ
- funkcje <CODE>lo_open</CODE> ... <CODE>lo_close.</CODE></P>
-
- <P>Obecnie PostgreSQL u©ywj╠c "rule" zamyka uchwyt do du©ego obiektu
- przy ka©dym wywoЁaniu "commit". WiЙc pierwsze prСba zrobienia
- czegokolwiek z uchwytem spowoduje wypisanie: <I>invalid large obj
- descriptor</I>. Kod, ktСry do tej pory dziaЁaЁ (przynajmniej
- wiЙkszo╤Ф razy) bЙdzie teraz generowaЁ informacjЙ o bЁЙdzie je╤li nie
- bЙdziesz korzystaЁ z transakcji.</P>
-
- <P>Je╤li u©ywasz interfejsu klienta jak <SMALL>ODBC</SMALL> byФ mo©e
- bЙdziesz musiaЁ ustawiФ <CODE>auto-commit off.</CODE></P>
-
- <H4><A name="4.21">4.21</A>) Jak stworzyФ kolumnЙ ktСrej domy╤ln╠
- warto╤ci╠ bЙdzie bie©╠cy czas?</H4>
-
- <P>U©yj <I>CURRENT_TIMESTAMP</I>:</P>
-<PRE>
-<CODE>CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
-</CODE>
-</PRE>
-
- <H4><A name="4.22">4.22</A>) Dlaczego zapytania u©ywaj╠ce
- <CODE><SMALL>IN</SMALL></CODE> sa takie wolne?</H4>
-
- <P>Obecnie Ё╠czymy podzapytania w outer queries poprzez sekwencyjne
- przeszukiwanie wynikСw podzapytania dla ka©dego rzЙdu z outer query.
- Mo©na to omin╠Ф zastЙpuj╠c <CODE>IN</CODE> przez
- <CODE>EXISTS</CODE>:</P>
-<PRE>
-<CODE>SELECT *
- FROM tab
- WHERE col1 IN (SELECT col2 FROM TAB2)
-</CODE>
-</PRE>
- na:
-<PRE>
-<CODE>SELECT *
- FROM tab
- WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2)
-</CODE>
-</PRE>
- Mamy zamiar poprawiФ to ograniczenie w przyszЁych wydaniach.
-
- <H4><A name="4.23">4.23</A>) Jak wykonaФ "outer join"?</H4>
-
- <P>PostgreSQL 7.1 i pС╪niejsze wersje maj╠ zaimplementowane outer join
- wykorzystuj╠c standardow╠ skЁadnie SQL. Poni©ej dwa przykЁady:</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>Te dwa identyczne zapytania Ё╠cz╠ kolumnЙ t1.col z kolumn╠ t2.col,
- ale tak©e zwrСc╠ niepoЁ╠czone rzЙdy w t1 (te ktСre nie pasuj╠ w t2).
- <SMALL>RIGHT</SMALL> join dodaЁby niepoЁ╠czone rzЙdy z tabeli t2.
- <SMALL>FULL</SMALL> join zwrСciЁby rzЙdy plus dodatkowo wszystkie
- rzЙdy z tabel t1 i t2. SЁowo <SMALL>OUTER</SMALL> jest opcjonalne i
- jest dodawane domy╤lnie przy
- <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL>, i <SMALL>FULL</SMALL>
- join'ach. ZwykЁe join'y s╠ nazywane <SMALL>INNER</SMALL> joins.</P>
-
- <P>W poprzednich wersjach "outer joins" mog╠ byФ zasymulowane poprzez
- u©ycie slowa kluczowego
- <SMALL>UNION</SMALL> i <SMALL>NOT IN</SMALL>. Dla przykЁadu, Ё╠cz╠c
- tabele <I>tab1</I> i <I>tab2</I>, nastЙpuj╠ce zapytanie wykonuje
- <I>outer</I> join:<BR>
- <BR>
- </P>
-<PRE>
- SELECT tab1.col1, tab2.col2
- FROM tab1, tab2
- WHERE tab1.col1 = tab2.col1
- UNION ALL
- SELECT tab1.col1, NULL
- FROM tab1
- WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
- ORDER BY col1
-</PRE>
-
- <H4><A name="4.24">4.24</A>) Jak wykonywaФ zapytanie u©ywaj╠ce kilku
- baz danych jednocze╤nie?</H4>
-
- <P>Nie ma takiej mo©liwo╤ci aby w zapytaniu odpytawaФ inn╠ baze danych
- poza bie©╠c╠. Poniewa© PostgreSQL Ёaduje specyficzne dla bazy danych
- katalogi systemowe, nie jest do koЯca jasne jak zapytanie pomiЙdzy
- rС©nymi bazami danych powinno siЙ zachowywaФ.</P>
-
- <P>Oczywi╤cie klient mo©e Ё╠czyФ siЙ z rС©nymi bazami danych i Ё╠czyФ
- informacjЙ w ten sposСb uzyskan╠.</P>
-
- <H4><A name="4.25">4.25</A>) Jak zwrСciФ w funkcji wiele rzЙdСw lub
- kolumn?</H4>
-
- <P>Mo©esz zwracaФ zbiory z funkcji PL/pgSQL u©ywaj╠c
- <i>refcursors</i>. Zobacz <a
- href="http://developer.postgresql.org/docs/postgres/plpgsql-cursors.html">
- http://developer.postgresql.org/docs/postgres/plpgsql-cursors.html,</a>
- sekcjЙ 23.7.3.3.</P>
-
-
- <H2 align="center">Rozwijanie PostgreSQL</H2>
-
- <H4><A name="5.1">5.1</A>) NapisaЁem wЁasn╠ funkcjЙ. Kiedy u©yjЙ jej
- w <I>psql</I>, program zrzuca pamiЙФ (dump core)?</H4>
-
- <P>Problem mo©e byФ spowodowany przez bardzo wiele rzeczy. SprСbuj
- najpierw przetestowaФ Twoj╠ funkcjЙ w samodzielnie dziaЁaj╠cym programie.
- </P>
-
- <H4><A name="5.2">5.2</A>) Jak mogЙ dodaФ/zgЁosiФ nowe typy czy
- funkcje do PostgreSQL?</H4>
-
- <P>Wy╤lij Twoje propozycje na listЙ mailow╠ <I>pgsql-hackers</I>,
- wtedy prawdopodobnie TwСj kod znajdzie siЙ w katalogu <I>contrib/</I>.</P>
-
- <H4><A name="5.3">5.3</A>) Jak napisaФ funkcjЙ C zwracaj╠c╠ krotkЙ
- (tuple)?</H4>
-
- <P>To wymaga wysiЁku tak olbrzymiego, ©e nawet autorzy nigdy tego nie
- prubowali, chocia© z zalo©eЯ wynika, ©e jest to mo©liwe.</P>
-
- <H4><A name="5.4">5.4</A>) ZmieniЁem plik ╪rСdЁowy. Dlaczego po
- rekompilacji nie widaФ zmiany?</H4>
-
- <P>Pliki <I>Makefiles</I> nie maj╠ dorzuconych odpowiednich
- zale©no╤ci dla plikСw nagЁСwkowych (include files). Wykonaj najpierw
- <I>make clean</I>, a nastЙpnie ponownie <I>make</I>.
- Je╤li u©ywasz <SMALL>GCC</SMALL> mo©esz u©yФ opcji
- <I>--enable-depend</I> przy wykonywaniu <I>configure</I> aby
- </BODY>
-</HTML>
-
diff --git a/doc/src/FAQ/FAQ_russian.html b/doc/src/FAQ/FAQ_russian.html
deleted file mode 100644
index de99068802b..00000000000
--- a/doc/src/FAQ/FAQ_russian.html
+++ /dev/null
@@ -1,1387 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD html 4.01 transitional//EN">
-
-<HTML>
- <!-- DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN" -->
- <!-- HTML -->
-
- <HEAD>
- <META name="generator" content="HTML Tidy, see www.w3.org">
-
- <TITLE>PostgreSQL FAQ</TITLE>
- </HEAD>
-
- <BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000"
- alink="#0000ff">
- <H1>Ответы на часто задаваемые вопросы по PostgreSQL</H1>
-
- <P>Дата последнего обновления: Четверг 11 Июня 06:36:10 EDT 2002</P>
-
- <P>Английский вариант сопровождает: Брюс Момьян (Bruce Momjian) (<A href=
- "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
- </P>
- <P>Перевел на русский: Виктор Вислобоков (<A href=
- "mailto:pgman@candle.pha.pa.us">victor_v@permonline.ru</A>)<BR>
- </P>
-
- <P>Самую свежую английскую версию документа можно найти на <A
- href=
- "http://www.postgresql.org/docs/faq-english.html">http://www.PostgreSQL.org/docs/faq-english.html</A>.</P>
-
- <P>Ответы на вопросы специфичные для конкретных платформ можно найти на <A href=
- "http://www.postgresql.org/users-lounge/docs/faq.html">http://www.PostgreSQL.org/users-lounge/docs/faq.html</A>.</P>
- <HR>
-
- <H2 align="center">Общие вопросы</H2>
- <A href="#1.1">1.1</A>) Что такое PostgreSQL? Как произносится это
- название?<BR>
- <A href="#1.2">1.2</A>) Каковы авторские права на PostgreSQL?<BR>
- <A href="#1.3">1.3</A>) На каких Unix платформах работает PostgreSQL?<BR>
- <A href="#1.4">1.4</A>) Существуют ли версии портированные не на Unix системы?<BR>
- <A href="#1.5">1.5</A>) Где можно взять PostgreSQL?<BR>
- <A href="#1.6">1.6</A>) Где получить поддержку?<BR>
- <A href="#1.7">1.7</A>) Какая последняя версия?<BR>
- <A href="#1.8">1.8</A>) Какая документация имеется в наличии?<BR>
- <A href="#1.9">1.9</A>) Как найти информацию об известных ошибках или отсутствующих
- возможностях?<BR>
- <A href="#1.10">1.10</A>) Как научиться <SMALL>SQL</SMALL>?<BR>
- <A href="#1.11">1.11</A>) Решена ли в PostgreSQL проблема 2000-го года (Y2K)?<BR>
- <A href="#1.12">1.12</A>) Как присоединится к команде разработчиков?<BR>
- <A href="#1.13">1.13</A>) Как отравить сообщение об ошибке?<BR>
- <A href="#1.14">1.14</A>) Как сравнивать PostgreSQL с другими
- <SMALL>СУБД</SMALL>?<BR>
- <A href="#1.15">1.15</A>) Как оказать финансовую помощь PostgreSQL?<BR>
-
-
- <H2 align="center">Вопросы пользователей по клиентской части</H2>
- <A href="#2.1">2.1</A>) Существуют ли <SMALL>ODBC</SMALL> драйвера для
- PostgreSQL?<BR>
- <A href="#2.2">2.2</A>) Какие инструменты существуют для использования
- PostgreSQL через Web?<BR>
- <A href="#2.3">2.3</A>) Есть ли у PostgreSQL графический интерфейс
- пользователя? Генератор отчетов? Встроенный интерфейс для языка
- запросов?<BR>
- <A href="#2.4">2.4</A>) Какие языки могут взаимодействовать с
- PostgreSQL?<BR>
-
-
- <H2 align="center">Вопросы администрирования</H2>
- <A href="#3.1">3.1</A>) Как мне установить PostgreSQL в место отличное
- от <I>/usr/local/pgsql</I>?<BR>
- <A href="#3.2">3.2</A>) Когда я запускаю <I>postmaster</I>, я получаю
- сообщение <I>Bad System Call</I> или сообщение core dumped. Почему?<BR>
- <A href="#3.3">3.3</A>) Когда я пытаюсь запустить <I>postmaster</I>, я
- получаю ошибки <I>IpcMemoryCreate</I>. Почему?<BR>
- <A href="#3.4">3.4</A>) Когда я пытаюсь запустить <I>postmaster</I>, я
- получаю ошибки <I>IpcSemaphoreCreate</I>. Почему?<BR>
- <A href="#3.5">3.5</A>) Как мне управлять соединениями с других
- компьютеров?<BR>
- <A href="#3.6">3.6</A>) Какие настройки мне нужно сделать для улучшения
- производительности?<BR>
- <A href="#3.7">3.7</A>) Какие возможности для отладки есть в наличии?<BR>
- <A href="#3.8">3.8</A>) Почему я получаю сообщение <I>"Sorry, too many
- clients"</I> когда пытаюсь подключиться к базе?<BR>
- <A href="#3.9">3.9</A>) Что это за файлы <I>pg_sorttempNNN.NN</I>
- в моем каталоге с базой данных?<BR>
-
-
- <H2 align="center">Вопросы эксплуатации</H2>
- <A href="#4.1">4.1</A>) В чем отличие между бинарным и нормальным
- курсором?<BR>
- <A href="#4.2">4.2</A>) Как выполнить <SMALL>SELECT</SMALL> только
- для нескольких первых строчек запроса?<BR>
- <A href="#4.3">4.3</A>) Как получить список таблиц или других
- компонентов в <I>psql</I>?<BR>
- <A href="#4.4">4.4</A>) Как удалить колонку из таблицы?<BR>
- <A href="#4.5">4.5</A>) Каковы максимальные размеры для записей,
- таблиц и базы данных?<BR>
- <A href="#4.6">4.6</A>) Как много дискового пространства в базе данных
- нужно для сохранения данных из обычного текстового файла?<BR>
- <A href="#4.7">4.7</A>) Как мне убедиться, что существуют нужные мне
- таблицы, индексы, базы данных и пользователи?<BR>
- <A href="#4.8">4.8</A>) У меня медленно работают запросы или не
- происходит использования индексов. Почему?<BR>
- <A href="#4.9">4.9</A>) Как посмотреть на то, как оптимизатор выполняет
- мой запрос?<BR>
- <A href="#4.10">4.10</A>) Что такое R-tree индекс?<BR>
- <A href="#4.11">4.11</A>) Что такое Genetic Query Optimizer?<BR>
- <A href="#4.12">4.12</A>) Как мне выполнить поиск регулярного выражения
- и поиск независимый от регистра букв поиск регулярного выражения?
- Как мне использовать индекс для поиска независимого от регистра букв?<BR>
- <A href="#4.13">4.13</A>) Как я могу определить, что значение поля равно
- <SMALL>NULL</SMALL> в каком-либо запросе?<BR>
- <A href="#4.14">4.14</A>) Каковы отличия между разными символьными
- типами?<BR>
- <A href="#4.15.1">4.15.1</A>) Как мне создать поле serial/с-авто-увеличением?<BR>
- <A href="#4.15.2">4.15.2</A>) Как мне получить значение при вставке
- <SMALL>SERIAL</SMALL>?<BR>
- <A href="#4.15.3">4.15.3</A>) Не может ли получиться так, что
- использование <I>currval()</I> и <I>nextval()</I> приведет к
- зациклированию с другими пользователями?<BR>
- <A href="#4.15.4">4.15.4</A>) Почему числа из моей последовательности
- не используются снова при отмене транзакции? Почему создаются разрывы
- при нумерации в колонке, где я использую последовательность/SERIAL?<BR>
- <A href="#4.16">4.16</A>) Что такое <SMALL>OID</SMALL>? Что такое
- <SMALL>TID</SMALL>?<BR>
- <A href="#4.17">4.17</A>) Что означают некоторые термины используемые в
- PostgreSQL?<BR>
- <A href="#4.18">4.18</A>) Почему я получаю ошибку <I>"ERROR: Memory
- exhausted in AllocSetAlloc()"</I>?<BR>
- <A href="#4.19">4.19</A>) Как мне узнать, какая версия PostgreSQL
- запущена?<BR>
- <A href="#4.20">4.20</A>) Почему при работе с моим большим объектом
- я получаю ошибку <I>"invalid large obj descriptor"</I>?<BR>
- <A href="#4.21">4.21</A>) Как мне создать колонку которая по умолчанию
- будет содержать текущее время?<BR>
- <A href="#4.22">4.22</A>) Почему мои подзапросы, использующие
- <CODE><SMALL>IN</SMALL></CODE> так медленно работаеют?<BR>
- <A href="#4.23">4.23</A>) Как выполнить внешнее связывание?<BR>
- <A href="#4.24">4.24</A>) Как выполнять запросы, использующие несколько
- баз данных?<BR>
- <A href="#4.25">4.25</A>) Как мне вернуть из функции несколько записей?<BR>
- <A href="#4.26">4.26</A>) Почему я не могу надежно создавать/удалять
- временные таблицы в функциях PL/PgSQL?<BR>
-
- <H2 align="center">Расширения PostgreSQL</H2>
- <A href="#5.1">5.1</A>) Я написал функцию определяемую пользователем.
- Когда я запускаю ее в <I>psql</I>, почему я получаю dump core?<BR>
- <A href="#5.2">5.2</A>) Как я могу внести некоторые классные новые
- типы и функции в PostgreSQL?<BR>
- <A href="#5.3">5.3</A>) Как мне написать C функцию, возвращающую
- запись?<BR>
- <A href="#5.4">5.4</A>) Я изменил исходный файл. Почему после
- перекомпиляции я не вижу изменений?<BR>
-
- <HR>
-
- <H2 align="center">Общие вопросы</H2>
-
- <H4><A name="1.1">1.1</A>) Что такое PostgreSQL?</H4>
-
- <P>PostgreSQL произносится <I>Post-Gres-Q-L (Пост-Грес-Кью-Эл)</I>.</P>
-
- <P>PostgreSQL - это расширение СУБД POSTGRES, исследовательский
- прототип нового поколения <SMALL>СУБД</SMALL>.
- PostgreSQL одновременно сохраняет мощную модель данных и общирное
- количество типов POSTGRES, и замещает язык запросов PostQuel на
- расширенное подмножество <SMALL>SQL</SMALL>. PostgreSQL - это
- свободное и полностью открытое программное обеспечение.</P>
-
- <P>Разработку PostgreSQL выполняет команда,
- связанная через Internet, все участники которой подписаны на список
- рассылки разработчиков. В настоящее время, их координатором
- является Марк Форнай (Marc G. Fournier) (<A href=
- "mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A>). (См.
- ниже о том, как подключиться к разработке). Эта команда теперь
- отвечает за всю разработку PostgreSQL.</P>
-
- <P>Авторами PostgreSQL 1.01 являются Эндрю Ю (Andrew Yu) и Джоли Чен
- (Jolly Chen). Многие другие внесли свой вклад в перенос на другие
- платформы, тестирование, отладку и расширение этого кода. Первоначальный
- код Postgres, из которого появился PostgreSQL, был итогом усилий многих
- академических студентов, неакадемических студентов и множества
- разных программистов, работавших под руководством профессора
- Майкла Стоунбрейкера (Michael Stonebraker) в Калифорнийском университете,
- Беркли.</P>
-
- <P>Первоначальное имя, данное в Беркли, было Postgres. Когда
- в 1995 году была добавлена функциональность <SMALL>SQL</SMALL>,
- это имя было изменено на Postgres95. Но и это имя было изменено
- в конце 1996 на PostgreSQL.</P>
-
- <H4><A name="1.2">1.2</A>) Каковы авторские права на PostgreSQL?</H4>
-
- <P>PostgreSQL попадает под действие следующего COPYRIGHT:</P>
-
- <P>Система Управления Базами Данных PostgreSQL</P>
-
- <P>Portion copyright (c) 1996-2002, PostgreSQL Global Development
- Group Portions Copyright (c) 1994-6 Regents of the University of
- California</P>
-
- <P>Предоставляются права на использование, копирование, изменение
- и распространение данного программного обеспечения и его документации
- для любых целей, бесплатно и без подписания какого-либо соглашения,
- при условии что для каждой копии будут предоставлены данное выше
- замечание об авторских правах, текущий параграф и два следующих
- параграфа.</P>
-
- <P>КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ НЕСЕТ НИКАКОЙ ОТВЕТСТВЕННОСТИ
- ЗА ЛЮБЫЕ ПОВРЕЖДЕНИЯ, ВКЛЮЧАЯ ПОТЕРЮ ДОХОДА, НАНЕСЕННЫЕ ПРЯМЫМ
- ИЛИ НЕПРЯМЫМ, СПЕЦИАЛЬНЫМ ИЛИ СЛУЧАЙНЫМ ИСПОЛЬЗОВАНИЕМ ДАННОГО
- ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ЕГО ДОКУМЕНТАЦИИ, ДАЖЕ ЕСЛИ
- КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ БЫЛ ИЗВЕЩЕН О ВОЗМОЖНОСТИ ТАКИХ
- ПОВРЕЖДЕНИЙ.</P>
-
- <P>КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ СПЕЦИАЛЬНО ОТКАЗЫВАЗЫВАЕТСЯ ПРЕДОСТАВЛЯТЬ
- ЛЮБЫЕ ГАРАНТИИ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ТОЛЬКО ЭТИМИ ГАРАНТИЯМИ:
- НЕЯВНЫЕ ГАРАНТИИ ПРИГОДНОСТИ ТОВАРА ИЛИ ПРИГОДНОСТИ ДЛЯ ОТДЕЛЬНОЙ ЦЕЛИ.
- ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ НА ОСНОВЕ ПРИЦИПА
- "КАК ЕСТЬ" И КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ ОБЯЗАН ПРЕДОСТАВЛЯТЬ
- СОПРОВОЖДЕНИЕ, ПОДДЕРЖКУ, ОБНОВЛЕНИЯ, РАСШИРЕНИЯ ИЛИ ИЗМЕНЕНИЯ.</P>
-
- <P>Вышеизложенное является BSD лицензией, классической лицензией
- программного обеспечения с открытым кодом. Эта лицензия не накладывает
- ограничений на использование исходного кода. Нам нравится эта лицензия
- и мы не собираемся её менять.</P>
-
- <H4><A name="1.3">1.3</A>) На каких Unix платформах работает PostgreSQL?</H4>
-
- <P>Обычно, PostgreSQL может работать на любой современной платформе
- совместимой с Unix. В инструкции по установке, вы найдете список
- тех платформ, на которых были проведены тестовые запуски PostgreSQL
- к моменту выхода данной версии.</P>
-
- <H4><A name="1.4">1.4</A>) Существуют ли версии перенесенные не на Unix
- системы?</H4>
-
- <P><STRONG>Клиент</STRONG></P>
-
- <P>Для запуска на платформах MS Windows возможна компиляция C
- библиотеки <I>libpq</I>, psql и других интерфесов и бинарных файлов.
- В этом случае, клиент запускается на MS Windows и связывается по
- TCP/IP с сервером, запущенным на одной из поддерживаемых Unix
- платформ. В дистрибутив включается файл <I>win31.mak</I> для того,
- чтобы можно было провести сборку библиотеки <I>libpq</I> и
- <I>psql</I> для Win32. PostgreSQL также работает через
- <SMALL>ODBC</SMALL>.</P>
-
- <P><STRONG>Сервер</STRONG></P>
-
- <P>Сервер БД может быть запущен на Windows NT и Win2k, используя
- библиотеку Cygwin, разработанную для переноса программного обеспечения Unix
- в NT. Смотрите <I>pgsql/doc/FAQ_MSWIN</I> в дистрибутиве или <A href=
- "http://www.postgresql.org/docs/faq-mswin.html">MS Windows FAQ</A>
- на нашем сайте. Мы не планируем специально переносить PostgreSQL
- на какую-либо платформу Microsoft.</P>
-
- <H4><A name="1.5">1.5</A>) Где можно взять PostgreSQL?</H4>
-
- <P>Например, воспользовавшись анонимным доступом на ftp сайт
- PostgreSQL <A href=
- "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>.
- Список зеркал вы найдете на нашем основном сайте.</P>
-
- <H4><A name="1.6">1.6</A>) Где получить поддержку?</H4>
-
- <P>Основной список рассылки: <A href=
- "mailto:pgsql-general@PostgreSQL.org">pgsql-general@PostgreSQL.org</A>.
- В нем можно обсуждать любые темы, касающиеся PostgreSQL. Чтобы
- подписаться, отправьте письмо по электронной почте, в котором в
- теле письма (не в теме) напишите следующие строки:</P>
-<PRE>
- subscribe
- end
-</PRE>
-
- <P>на адрес <A href=
- "mailto:pgsql-general-request@PostgreSQL.org">pgsql-general-request@PostgreSQL.org</A>.</P>
-
- <P>Существует дайжест список. Чтобы подписаться на него, отправьте
- письмо по электронной почте на адрес: <A href=
- "mailto:pgsql-general-digest-request@PostgreSQL.org">pgsql-general-digest-request@PostgreSQL.org</A>
- и в теле письма напишите строчки строчки:</P>
-<PRE>
- subscribe
- end
-</PRE>
- Дайжесты отправляются подписчикам, когда в основном списке рассылки
- накопится около 30 килобайт сообщений.
-
- <P>Доступен и список рассылки сообщений об ошибках. Чтобы подписаться на этот
- список, отправьте по электронной почте письмо на адрес <A href=
- "mailto:pgsql-bugs-request@PostgreSQL.org">pgsql-bugs-request@PostgreSQL.org</A>
- и в теле письма напишите строчки строчки:</P>
-<PRE>
- subscribe
- end
-</PRE>
- Также имеется список рассылки с дискуссиями разработчиков. Чтобы подписаться
- на этот список, отправьте по электронной почте письмо на адрес
- <A href=
- "mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</A>
- и в теле письма напишите строчки строчки:
-<PRE>
- subscribe
- end
-</PRE>
-
- <P>Дополнительные списки рассылки и инфомацию о PostgreSQL можно найти
- на домашней страничке PostgreSQL по адресу:</P>
-
- <BLOCKQUOTE>
- <A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A>
- </BLOCKQUOTE>
-
- <P>Еще существует IRC канал на EFNet, с названием
- <I>#PostgreSQL</I>. Я использую для подключения к этому каналу команду Unix
- <CODE>irc -c '#PostgreSQL' "$USER" irc.phoenix.net.</CODE></P>
-
- <P>Список коммерческой поддержки компаний доступен на
- <A href=
- "http://www.postgresql.org/users-lounge/commercial-support.html">http://www.postgresql.org/users-lounge/commercial-support.html</A>.</P>
-
- <H4><A name="1.7">1.7</A>) Какая последняя версия?</H4>
-
- <P>Последний выпуск PostgreSQL - это версия 7.2.</P>
-
- <P>Мы планируем выпускать новые версии каждые четыре месяца.</P>
-
- <H4><A name="1.8">1.8</A>) Какая документация имеется в наличии?</H4>
-
- <P>В дистрибутив включаются различные руководства, страницы
- электронного руководства man и некоторые маленькие тестовые примеры.
- Смотрите в каталог <I>/doc</I>. Вы также можете просматривать
- документацию в Интернет по адресу <A href=
- "http://www.PostgreSQL.org/users-lounge/docs/">http://www.PostgreSQL.org/users-lounge/docs/</A>.</P>
-
- <P>Существует две книги по PostgreSQL доступные по адресам <A href=
- "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
- и <a href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a>.
- Список книг по PostgreSQL, которые можно купить доступен по адресу
- <a href="http://www.postgresql.org/books/">http://www.postgresql.org/books/</a>.
- Кроме того, по адресу <a href="http://techdocs.postgresql.org">http://techdocs.postgresql.org/</a>
- вы можете найти коллекцию технических статей посвященных PostgreSQL.</p>
-
-
- <P><I>psql</I> имеет несколько прекрасных команд \d для отображения
- информации по типам, операторам, функциям, агрегатам и т.д.</P>
-
- <P>Наш сайт содержит еще больше информации.</P>
-
- <H4><A name="1.9">1.9</A>) Как найти информацию об известных ошибках
- или отсутствующих возможностях?</H4>
-
- <P>PostgreSQL поддерживает расширенный подкласс <SMALL>SQL</SMALL>-92.
- Смотрите наш список <A href="http://developer.postgresql.org/todo.php">TODO</A>
- на предмет известных ошибок, отсутствующих особенностях и будущих
- планов.</P>
-
- <H4><A name="1.10">1.10</A>) Как мне научиться <SMALL>SQL</SMALL>?</H4>
-
- <P>Книга по PostgreSQL на <A href=
- "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
- научит <SMALL>SQL</SMALL>. Существует другая книга по PostgreSQL на
- <A href="http://www.commandprompt.com/ppbook/">
- http://www.commandprompt.com/ppbook.</A>
- Есть прекрасный учебник на <A href=
- "http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A>
- на <A href=
- "http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">
- http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,</A>
- и на <A href=
- "http://sqlcourse.com/">http://sqlcourse.com.</A></P>
-
- <P>Еще один учебник - это книга "Teach Yourself SQL in 21 Days, Second Edition"
- (Освой самостоятельно SQL за 21 день, Вторая редакция)
- на <A href=
- "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A></P>
-
- <P>Многим из наших пользователей нравится книга
- <I>The Practical SQL Handbook</I>,
- Bowman, Judith S., et al., Addison-Wesley. Другим нравится <I>The
- Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>
-
- <H4><A name="1.11">1.11</A>) Решена ли в PostgreSQL проблема 2000-го года (Y2K)?</H4>
-
- <P>Да, мы легко манипулируем датами после 2000 года и перед 2000 годом.</P>
-
- <H4><A name="1.12">1.12</A>) Как присоединится к команде разработчиков?</H4>
-
- <P>Для начала, скачайте последнюю версию исходных текстов и прочтите
- документацию разработчиков PostgreSQL на нашем сайте или в дистрибутиве.
- Затем, подпишитесь на списки рассылки <I>pgsql-hackers</I> и
- <I>pgsql-patches</I>. Далее, отправляйте исправления (patches) высокого
- качества в список pgsql-patches.</P>
-
- <P>Существует ограниченный список людей, который имеют привелегию
- вносить изменения в <SMALL>CVS</SMALL> архив PostgreSQL. Каждый
- из этих людей в свое время отправил так много высококачественных исправлений,
- что их было невозможно оставить без внимания и они были удостоены
- превилегии вносить изменения, и мы уверены, что те исправления, которые
- они внесут будут высокого качества.</P>
-
- <H4><A name="1.13">1.13</A>) Как отравить сообщение об ошибке??</H4>
-
- <P>Пожалуйста посетите страничку <A href=
- "http://www.postgresql.org/bugs/bugs.php">PostgreSQL BugTool</A>,
- на которой предоставлены детальные инструкции о том как отправить
- сообщение об ошибке.</P>
-
- <P>Также не забудьте посмотреть на <A href=
- "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>
- на предмет более свежих версий PostgreSQL или заплат.</P>
-
- <H4><A name="1.14">1.14</A>) Как сравнивать PostgreSQL с другими
- <SMALL>СУБД</SMALL>?</H4>
-
- <P>
- Существует несколько методов сравнения программного обеспечения:
- возможности, производительность, надежность, поддержка и цена.</P>
-
- <DL>
- <DT><B>Возможности</B></DT>
-
- <DD>PostgreSQL имеет большинство возможностей представленных
- в больших коммерческих <SMALL>СУБД</SMALL>, такие как: транзакции,
- подзапросы, триггеры, обзоры (views), внешний ключ ссылочной
- целостности и разные блокировки. У нас есть некоторые возможности,
- которых нет у них: типы, определяемые пользователем, механизм
- наследования, правила и конкуретное многоверсионное управление
- для работы с содержимым блокировок.<BR>
- <BR>
- </DD>
-
- <DT><B>Производительность</B></DT>
-
- <DD>PostgreSQL имеет производительность схожую с другими коммерческими
- СУБД и с СУБД с открытым исходным кодом, в каких-то аспектах работая
- быстрее чем они, в каких-то медленее. В сравнении с MySQL или линейными
- СУБД, мы медленее при операциях вставки/обновления, потому что управляем
- транзакциями. И разумеется, MySQL не имеет каких-либо возможностей из
- перечисленых выше, в секции <I>Возможности</I>.
- Мы делаем упор на надежность и расширенные возможности, но мы также
- продолжаем увеличивать производительность с каждым выпуском. Существует
- интересная страничка в Интернет, сравнивающая PostgreSQL и MySQL на
- <A href="http://openacs.org/why-not-mysql.html">
-
- http://openacs.org/why-not-mysql.html</A><BR>
-
- <BR>
- </DD>
-
- <DT><B>Надежность</B></DT>
-
- <DD>Мы понимали, что наша <SMALL>СУБД</SMALL> должна быть надежной
- или она ничего не будет стоить. Мы стараемся выпускать хорошо проверенный,
- стабильный код, который содержит минимум ошибок. Каждый выпуск
- проходит стадию бета-тестирования по крайней мере в течении одного
- месяца и наша история выпусков показывает что мы можем предоставлять
- стабильные, монолитные выпуски, которые готовы к продуктивному
- использованию. Мы верим, что мы производим проверку не хуже,
- чем у других СУБД.<BR>
- <BR>
- </DD>
-
- <DT><B>Поддержка</B></DT>
-
- <DD>Наш список рассылки представлен большой группой разработчиков
- и пользователей, которые могут помочь решить любые возникшие
- проблемы. В то же время, мы не гарантируем какие-либо исправления,
- но и разработчики коммерческих <SMALL>СУБД</SMALL> не всегда делают
- исправления. Прямой доступ к разработчикам, сообществу пользователей,
- руководствам и исходным текстам часто делают поддержку PostgreSQL
- превосходящей другие <SMALL>СУБД</SMALL>. Существует коммерческая
- поддержка по результам возникших инцидентов, которая доступна для
- тех кому она нужна. (Смотрите <A href="#1.6">Как получить поддержку?</A>.)<BR>
- <BR>
- </DD>
-
- <DT><B>Цена</B></DT>
-
- <DD>Наш продукт бесплатен как для коммерческого так, и не для
- коммерческого использования. Вы можете добавлять свой код в наш
- продукт без ограничений, за исключением тех, что описываются в
- нашей лицензии стиля BSD, которая приведена выше.<BR>
- <BR>
- </DD>
- </DL>
-
- <H4><A name="1.15">1.15</A>) Как оказать финансовую помощь
- PostgreSQL?</H4>
-
- <P>PostgreSQL имеет одноранговую инфраструктуру с того самого времени
- как мы начали разработку 6 лет назад. Мы должны благодарить за
- это Марка Фоная (Marc Fournier), который создал эту инфраструктуру и
- управляет ей на протяжении этих лет.</P>
-
- <P>Качественная инфраструктура очень важна для проектов с открытым
- исходным кодом. Она предотвращает расколы, которые могут сильно
- задержать поступательное движение проекта.</P>
-
- <P>Разумеется, эта инфраструктура не является дешевой. Существует
- некоторое количество ежемесячных и одноразовых расходов, которые
- требуют денег. Если вы или ваша компания имеет деньги, которые
- можно передать в помощь нашим усилиям, пожалуйста посетите страничку
- <A href=
- "http://www.pgsql.com/pg_goodies">http://www.pgsql.com/pg_goodies</A>
- и сделайте свой вклад.</P>
-
- <P>Хотя на страничке говорится о PostgreSQL, Inc, пункт
- "contributions" предназначен исключительно для поддержки проекта
- PostgreSQL и не передается какой-либо конкретной компании.
- Если хотите, то можете это проверить, написав письмо на контактный адрес.</P>
- <HR>
-
- <H2 align="center">Вопросы пользователей по клиентской части</H2>
-
- <H4><A name="2.1">2.1</A>) Существуют ли <SMALL>ODBC</SMALL> драйвера
- для PostgreSQL?</H4>
-
- <P>Существует два <SMALL>ODBC</SMALL> драйвера, PsqlODBC
- и OpenLink <SMALL>ODBC</SMALL>.</P>
-
- <P>PsqlODBC включается в дистрибутив. Больше информации об этом драйвере
- можно найти на <A href=
- "ftp://ftp.PostgreSQL.org/pub/odbc/">ftp://ftp.PostgreSQL.org/pub/odbc/</A>.</P>
-
- <P>OpenLink <SMALL>ODBC</SMALL> можно взять на <A href=
- "http://www.openlinksw.com/">http://www.openlinksw.com</A>. Этот
- драйвер работает с их стандартным клиентским программным обеспечением,
- использующим <SMALL>ODBC</SMALL>, и таким образом, <SMALL>ODBC</SMALL>
- драйверы для PostgreSQL доступны для каждой из поддерживаемых ими
- платформ (Win, Mac, Unix, VMS).</P>
-
- <P>Возможно они будут продавать свой продукт тем кому нужна коммерческая
- поддержка, но бесплатная версия всегда будет доступна. Пожалуйста,
- направляйте вопросы на адрес <A href=
- "mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>.</P>
-
- <P>Также посмотрите <A href=
- "http://www.postgresql.org/devel-corner/docs/programmer/odbc.html">ODBC
- раздел в руководстве программиста</A>.</P>
-
- <H4><A name="2.2">2.2</A>) Какие инструменты существуют для использования
- PostgreSQL через Web?</H4>
-
- <P>Прекрасное введение во взаимодействие баз данных и Web можно найти на:
- <A href="http://www.webreview.com">http://www.webreview.com</A></P>
-
- <P>Также загляните на <A href=
- "http://www.phone.net/home/mwm/hotlist/">http://www.phone.net/home/mwm/hotlist/.</A></P>
-
- <P>Для интеграции с Web, одним из превосходных инструментов является PHP.
- Домашняя станичка <A
- href="http://www.php.net">http://www.php.net</A>.</P>
-
- <P>Для комплексных решений, многие пользуются Perl интерфейсом и CGI.pm.</P>
-
- <H4><A name="2.3">2.3</A>) Есть ли у PostgreSQL графический интерфейс
- пользователя? Генератор отчетов? Встроенный интерфейс для языка
- запросов?</H4>
-
- <P>У нас есть прекрасный горафический интерфейс, называемый
- <I>pgaccess</I>, который является частью дистрибутива. <I>pgaccess</I>
- также емеет генератор отчетов. Его страничка <A href=
- "http://www.flex.ro/pgaccess">http://www.flex.ro/pgaccess</A></P>
-
- <P>Мы также включаем <I>ecpg</I>, который предоставляет встроенный
- интерфейс к языку запросов SQL из C.</P>
-
- <H4><A name="2.4">2.4</A>) Какие языки могут взаимодействовать с
- PostgreSQL?</H4>
-
- <P>Вот эти:</P>
-
- <UL>
- <LI>C (libpq)</LI>
-
- <LI>C++ (libpq++)</LI>
-
- <LI>Embedded C (ecpg)</LI>
-
- <LI>Java (jdbc)</LI>
-
- <LI>Perl (perl5)</LI>
-
- <LI>ODBC (odbc)</LI>
-
- <LI>Python (PyGreSQL)</LI>
-
- <LI>TCL (libpgtcl)</LI>
-
- <LI>C Easy API (libpgeasy)</LI>
-
- <LI>Embedded <SMALL>HTML</SMALL> (<A href=
- "http://www.php.net">PHP from http://www.php.net</A>)</LI>
- </UL>
- <HR>
-
- <H2 align="center">Вопросы администрирования</H2>
-
- <H4><A name="3.1">3.1</A>) Как мне установить PostgreSQL в место отличное
- от <I>/usr/local/pgsql</I>?</H4>
-
- <P>Задайте опцию <I>--prefix</I> когда запускаете <I>configure</I>.</P>
-
- <H4><A name="3.2">3.2</A>) Когда я запускаю <I>postmaster</I>, я получаю
- сообщение <I>Bad System Call</I> или сообщение core dumped. Почему?</H4>
-
- <P>Это может быть вызвано разными проблемами, но первое, что
- нужно сделать - это убедиться в том, что в вашем ядре установлено
- расширение System V. PostgreSQL требует, чтобы ядро поддерживало
- разделяемую память и семафоры.</P>
-
- <H4><A name="3.3">3.3</A>) Когда я пытаюсь запустить <I>postmaster</I>, я
- получаю ошибки <I>IpcMemoryCreate</I>. Почему?</H4>
-
- <P>Либо у вас в ядре неправильные настройки разделяемой памяти, либо
- вашему ядру нужно большее количество доступной разделяемой памяти.
- Те конкретные действия, которые вам нужно произвести зависят от
- архитектуры вашей машины и от того как много буферов и backend
- процессов вы настроили для <I>postmaster</I>. Для большинства систем,
- с количеством буферов и процессов по умолчанию, необходимый минимум -
- это около 1 мегабайта. Подробности о разделяемой памяти и семафорах
- смотрите в <A href=
- "http://www.postgresql.org/idocs/index.php?kernel-resources.html">Руководстве
- администратора PostgreSQL</A>.</P>
-
- <H4><A name="3.4">3.4</A>) Когда я пытаюсь запустить <I>postmaster</I>, я
- получаю ошибки <I>IpcSemaphoreCreate</I>. Почему?</H4>
-
- <P>Если это сообщение <I>IpcSemaphoreCreate: semget failed (No
- space left on device)</I> то настройки вашего ядра таковы, что ему не
- хватает семафоров. Postgres требует один семафор на потенциальный
- backend процесс. Временным решением является запуск <I>postmaster</I>
- с настройками на мешьшее количество backend процессов. Используйте
- <I>-N</I> с значением меньшим чем 32, которое принято по умолчанию.
- Более правильное решение - это увеличить значения <SMALL>SEMMNS</SMALL>
- и <SMALL>SEMMNI</SMALL> в настрйках ядра.</P>
-
- <P>Неисправные семафоры также могут привести к падению СУБД во время
- доступа к базе данных.</P>
-
- <P>Если вы получили какое-либо другое сообщение об ошибке, то вполне
- возможно, что в вашем ядре вообще не настроена поддержка семафоров.
- Смотрите подробности о разделяемой памяти и семафорах в Руководстве
- Администратора PostgreSQL.</P>
-
- <H4><A name="3.5">3.5</A>) Как мне управлять соединениями с других
- компьютеров?</H4>
-
- <P>По умолчанию, PostgreSQL разрешает только соединения на локальной
- машине через сокеты домена Unix. Другие машины не смогут подключиться к
- базе пока для <I>postmaster</I> не будет задан флаг <I>-i</I>
- <B>и</B> пока не будет разрешена host-авторизация в файле
- <I>$PGDATA/pg_hba.conf</I>. Эти действия делают возможными TCP/IP
- соединения.</P>
-
- <H4><A name="3.6">3.6</A>) Какие настройки мне нужно сделать для улучшения
- производительности?</H4>
-
- <P>Несомненно, индексы могут увеличить скорость выполнения запросов. Команда
- <SMALL>EXPLAIN</SMALL> позволяет вам посмотреть как PostgreSQL
- интерпретирует ваш запрос и какие индексы используются.</P>
-
- <P>Если вы выполняете много операторов <SMALL>INSERT</SMALL>,
- рассмотрите возможность выполнять их в большой пачке, используя
- команду <SMALL>COPY</SMALL>. Это значительно быстрее, чем отдельные
- <SMALL>INSERT.</SMALL> Во-вторых, операторы вне блока транзакции
- <SMALL>BEGIN WORK/COMMIT</SMALL> сами выполняют транзакцию. Подумайте
- над выполнением нескольких операторов в одном блоке транзакции.
- Это уменьшит количество транзакций. Также, задумайтесь над удалением
- и пересозданием индексов, когда вы выполняете большие изменения
- данных.</P>
-
- <P>Существует несколько опций настройки. Вы можете запретить
- <I>fsync()</I> при старте <I>postmaster</I> с опцией <I>-o -F</I>.
- Это предотвратит вызовы <I>fsync()</I>, которые приводят к сбросу
- данных на диск после каждой транзакции.</P>
-
- <P>Вы можете также использовать для <I>postmaster</I> опцию <I>-B</I>
- для увеличения количества буферов разделяемой памяти, которая
- используется backend процессами. Если вы сделаете значение этого параметра
- слишком большим, то <I>postmaster</I> может не запустится потому что
- вы исчерпаете ограничение ядра на объем разделяемой памяти. Каждый
- буфер имеет размер в 8 килобайт и по умолчанию выделяется 64 буфера.</P>
-
- <P>Вы можете также использовать backend опцию <I>-S</I> для увеличения
- максимального количества памяти, которое используется backend процессом
- для временных сортировок. Значение для опции <I>-S</I> задается в
- килобайтах и по умолчанию равно 512 (т.е. 512K).</P>
-
- <P>Вы также можете использовать команду <SMALL>CLUSTER</SMALL> для
- группировки данных в таблицах на совпадающий индекс. Подробности смотрите
- на странице руководства по команде <SMALL>CLUSTER</SMALL>.</P>
-
- <H4><A name="3.7">3.7</A>) Какие возможности для отладки есть в
- наличии?</H4>
-
- <P>PostgreSQL имеет несколько возможностей, позволяющие получить
- информацию о состоянии, которая может быть использована в отладочных
- целях.</P>
-
- <P>Во-первых, при запуске <I>configure</I> с опцией --enable-cassert,
- многие вызовы <I>assert()</I> позволяют отслеживать работу backend
- процесса и остановку программы при возникновении каких-либо
- неожиданностей.</P>
-
- <P>И <I>postmaster</I>, и <I>postgres</I> имеют несколько отладочных
- опций. Во-первых, при запуске <I>postmaster</I>, убедитесь, что
- стандартный вывод и вывод ошибок осуществляются в файл журнала:</P>
-<PRE>
- cd /usr/local/pgsql
- ./bin/postmaster &gt;server.log 2&gt;&amp;1 &amp;
-</PRE>
-
- <P>Это приведет к появлению файла server.log в главном каталоге
- PostgreSQL. Этот файл содержит полезную информацию о проблемах или
- ошибках, возникших на сервере. <I>Postmaster</I> имеет опцию <I>-d</I>,
- которая позволяет получать при протоколировании более детальную
- инфрмацию. Для опции <I>-d</I> указывается число, которое задает уровень
- отладки. Будьте осторожны, так как высокий уровень отладки приводит
- к генерации файлов журнала большого размера.</P>
-
- <P>Если <I>postmaster</I> не запущен, вы можете запустить
- <I>postgres</I> backend из командной строки и ввести ваш оператор
- <SMALL>SQL</SMALL> напрямую. Это рекомендуется <B>только</B> для
- целей отладки. Заметим, что в этом режиме, запрос завершается символом
- новой строки, а не точкой с запятой. Если вы производили компиляцию
- с отладочными символоами, вы можете использовать любой отладчик, чтобы
- посмотреть, что случилось. Поскольку backend запускается не из
- <I>postmaster</I>, он не запускается в идентичном окружении и значит
- проблемы итераций блокировок/backend не могут быть воспроизведены.</P>
-
- <P>Если <I>postmaster</I> запущен, запустите <I>psql</I> в одном
- окне, затем найдите <SMALL>PID</SMALL> процесса <I>postgres</I>,
- используемый <I>psql</I>. Используйте отдадчик для подключения к
- <I>postgres</I> <SMALL>PID.</SMALL> Вы можете установить точки
- прерывания в отладчике и запустить запрос из <I>psql</I>. Если
- вы производите отладку запуска <I>postgres</I>, вы можете установить
- PGOPTIONS="-W n", и затем запустить <I>psql</I>. Эта опция приводит
- к задержке процесса запуска на <I>n</I> секунд, в течение которых
- вы можете подключить к процессу отладчик, установить любые точки
- прерывания и продолжить запуск.</P>
-
- <P>Программа <I>postgres</I> имеет опции <I>-s, -A</I>, и <I>-t</I>
- которые могут быть очень полезными для отладки и измерения
- производительности.</P>
-
- <P>Вы также можете скомпилировать PostgreSQL с профилированием для
- того, чтобы увидеть какие функции сколько времени выполняются.
- Файлы профилирования backend'а находятся в каталоге
- <I>pgsql/data/base/dbname</I>. Файл профилирования клиента
- будет помещен в текущий каталог клиента. В Linux для выполнения
- профилирования требуется компиляции с <I>-DLINUX_PROFILE</I>.</P>
-
- <H4><A name="3.8">3.8</A>) Почему я получаю сообщение <I>"Sorry, too
- many clients"</I> когда пытаюсь подключиться к базе?</H4>
-
- <P>Вам нужно увеличить ограничение на количество конкуретных
- backend процессов при запуске <I>postmaster</I>.</P>
-
- <P>По умолчанию установлен лимит на 32 процесса. Вы можете
- увеличить этот лимит перезапустив <I>postmaster</I> с нужным
- значением процессов, которое указывается в опции <I>-N</I> или
- изменив файл <I>postgresql.conf</I>.</P>
-
- <P>Заметим, что если вы зададите в опции <I>-N</I> значение больше
- 32, то вы также должны увеличить значение в опции <I>-B</I> которое
- по умолчанию установлено в 64; Значение опции <I>-B</I> должно быть
- по крайней мере вдвое больше значения опции <I>-N</I>, и возможно
- ещё больше для лучшей производительности. Для большего количества
- backend процессов, вам также неплохо было бы увеличить некоторые
- параметры ядра Unix. Это такие параметры, как максимальное количество
- блоков разделяемой памяти, <SMALL>SHMMAX;</SMALL> максимальное количество
- семафоров, <SMALL>SEMMNS</SMALL> и <SMALL>SEMMNI;</SMALL> максимальное
- количество процессов, <SMALL>NPROC;</SMALL> максимальное количество
- процессов на пользователя, <SMALL>MAXUPRC;</SMALL> и максимальное
- количество открытых файлов, <SMALL>NFILE</SMALL> и <SMALL>NINODE.</SMALL>
- Причина создания ограничения на количество backend процессов как
- раз и состоит в том, чтобы вашей системе хватило ресурсов.</P>
-
- <P>В PostgreSQL до версии 6.5, максимальное количество backend процессов
- было 64, и изменение этого количества требовало перекомпиляции после
- установки константы MaxBackendId в <I>include/storage/sinvaladt.h</I>.</P>
-
- <H4><A name="3.9">3.9</A>) Что это за файлы <I>pg_sorttempNNN.NN</I>
- в моем каталоге с базой данных?</H4>
-
- <P>Это временные файлы, генерируемые во время выполнения запроса.
- Например, если для оператора <SMALL>ORDER BY</SMALL> должна быть
- выполнена сортировка, которая требует больше места чем выделенно
- для backend процесса в опции <I>-S</I>, то создается временный файл для
- хранения дополнительных данных.</P>
-
- <P>Временные файлы должны удаляться автоматически, но этого может
- не происходить, если backend процесс падает во время сортировки.
- Если у вас не запущено ни одного backend процесса, то вы можете
- спокойно удалить файлы pg_tempNNN.NN.</P>
- <HR>
-
- <H2 align="center">Вопросы эксплуатации</H2>
-
- <H4><A name="4.1">4.1</A>) В чем отличие между бинарным и нормальным
- курсором?</H4>
-
- <P>Смотрите описание на страницах руководства посвященным
- <SMALL>DECLARE</SMALL>.</P>
-
- <H4><A name="4.2">4.2</A>) Как выполнить <SMALL>SELECT</SMALL> только
- для нескольких первых строчек запроса?</H4>
-
- <P>Смотрите станицу руководства посвященную <SMALL>FETCH</SMALL>
- или используйте <SMALL>SELECT</SMALL> ... <SMALL>LIMIT</SMALL>....</P>
-
- <P>Даже если вы хотите получить только первые несколько записей,
- будет выполнен весь запрос. Рассмотрим запрос, который имеет
- <SMALL>ORDER BY.</SMALL> Если есть какой-либо индекс, который
- совпадает с <SMALL>ORDER BY</SMALL>, PostgreSQL может
- выдать только несколько первых запрошенных записей или может
- выполнять запрос пока не будут выданы желаемые записи.</P>
-
- <H4><A name="4.3">4.3</A>) Как получить список таблиц или других
- компонентов в <I>psql</I>?</H4>
-
- <P>Вы можете посмотреть исходный код <I>psql</I> в файле
- <I>pgsql/src/bin/psql/describe.c</I>. Он содержит команды
- <SMALL>SQL</SMALL> которые генерируются при вводе в psql команд,
- начинающихся с обратной косой черты. Вы также моежете запустить
- <I>psql</I> с опцией <I>-E</I> так, чтобы эта программа выдавала
- запросы, которые она использует для выполнения заданных вами
- команд.</P>
-
- <H4><A name="4.4">4.4</A>) Как удалить колонку из таблицы?</H4>
-
- <P>Мы не поддерживаем <SMALL>ALTER TABLE DROP COLUMN,</SMALL> но
- можно сделать так:</P>
-<PRE>
- BEGIN;
- LOCK TABLE old_table;
- SELECT ... -- выборка всех колонок за исключением той, которую хотите удалить
- INTO TABLE new_table
- FROM old_table;
- DROP TABLE old_table;
- ALTER TABLE new_table RENAME TO old_table;
- COMMIT;
-</PRE>
-
- <H4><A name="4.5">4.5</A>) Каковы максимальные размеры для записей,
- таблиц и базы данных?</H4>
-
- <P>Существуют следующие ограничения:</P>
-<PRE>
- Максимальный размер базы? неограничен (существуют базы на 60 GB)
- Максимальный размер таблицы? 16 TB
- Максимальный размер записи? неограничен начиная с версии 7.1
- Максимальный размер поля? 1 GB начиная с версии 7.1
- Максимальное количество записей в таблице? неограничено
- Максимальное количество колонок в таблице? 250-1600 в зависимости от типа
- Максимальное количество индексов в таблице? неограничено
-</PRE>
- Разумеется, понятие "неограничено" на самом деле ограничивается
- доступным дисковым пространиством и размерами памяти/своппинга.
- Когда значения перечисленные выше неоправдано большие, может
- пострадать производительность.
-
- <P>Максимальный размер таблицы в 16 TB не требует чтобы операционная
- система поддерживала файлы больших размеров. Большие таблицы хранятся
- как множество файлов размером в 1 GB, так что ограничения, которые
- накладывает файловая система не важны.</P>
-
- <P>Максимальный размер таблицы и максимальное количество колонок
- могут быть увеличены, если размер блока по умолчанию будет увеличен
- до 32k.</P>
-
- <H4><A name="4.6">4.6</A>) Как много дискового пространства в базе данных
- нужно для сохранения данных из обычного текстового файла?</H4>
-
- <P>СУБД PostgreSQL может потребоваться дискового пространства до 5 раз
- больше для сохранения данных из простого текстового файла.</P>
-
- <P>В качестве примера, рассмотрим файл в 100,000 строк в каждой, из
- которых целое число и текстовое описание. При этом длина текста,
- в среднем, составляет 20 байт. Размер простого файла составит 2.8 MB.
- Размер базы PostgreSQL, содержащей эти же данные составит приблизительно
- 6.4 MB из которых:</P>
-<PRE>
- 36 байт: на каждый заголовок записи (приблизительно)
- + 24 байта: одно поле с целочисленным типом и одно текстовое поле
- + 4 байта: указатель на странице для всей записи
- ----------------------------------------
- 64 байт на запись
-
- Размер страницы данных в PostgreSQL составляет 8192 байт (8 KB), так что:
-
- 8192 байт на страницу
- ------------------- = 128 записей на страницу БД (с округлением)
- 64 байт на запись
-
- 100000 строк данных
- -------------------- = 782 страницы в БД
- 128 записей на страницу
-
-782 страницы БД * 8192 байт на страницу = 6,406,144 байт (6.4 MB)
-</PRE>
-
- <P>Индексы не требуют так много, но поскольку они создаются для
- большого количества данных, они также могут быть велики.</P>
-
- <H4><A name="4.7">4.7</A>) Как мне убедиться, что существуют нужные мне
- таблицы, индексы, базы данных и пользователи?</H4>
-
- <P><I>psql</I> имеет несколько команд, начинающихся с обратной косой
- черты, для того чтобы просматривать такую информацию. Используйте
- \? для того, чтобы увидеть эти команды. Также существуют системные
- таблицы, имя которых начинается на <i>pg_</i> и в которых также содержится
- эта информация. Ещё, <i>psql -l</i> покажет список всех баз данных.</P>
-
- <P>Также смотрите файл <I>pgsql/src/tutorial/syscat.source</I>. В нем
- представлены многие операторы <SMALL>SELECT</SMALL> которые нужны
- для получения информации из системных таблиц базы данных.</P>
-
- <H4><A name="4.8">4.8</A>) У меня медленно работают запросы или не
- происходит использования индексов. Почему?</H4>
-
- <P>Индексы не используются для каждого запроса автоматически. Они
- используются только если таблица больше минимального размера и запрос
- выбирает только маленький процент записей в таблице. Так устроено,
- потому что доступ к диску с применением рандомизации при сканировании
- индексов иногда медленнее, чем простое чтение таблицы или ее
- последовательное сканирование.</P>
-
- <P>Чтобы определить необходимость использования индекса для какой-либо
- таблицы, PostgreSQL должен иметь статистику по этой таблице. Эта
- статистика собирается при использовании <SMALL>VACUUM ANALYZE</SMALL>
- или просто <SMALL>ANALYZE</SMALL>. Используя статистику, оптимизатор
- узнает о том как много записей в таблице и если он должен использовать
- индексы, то он может принимать лучшие решения. Статистика также
- влияет на определение оптимального порядка связывания и метода связывания.
- Сбор статистики должен периодически выполнятся при изменении содержимого
- таблицы.</P>
-
- <P>Обычно индексы не используются для <SMALL>ORDER BY</SMALL> или для
- выполнения связываний. Последовательный перебор следующий за явной
- сортировкой обычно быстрее, чем поиск по индексам в большой таблице.
- Однако, <SMALL>ORDER BY</SMALL> часто комбинируется с <SMALL>LIMIT</SMALL>
- и в этом случае индекс будет использоваться, поскольку при выполнении
- будет возвращаться небольшая часть таблицы.</P>
-
- <P>Когда используются операции с шаблонами, например <SMALL>LIKE</SMALL>
- или <I>~</I>, индексы могут быть использованы только если начало
- строки-шаблона для поиска, соответствует началу искомой строки.
- Следовательно, для того, чтобы использовать индексы, шаблон в
- <SMALL>LIKE</SMALL> не должен начинаться на <I>%</I>, а в <I>~</I>
- (поиск регулярного выражения) должен начинаться на <I>^</I>.</P>
-
- <H4><A name="4.9">4.9</A>) Как посмотреть на то, как оптимизатор выполняет
- мой запрос?</H4>
-
- <P>Смотрите страницу руководства посвященную <SMALL>EXPLAIN</SMALL>.</P>
-
- <H4><A name="4.10">4.10</A>) Что такое R-tree индекс?</H4>
-
- <P>R-tree индекс используется для индексирования пространственных данных.
- Индекс хэша не может управлять поисками диапазона. B-tree индекс
- управляет только поисками диапазона в одном измерении. R-tree индекс
- может управлять многоразмерными данными. Например, если R-tree индекс
- может быть встроен в атрибут типа <I>point</I>, то система может
- более эффективно ответить на запрос типа "выбрать все точки внутри
- заданного четырехугольника."</P>
-
- <P>Канонический источник, описывающий первоначальное создание R-tree
- это:</P>
-
- <P>Guttman, A. "R-trees: A Dynamic Index Structure for Spatial
- Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt
- of Data, 45-57.</P>
-
- <P>Вы можете найти этот документ в книге Stonebraker'а "Readings in
- Database Systems".</P>
-
- <P>Встроеннные R-tree могут управлять полигонами и боксами. В теории,
- R-tree могут быть расширены для управления большим количеством
- измерений. На практике, расширение R-tree требует некоторых усилий и
- у нас, в данный момент, нет какой-либо документации о том, как это
- сделать.</P>
-
- <H4><A name="4.11">4.11</A>) Что такое Genetic Query
- Optimizer?</H4>
-
- <P>Модуль <SMALL>GEQO</SMALL> производит быструю оптимизацию запроса,
- когда происходит связывание многих таблиц через Genetic Algorithm (GA).
- Это позволяет управлять большими запросами на связывание через
- неистощающий поиск.</P>
-
- <H4><A name="4.12">4.12</A>) Как мне выполнить поиск регулярного выражения
- и поиск независимый от регистра букв поиск регулярного выражения?
- Как мне использовать индекс для поиска независимого от регистра букв?</H4>
-
- <P>Оператор <I>~</I> производит поиск регулярного выражения, а оператор
- <I>~*</I> производит независимый от регистра букв поиск регулярного
- выражения. Независимый от регистра вариант <SMALL>LIKE</SMALL> называется
- <SMALL>ILIKE</SMALL> в PostgreSQL начиная с версии 7.1.</P>
-
- <P>Независимое от регистра сравнение обычно выражается так:</P>
-<PRE>
- SELECT *
- FROM tab
- WHERE lower(col) = 'abc'
-
-</PRE>
- Эта конструкция не будет использовать стандартный индекс. Однако, если
- вы создадите функциональный индекс, он будет использован:
-<PRE>
- CREATE INDEX tabindex on tab (lower(col));
-
-</PRE>
-
- <H4><A name="4.13">4.13</A>) Как я могу определить, что значение поля
- равно <SMALL>NULL</SMALL> в каком-либо запросе?</H4>
-
- <P>Вы просто сравниваете значение с <SMALL>IS NULL</SMALL> и
- <SMALL>IS NOT NULL</SMALL>.</P>
-
- <H4><A name="4.14">4.14</A>) Каковы отличия между разными символьными
- типами?</H4>
-<PRE>
-Тип Внутреннее имя Замечания
---------------------------------------------------
-"char" char 1 символ
-CHAR(#) bpchar заполняется пустотой до фиксированной длины
-VARCHAR(#) varchar размер задает максимальную длину, нет заполнения
-TEXT text нет задаваемого верхнего ограничения или длины
-BYTEA bytea массив байт переменной длины (можно использовать null-байт без опаски)
-</PRE>
-
- <P>Внутреннее имя вы можете увидеть, когда смотрите системные каталоги
- и в некоторых сообщениях об ошибках.</P>
-
- <P>Последние четыре типа являются "varlena" типами (т.е., первые
- четыре байта на диске являются длинной, за которой следуют данные).
- Таким образом, фактически используемое пространство больше, чем
- обозначенный размер. Однако, эти типы данных также поддаются сжатию
- или могут быть сохранены не в строком виде через <SMALL>TOAST</SMALL>,
- так что занимаемое дисковое пространство может также быть и меньше,
- чем ожидалось.</P>
-
- <P><SMALL>CHAR()</SMALL> - это лучшее решение для хранения строк, которые
- обычно имеют одинаковую длину. <SMALL>VARCHAR()</SMALL> - это лучшее
- решение, когда нужно хранить строки переменной длины, но не превышающие
- определенного размера. <SMALL>TEXT</SMALL> - это лучшее решение для строк
- неограниченной длины, с максимально допустимой длиной в 1 гигабайт.
- <SMALL>BYTEA</SMALL> для хранения бинарных данных, значения которых
- могут включать <SMALL>NULL</SMALL> байты.</P>
-
- <H4><A name="4.15.1">4.15.1</A>) Как мне создать поле
- serial/с-авто-увеличением?</H4>
-
- <P>PostgreSQL поддерживает тип данных <SMALL>SERIAL</SMALL>. Он
- автоматически создает последовательность и индекс для колонки.
- Например:</P>
-<PRE>
- CREATE TABLE person (
- id SERIAL,
- name TEXT
- );
-</PRE>
- автоматически транслируется в:
-<PRE>
- CREATE SEQUENCE person_id_seq;
- CREATE TABLE person (
- id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
- name TEXT
- );
- CREATE UNIQUE INDEX person_id_key ON person ( id );
-</PRE>
- Смотрите подробности о последовательностях на странице руководства
- посвященной <I>create_sequence</I>. Вы также можете использовать
- каждое поле <I>OID</I> в записи как уникальное значение. Однако,
- если вам нужен дамп и перезагрузка базы данных, вам необходимо
- использовать команду <I>pg_dump</I> с опцией <I>-o</I> или опцию
- <SMALL>COPY WITH OIDS</SMALL> для сохранения значений поля
- <SMALL>OID</SMALL>.
-
- <H4><A name="4.15.2">4.15.2</A>) Как мне получить значение при вставке
- <SMALL>SERIAL</SMALL>?</H4>
-
- <P>Один из способов состоит в получении следующего значения
- <SMALL>SERIAL</SMALL> из объекта sequence с помощью функции
- <I>nextval()</I> <I>перед</I> вставкой и затем вставлять это значение
- явно. Используйте таблицу-пример в <A href="#4.15.1">4.15.1</A>, чтобы
- увидеть как это делается в Perl:</P>
-<PRE>
- new_id = output of "SELECT nextval('person_id_seq')"
- INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal');
-</PRE>
- Затем вы должны также сохранить новое значение в переменной
- <CODE>new_id</CODE> для его использования в других запросах (например
- таких как внешний ключ для таблицы <CODE>person</CODE>). Заметим,
- что имя автоматически созданного объекта <SMALL>SEQUENCE</SMALL>
- будет &lt;<I>table</I>&gt;_&lt;<I>serialcolumn</I>&gt;_<I>seq</I>,
- где <I>table</I> и <I>serialcolumn</I> являются соответственно
- именами вашей таблицы и вашей колонки <SMALL>SERIAL</SMALL>.
-
- <P>В качестве альтернативы, вы можете получить назначенное значение
- <SMALL>SERIAL</SMALL> с помощью функции <I>currval</I>()
- <I>после</I> проведения обычной операции вставки, например</P>
-<PRE>
- INSERT INTO person (name) VALUES ('Blaise Pascal');
- new_id = output of "SELECT currval('person_id_seq')";
-</PRE>
- И наконец, вы можете использовать значение
- <A href="#4.16"><SMALL>OID</SMALL></A>, возращаемое из опертора
- <SMALL>INSERT</SMALL> чтобы увидеть значение по умолчанию, что
- предположительно является наименее переносимым на другие платформы
- решением. В Perl, используя DBI с модулеи Edmund Mergl'я DBD::Pg,
- значение oid становится доступным через <I>$sth-&gt;{pg_oid_status}</I>
- после <I>$sth-&gt;execute()</I>.
-
- <H4><A name="4.15.3">4.15.3</A>) Не может ли получиться так, что
- использование <I>currval()</I> и <I>nextval()</I> приведет к
- зациклированию с другими пользователями?</H4>
-
- <P>Нет. Currval() возвращает текущее значение, назначенное вашем
- backend'ом, а не другими пользователями.</P>
-
- <H4><A name="4.15.4">4.15.4</A>) Почему числа из моей последовательности
- не используются снова при отмене транзакции? Почему создаются разрывы
- при нумерации в колонке, где я использую последовательность/SERIAL?</H4>
-
- <P>Для реализации конкуретности, значения последовательностей, при
- необходимости выдаются во время запуска транзакций и не блокируются
- до полного выполнения транзакций. Это может вызывать разрывы в
- нумерации при отмене транзакций.</P>
-
-
- <H4><A name="4.16">4.16</A>) Что такое <SMALL>OID</SMALL>? Что такое
- <SMALL>TID</SMALL>?</H4>
-
- <P>Поля <SMALL>OID</SMALL> служат уникальными идетификаторами записей
- в PostgreSQL. Каждая запись, которая создаётся в PostgreSQL получает
- уникальный <SMALL>OID</SMALL>. Все значения <SMALL>OID</SMALL>
- генерируемые во время <I>initdb</I> имеют значения меньше 16384 (из
- <I>backend/access/transam.h</I>). Все созданные пользователем
- <SMALL>OID</SMALL> имеют бОльшие значение. По умолчанию, все эти
- <SMALL>OID</SMALL> являются уникальными не только внутри какой-либо
- таблицы или базы данных, но и внутри всей СУБД PostgreSQL.</P>
-
- <P>PostgreSQL использует <SMALL>OID</SMALL> в своих внутренних системных
- таблицах для связи записей и таблиц. Значения <SMALL>OID</SMALL> могут
- быть использованы для идентификации заданных пользователем записей,
- а также использоваться при связываниях. Рекомендуется использовать
- тип колонки <SMALL>OID</SMALL> для хранения значений <SMALL>OID</SMALL>
- Вы можете создать индекс на поле <SMALL>OID</SMALL> для более быстрого
- доступа.</P>
-
- <P>Значения <SMALL>OID</SMALL> назначаются для всех новых записей из
- центральной области, которые используются всеми всеми базами данных.
- Если вы хотите изменить <SMALL>OID</SMALL> на какое-либо другое
- значение или если вы хотите создать копию таблицы с такимиже
- <SMALL>OID</SMALL>, то это можно сделать так:</P>
-<PRE>
- CREATE TABLE new_table(old_oid oid, mycol int);
- SELECT old_oid, mycol INTO new FROM old;
- COPY new TO '/tmp/pgtable';
- DELETE FROM new;
- COPY new WITH OIDS FROM '/tmp/pgtable';
-<!--
- CREATE TABLE new_table (mycol int);
- INSERT INTO new_table (oid, mycol) SELECT oid, mycol FROM old_table;
--->
-</PRE>
-
- <P><SMALL>OID</SMALL> хранится как 4-х байтное целое и не может превышать
- значение в 4 миллиарда. Однако, еще никто не сообщил о том, что такое
- произошло, но мы планируем до того как это случиться избавится от
- этого ограничения.</P>
-
- <P>T<SMALL>ID</SMALL> используется для идентификации специальных
- физических записей с блочными и offset значениями. T<SMALL>ID</SMALL>
- изменяется после того как записи были изменены или перегружены.
- <P>T<SMALL>ID</SMALL> используется индексными записями в качестве
- указателя на физические записи.</P>
-
- <H4><A name="4.17">4.17</A>) Что означают некоторые термины используемые в
- PostgreSQL?</H4>
-
- <P>Некоторый исходный код и старая документация используют
- общеупотребительные термины. Вот некоторые из них:</P>
-
- <UL>
- <LI>table, relation, class</LI>
-
- <LI>row, record, tuple</LI>
-
- <LI>column, field, attribute</LI>
-
- <LI>retrieve, select</LI>
-
- <LI>replace, update</LI>
-
- <LI>append, insert</LI>
-
- <LI><SMALL>OID</SMALL>, serial value</LI>
-
- <LI>portal, cursor</LI>
-
- <LI>range variable, table name, table alias</LI>
- </UL>
-
- <P>Список общих терминов по базам данных можно найти на <A href=
- "http://www.comptechnews.com/~reaster/dbdesign.html">http://www.comptechnews.com/~reaster/dbdesign.html</A></P>
-
- <H4><A name="4.18">4.18</A>) Почему я получаю ошибку <I>"ERROR: Memory
- exhausted in AllocSetAlloc()"</I>?</H4>
-
- <P>Если у вас версия ниже 7.1, то обновление версии может решить эту
- проблему. Также возможно, что у вас закончилась виртуальная память
- или что ваше ядро имеет маленький лимит на определенные ресурсы.
- Попытайтесь перед запуском <I>postmaster</I> выполнить следующие
- команды:</P>
-<PRE>
- ulimit -d 262144
- limit datasize 256m
-</PRE>
- В зависимости от командного интерпретатора shell, только одна из данных
- команд выполнится успешно, но она позволит вам установить больший
- сегмент данных процесса и возможно решит проблему. Эта команда
- изменяет параметры текущего процесса и всех его потомков, созданных
- после её запуска. Если у вас возникла проблема с <SMALL>SQL</SMALL>
- клиентом, потому что backend возвращает слишком большой объем данных,
- попытайтесь выполнить эту команду перед запуском клиента.
-
- <H4><A name="4.19">4.19</A>) Как мне узнать, какая версия PostgreSQL
- запущена?</H4>
-
- <P>Из <I>psql</I>, наберите <CODE>select version();</CODE></P>
-
- <H4><A name="4.20">4.20</A>) Почему при работе с моим большим объектом
- я получаю ошибку <I>"invalid large obj descriptor"</I>?</H4>
-
- <P>Вам нужно при использовании большого объекта поместить в начале
- <CODE>BEGIN WORK</CODE> и в конце <CODE>COMMIT</CODE>, а внутри
- получившегося блока <CODE>lo_open</CODE> ... <CODE>lo_close.</CODE></P>
-
- <P>В настоящий момент PostgreSQL требует, чтобы при закрытии большого
- объекта происходило выполнение транзакции. Таким образом, первая же
- попытка сделать что-либо с большим объектом, не соблюдая данного правила
- приведет к сообщению <I>invalid large obj descriptor</I>, так как
- код выполняющий работу над большим объектом (по крайней мере в
- настоящий момент) будет генерировать сообщение об ошибке если вы не
- используете транзакцию.</P>
-
- <P>Если вы используете такой интерфейс клиента как <SMALL>ODBC</SMALL>,
- вам возможно понадобится установить <CODE>auto-commit off.</CODE></P>
-
- <H4><A name="4.21">4.21</A>) Как мне создать колонку которая по умолчанию
- будет содержать текущее время?</H4>
-
- <P>Используйте <I>CURRENT_TIMESTAMP</I>:</P>
-<PRE>
-<CODE>CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
-</CODE>
-</PRE>
-
- <H4><A name="4.22">4.22</A>) Почему мои подзапросы, использующие
- <CODE><SMALL>IN</SMALL></CODE> так медленно работаеют?</H4>
-
- <P>В настоящий момент, мы связываем позапросы для внешних запросов
- через последовательный перебор результата подзапроса для каждой
- записи внешнего запроса. Попробуйте заменить <CODE>IN</CODE> на
- <CODE>EXISTS</CODE>:</P>
-<PRE>
-<CODE>SELECT *
- FROM tab
- WHERE col1 IN (SELECT col2 FROM TAB2)
-</CODE>
-</PRE>
- на:
-<PRE>
-<CODE>SELECT *
- FROM tab
- WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2)
-</CODE>
-</PRE>
- Мы надеемся убрать это ограничение в будущем выпуске.
-
- <H4><A name="4.23">4.23</A>) Как мне выполнить внешнее связывание?</H4>
-
- <P>PostgreSQL начиная с версии 7.1 поддерживает внешнее связывание,
- используя стандартный синтаксис SQL. Вот два примера:</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>Это идентичные запросы связывания t1.col и t2.col, также возвращают
- любые несвязанные записи в t1 (которые не совпадают с t2).
- <SMALL>RIGHT</SMALL> связывание должно добавить несвязанные записи
- t2. <SMALL>FULL</SMALL> связывание должно возвратить совпавшие
- записи плюс все несвязанные записи из t1 и t2. Слово <SMALL>OUTER</SMALL>
- является необязательным и назначается в <SMALL>LEFT</SMALL>,
- <SMALL>RIGHT</SMALL> и <SMALL>FULL</SMALL> связываниях. Обычные
- связывания называются <SMALL>INNER</SMALL> связывания.</P>
-
- <P>В предыдущих версиях, внешние связывания могли быть эмулированы
- используя <SMALL>UNION</SMALL> и <SMALL>NOT IN</SMALL>. Например,
- когда происходит связывание <I>tab1</I> и <I>tab2</I>, следующий
- запрос выполняет <I>внешнее</I> связывание двух таблиц:<BR>
- <BR>
- </P>
-<PRE>
- SELECT tab1.col1, tab2.col2
- FROM tab1, tab2
- WHERE tab1.col1 = tab2.col1
- UNION ALL
- SELECT tab1.col1, NULL
- FROM tab1
- WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
- ORDER BY col1
-</PRE>
-
- <H4><A name="4.24">4.24</A>) Как выполнять запросы, использующие несколько
- баз данных?</H4>
-
- <P>Не существует способа создать запрос к базам данных отличным от текущей.
- Поскольку PostgreSQL загружает системные каталоги специфичные для базы
- данных, непонятно даже, как должен себя вести такой межбазовый запрос.</P>
-
- <P>Разумеется, клиент может одновременно устанавливать соедиенения с
- различными базами данных и таких образом объединять информацию из них.</P>
-
- <H4><A name="4.25">4.25</A>) Как мне вернуть из функции несколько записей?</H4>
-
- <P>Вы можете возвращать из функций PL/pgSQL списки результатов, используя
- <i>refcursors</i>. Смотрите <A
- href="http://developer.postgresql.org/docs/postgres/plpgsql-cursors.html">
- http://developer.postgresql.org/docs/postgres/plpgsql-cursors.html,</a>
- секцию 23.7.3.3.</P>
-
- <H4><A name="4.26">4.26</A>) Почему я не могу надежно создавать/удалять
- временные таблицы в функциях PL/PgSQL?</H4>
- PL/PgSQL кэширует содержимое функции и один из негативных эффектов этого
- состоит в том, что если функция PL/PgSQL обращается к временной таблице
- и эта таблица позднее удаляется и пересоздается, а функция затем вызывается
- снова, то ее вызов приведет к ошибке, потому что скэшированное содержимое
- функции содержит указатель на старую временную таблицу. Чтобы решить эту
- проблему, используйте <SMALL>EXECUTE</SMALL> для доступа к временным
- таблицам в PL/PgSQL. Использование этого оператора заставит запрос
- перегенерироваться каждый раз.
- <HR>
-
- <H2 align="center">Расширения PostgreSQL</H2>
-
- <H4><A name="5.1">5.1</A>) Я написал функцию определяемую пользователем.
- Когда я запускаю ее в <I>psql</I>, почему я получаю dump core?</H4>
-
- <P>Проблема может заключаться в нескольких вещах. Попытайтесь сперва
- протестировать вашу функцию в отдельной самостоятельной программе.</P>
-
- <H4><A name="5.2">5.2</A>) Как я могу внести некоторые классные новые
- типы и функции в PostgreSQL?</H4>
-
- <P>Отправьте ваши расширения в список рассылки <I>pgsql-hackers</I>
- и они по возможности будут помещены в подкаталог <I>contrib/</I>.</P>
-
- <H4><A name="5.3">5.3</A>) Как мне написать C функцию, возвращающую
- запись?</H4>
-
- <P>Это требует некоего шаманства так как авторы никогда не пробовали
- делать это, хотя в приницпе это возможно.</P>
-
- <H4><A name="5.4">5.4</A>) Я изменил исходный файл. Почему после
- перекомпиляции я не вижу изменений?</H4>
-
- <P>Файлы <I>Makefile</I> не имеют правильных зависимостей для include
- файлов. Вы должны выполнить <I>make clean</I> и затем <I>make</I>.
- Если вы используете <SMALL>GCC</SMALL> вы можете использовать опцию
- <I>--enable-depend</I> в <I>configure</I> чтобы поручить компилятору
- автоматически отслеживать зависимости.</P>
- </BODY>
-</HTML>
-