diff options
Diffstat (limited to 'doc/src/FAQ')
-rw-r--r-- | doc/src/FAQ/FAQ.html | 1349 | ||||
-rw-r--r-- | doc/src/FAQ/FAQ_DEV.html | 840 | ||||
-rw-r--r-- | doc/src/FAQ/FAQ_german.html | 1136 | ||||
-rw-r--r-- | doc/src/FAQ/FAQ_japanese.html | 1418 | ||||
-rw-r--r-- | doc/src/FAQ/FAQ_polish.html | 1448 | ||||
-rw-r--r-- | doc/src/FAQ/FAQ_russian.html | 1387 |
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 >server.log 2>&1 & -</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 - <<I>table</I>>_<<I>serialcolumn</I>>_<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->{pg_oid_status}</I> after - <I>$sth->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 & 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))->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ä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 Übersetzung von Karsten Schulz (<A HREF="mailto:schulz@linux-systemhaus.de">schulz@linux-systemhaus.de</a>) <BR> -<P> -Letzte Aktualisierung der deutschen Ü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 Ü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äuft PostgreSQL?<BR> -<a href="#1.4">1.4</a>) Welche Nicht-Unix-Versionen sind verfü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ü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ür PostgreSQL verfügbar?<BR> -<a href="#1.9">1.9</a>) Wie erfahre ich etwas ü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ä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ä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ür PostgreSQL?<BR> -<a href="#2.2">2.2</a>) Welche Werkzeuge gibt es, um PostgreSQL-Datenbanken über Webseiten -verfü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ür die Kommunikation mit PostgreSQL verfügbar?<BR> - - -<H2><CENTER>Administrative Fragen</CENTER></H2> - -<a href="#3.1">3.1</a>) Warum schlä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ß 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ürzen bei gleichzeitigem Tabellenzugriff ab. Warum?<BR> -<a href="#3.10">3.10</a>) Wie optimiere ich die Datenbankmaschine für bessere Leistung?<BR> -<a href="#3.11">3.11</a>) Welche Debugging/Fehlersuch-Hilfsmittel sind für PostgreSQL verfü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ä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öße für eine Zeile, eine Tabelle, eine Datenbank?<BR> -<a href="#4.7">4.7</a>) Wieviel Plattenplatz benötigt eine Datenbank zur Speicherung einer Datendatei mit zeilenweisen Datensä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ären Ausdrücken und bei - einer Suche mit Ignorierung der Groß- und Kleinschreibweisen?<BR> -<a href="#4.14">4.14</a>) Wie ermittle ich in einem Query, daß 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ö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ü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ückliefert?<BR> -<a href="#5.5">5.5</a>) Ich habe eine der Quellendateien geändert. Warum macht sich die Ä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ährend PostgreSQL das leistungsfähige Datenmodell und -die reichhaltigen Datentypen von POSTGRES beibehält, ersetzt es die PostQuel-Abfragesprache durch -eine ausgedehnte Teilmenge von SQL. PostgreSQL ist frei und der komplette Quellcode ist verfügbar. -<P> - -Die PostgreSQL-Entwicklung wird von einem Team von Internet-Entwickler durchgefü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ür alle aktuellen und zukü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üngliche Postgres-Code, von dem PostgreSQL abstammt, ist auf die Bemühungen von -vielen Studierenden und Diplomanden, sowie Programmierern, die unter -der Weisung des Professors Michael Stonebraker an der Universität von Kalifornien, Berkeley -arbeiteteten, zurückzuführen. - -<P> - -Der ursprüngliche Name der Software bei Berkeley war Postgres. Als die SQL-Funktionalität 1995 -hinzugefügt wurde, wurde sein Name zu Postgres95 geändert. Der Name wurde Ende 1996 zu -PostgreSQL geä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 -Übersetzung. Die Übersetzung besitzt keinerlei rechtlichen Status. -Insbesondere kann sich niemand auf diese Ü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ür jeden möglichen Zweck, ohne Gebühr und ohne -eine schriftliche Vereinbarung zu benutzen, zu kopieren, zu ändern und zu verteilen wird hiermit -bewilligt, vorausgesetzt daß der oben genannte Urheberrechtsvermerk und dieser Paragraph und die -folgenden zwei Paragraphen in allen Kopien erscheinen. <P> - -IN KEINEM FALL IST DIE UNIVERSITÄT VON KALIFORNIEN GEGENÜBER JEDEM MÖGLICHEN BETEILIGTEN FÜR DIE DIREKTEN, -INDIREKTEN, SPEZIELLEN, BEILÄUFIGEN ODER FOLGESCHÄDEN, EINSCHLIEßLICH DER VERLORENEN PROFITE -VERANTWORTLICH, DIE AUS DEM GEBRAUCH VON DIESER SOFTWARE UND SEINEN UNTERLAGEN -HERAUS ENTSTEHEN, SELBST WENN DIE UNIVERSITÄT VON KALIFORNIEN VON DER MÖGLICHKEIT SOLCHEN SCHADENS -BENACHRICHTIGT WORDEN IST. <P> - -DIE UNIVERSITÄT VON KALIFORNIEN LEHNT SPEZIELL ALLE MÖGLICHE GARANTIEN AB, -EINSCHLIESSLICH, ABER NICHT BEGRENZT AUF, DIE IMPLIZIERTEN GARANTIEN VON -GESCHÄFTSNUTZEN UND EIGNUNG ZU EINEM BESTIMMTEN ZWECK. DIE SOFTWARE, DIE -NACHSTEHEND BEREITGESTELLT WIRD, BASIERT AUF EINER "SO WIE SIE IST"-GRUNDLAGE, UND DIE UNIVERSITÄT -VON KALIFORNIEN HAT KEINE VERPFLICHTUNGEN, WARTUNG, SUPPORT, -AKTUALISIERUNGSVORGÄNGE, VERBESSERUNGEN ODER ÄNDERUNGEN ZUR VERFÜGUNG -ZU STELLEN. - -<H4><a name="1.3">1.3</a>) Auf welchen Unix-Plattformen läuft PostgreSQL?</H4><P> - -Die Autoren haben PostgreSQL auf folgenden Plattformen kompiliert und getestet -(einige dieser Kompilierungen benö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ügbar?</H4><P> - -Es ist mö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äuft der Client auf MS-Windows und steht über TCP/IP mit einem -Server in Verbindung, der auf einer unserer unterstützten Unixplattformen lä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ü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ür PostgreSQL?</H4><P> - -Es gibt keinen offiziellen Support für PostgreSQL von der Universitä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ü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ü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önnen auf der PostgreSQL-Homepage im WWW -gefunden werden: -<BLOCKQUOTE> -<a href="http://postgreSQL.org">http://postgreSQL.org</a> -</BLOCKQUOTE><P> - -Es gibt auß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ür PostgreSQL ist bei <a href="http://www.pgsql.com">http://www.pgsql.com/</a> verfü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ür PostgreSQL verfügbar? </H4><P> - -Einige Handbü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 über Typen, Operatoren, Funktionen, Aggregate, usw. zu zeigen. <P> - -Die Website enthält sogar noch mehr Unterlagen.<P> - -<H4><a name="1.9">1.9</a>) Wie erfahre ich etwas über bekannte Fehler oder fehlende Eigenschaften von PostgreSQL? -</H4><P> - - -PostgreSQL unterstützt eine ausgedehnte Untermenge von SQL-92. -Siehe unser <a href="http://www.postgreSQL.org/docs/todo.html">TODO</a> -für eine Auflistung der bekannten Fehler, fehlende Eigenschaften und zukünftige Plä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ö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ähig?</H4><P> - -Ja, wir kö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änderungen -an die pgsql-patches Mailingliste.<P> - -Es gibt ungefähr ein Dutzend Leute, die das <I>commit</I>-Recht im PostgreSQL-CVS Archiv haben. -Alle haben so viele hochwertige Patches eingebracht, daß es schwer für die -CVS-Verwalter war, mitzuhalten. Und wir hatten das Vertrauen, daß -die Änderungen, die sie festlegten, sehr wahrscheinlich von hoher Qualität sind. <P> - -<H4><a name="1.13">1.13</a>) Wie sende ich einen Fehler-Bericht?</H4><P> - -Fü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> - -Überprü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äuft PostgreSQL im Vergleich zu anderen Datenbanksystemen?</H4><P> - -Es gibt verschiedene Methoden, Software zu messen: Eigenschaften, Leistung, -Zuverlässigkeit, Support und Preis.<P> - -<DL> -<DT> <B>Eigenschaften</B> -<DD> - -PostgreSQL hat die meisten Eigenschaften, die in groß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ät von externen Schlüsseln oder Outer Joins, -aber wir arbeiten an diesen Dingen für unser nächstes Release.<P> - -<DT> <B>Leistung</B> -<DD> - -PostgreSQL läuft in zwei Modi. Im normalen <I>fsync</I>-Modus wird jede komplette Transaktion -auf die Platte geschrieben und garantiert, daß, selbst wenn das Betriebssystem abstürzt und -der Strom ausfä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ügung zu stellen, der unter weniger Leistungseinbuße -leidet als der <I>fsync</I>-Modus und die Datenintegrität innerhalb 30 Sekunden -im Falle eines Betriebssystemabsturzes erlaubt. Der Modus ist durch den Datenbankverwalter -auswählbar.<P> - -Im Vergleich zu MySQL oder schlankeren Datenbanksystemen sind wir hinsichtlich INSERTs/UPDATEs langsamer, -weil wir einen Transaktions-Overhead haben. -Selbstverständlich hat MySQL kaum eine der Eigenschaften, die oben im Kapitel <I>Eigenschaften</I> erwähnt werden. -PostgreSQL ist für Flexibilität und gute Eigenschaften designed, trotzdem fahren wir fort, -die Leistung durch Profiling und Quellcodeanalyse zu verbessern.<P> - - - -<DT> <B>Zuverlässigkeit</B> -<DD> - -Wir stellen fest, daß ein DBMS zuverlässig sein muß, oder es ist wertlos. Wir bemühen uns, -gut geprüften, beständigen Code freizugeben, der nur ein Minimum an Programmfehler hat. -Jede Freigabe hat mindestens einen Monat Betatestphase hinter sich, und unsere Freigabehistorie zeigt, -daß wir stabile, solide Versionen freigeben, die im Produktionsbetrieb -genutzt werden können. Wir glauben, daß wir im Vergleich mit anderer -Datenbanksoftware vorteilhaft dastehen.<P> - -<DT> <B>Support</B> -<DD> - -Unsere Mailingliste stellt eine große Gruppe Entwickler und Benutzer zur Behebung aller -möglichen anzutreffenden Probleme zur Verfügung. - -Wir können nicht immer eine Fehlerbehebung garantieren, -kommerzielle DBMS's tun dies aber auch nicht. - -Direkter Zugriff zu den Entwicklern, zur Benutzergemeinschaft, zu den Handbüchern und zum Quellcode bietet häufig -höherwertigen PostgreSQL-Support im Vergleich zu anderen DBMS's. - -Es gibt den kommerziellen "Pro-Ereignis"-Support, -der für diejenigen bereitgestellt wird, die ihn benötigen. (siehe Support-Faq), <P> - -<DT> <B>Preis</B> -<DD> -PostgrSQL ist frei verfügbar, sowohl für die kommerzielle, wie für die nicht-kommerzielle -Nutzung. Du kannst Deinen Code fast ohne Beschränkungen zu unserem hinzufügen. Die einzigen -Beschränkungen werden in der BSD-artigen Lizenz weiter oben aufgeführt. -</DL> - - -<HR> - -<H2><CENTER>Fragen zu Benutzerprogrammen</CENTER></H2> - - - -<H4><a name="2.1">2.1</a>) Gibt es ODBC-Treiber für PostgreSQL?</H4><P> - -Es sind zwei ODBC-Treiber verfügbar: PostODBC und OpenLink ODBC.<P> - -PostODBC ist in der Distribution enthalten. Mehr Informationen kö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ß PostgreSQL-ODBC auf -jeder Client-Plattform zur Verfügung steht, die unterstützt wird (Win, Mac, Unix, VMS).<P> - -Sie werden dieses Produkt wahrscheinlich an Leute verkaufen, die kommerziellen Qualitäts-Support -brauchen, aber es wird immer eine Freeware-Version verfü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 über Webseiten -verfügbar zu machen?</H4><P> - -Eine nette Einführung zu Datenbank-gestü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ü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ür einfache Anbindungen geeignet. Fü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ßerdem <I>ecpg,</I>, -welches eine eingebundene SQL-Query-Schnittstelle für C zur Verfügung stellt. - - -<H4><a name="2.4">2.4</a>) Welche Sprachen sind für die Kommunikation mit PostgreSQL verfü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ägt initdb fehl?</H4><P> - -<UL> -<LI> -überprüfe, daß 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> überprüfe, daß der Pfad richtig gesetzt ist -<LI> überprüfe, ob der User <I>postgres</I> der Eigentü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 ä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. Überprüfe zuerst, ob Dein Kernel System V Extensions -enthält. PostgreSQL benötigt die Kernel-Unterstützung fü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ür Shared Memory konfiguriert, oder Du mußt den -Shared Memory Bereich vergrößern. -Die genaue Größe hängt von Deiner Systemarchitektur ab und mit wievielen -Puffern und Serverprozessen Du postmaster konfiguriert hast. -Für die meisten Systeme, mit Standardangaben für Puffer und Prozessen benö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ötigt eine Semaphore pro möglichen Backend-Prozess. -Eine Zwischenlösung wä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äßigen 32. - -Eine dauerhafte Lösung wäre es, die Kernel-Parameter -<I>SEMMNS</I> und <I>SEMMNI</I> zu erhöhen.<P> - -Falls die Fehlermeldung anders aussieht, hast Du möglicherweise keine Semaphoren-Unterstützung -in Deinem Kernel aktiviert.<P> - - -<H4><a name="3.6">3.6</a>) Wie verhindere ich, daß andere Hosts auf meine PostgreSQL Datenbanken zugreifen?</H4><P> - -Die Standardeinstellung ist, daß PostgreSQL Verbindungen von der lokalen Maschine über -Unix-Domain-Sockets erlaubt. Andere Maschinen werden keine Verbindung aufbauen kö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öglichen, stelle sicher, daß der postmaster -mit der <I>-i</I> Option gestartet wurde, und fü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önnen. Das ist eine Sicherheitsmaßnahme, -wegen der Möglichkeit Objekt-Module dynamisch in die Datenbank zu linken. -<P> - - -<H4><a name="3.9">3.9</a>) Alle meine Server stürzen bei gleichzeitigem Tabellenzugriff ab. Warum?</H4><P> - -Dieses Problem kann durch einen Kernel verursacht werden, der ohne Support für Semaphoren -konfiguriert wurde. - - -<H4><a name="3.10">3.10</a>) Wie optimiere ich die Datenbankmaschine für bessere Leistung?</H4><P> - -Sicherlich kö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, überprü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. Überprüfe, ob die Statements nicht -in einen einzelnen Transaktions-Block zusammengefasst werden können. Das reduziert den Transaktions-Overhead. - -Du kannst auch erwägen, Indizes zu löschen und neu zu erstellen, wenn Du große -Datenmengen änderst.<P> - -Es gibt verschiedene Tuning-Maß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ür den Backend-Prozess erhöhen. -Falls Du diesen Wert zu hoch einstellst, kann es sein, daß der postmaster nicht startet, weil -der Shared Memory Speicherplatz Deines Kernels aufgebraucht wird. -Jeder Puffer ist 8 kB groß und es gibt standardmäßig 64 Puffer.<P> - -Du kannst ebenfalls die -S Option des Backends nutzen, um die Größe des Speicherplatzes für -temporäres Sortieren zu erhöhen. -Der -S Wert wird in Kilobyte gemessen und ist standardmäßig auf 512 kB festgelegt. Es wäre -jedoch unklug, den Wert zu hoch anzugeben, da ein Query möglicherweise Speicherplatzmangel verursacht, -wenn es viele gleichzeitige Sortierungen durchführen muß.<P> - -Der <I>cluster</I> Befehl kann benutzt werden, um Daten in Basistabellen zu gruppieren, so daß sie -auf einen Index zusammengebracht werden. Siehe auch die cluster(l) Man-Page für weitere Details. - - -<H4><a name="3.11">3.11</a>) Welche Debugging/Fehlersuch-Hilfsmittel sind für PostgreSQL verfügbar?</H4><P> - -PostgreSQL hat einige Möglichkeiten, Statusinformationen zu berichten, die -nützlich für die Fehlersuche sein kö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ügung. -Stelle zuerst sicher, daß Du den Standard-Output und Fehlerkanal in eine Datei umleitest, wenn Du den postmaster startest, : -<PRE> -<CODE> - cd /usr/local/pgsql - ./bin/postmaster >server.log 2>&1 & -</CODE> -</PRE><P> - -Das erzeugt eine server.log Datei im PostgreSQL-Verzeichnis. -Diese Datei enthält nützliche Informationen ü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ße Logdateien! -<P> - -Du kannst tatsä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ß 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äuft es nicht in der -gleichen Umgebung und deshalb können einige locking/backend Operationen -nicht reproduziert werden. -Einige Betriebssysteme können sich an einen Backend-Prozess direkt -anhängen, um Probleme zu diagnostizieren. -<P> - -Das Programm postgres hat -s, -A und -t Optionen, die bei der Fehlersuche -und Leistungsmessung sehr nützlich sein können. - -Du kannst das Paket auch mit Profiling kompilieren, um zu sehen, welche Funktionen wieviel -Ausfü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ßt die Grenze des postmasters, die festlegt, - wieviele gleichzeitige Backend-Prozesse gestartet werden können, hochsetzen.<P> - -In Postgres 6.5 sind das normalerweise 32 Prozesse. Du kannst diesen Wert dadurch erhöhen, -daß 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ö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ährend der Konfiguration -setzen, indem Du <I>--with-maxbackends</I> angibst. - -Anmerkung: Falls Du <I>-N</I> größer als 32 einstellst, solltest -Du <I>-B</I> auf einen Wert, höher als 64 setzen. -Für eine hohe Anzahl an Backend-Prozessen, solltest Du möglicherweise einige -Unix-Kernel Parameter ebenfalls erhöhen. -Folgendes Parameter solltest Du prüfen: -die Maximalgröß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öffneten Dateien <I>NFILE</I> und <I>NINODE.</I> - -Der Grund für die Begrenzung der erlaubten Backend-Prozesse liegt darin, daß -verhindert werden soll, daß 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 Ä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äre Dateien, die durch den Query-Ausführer erzeugt werden. -Wenn zum Beispiel eine Sortierung durchgeführt werden muß, um ein <I>ORDER BY</I> -auszuführen, und diese Sortierung mehr Platz benötigt, als mit dem Backend-Parameter -S -erlaubt wurde, dann werden diese temporären Dateien erzeugt, um die Daten dort zu halten. -<P> - -Die temporären Dateien sollten automatisch gelöscht werden, falls das Backend jedoch -während einer Sortierung abstürzt, bleiben sie erhalten. -Wenn zu diesem Zeitpunkt keine Transaktion läuft, kannst Du die -pg_tempNNN.NN Dateien ohne Gefahr lö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ßt explizit die pg_group-Tabelle mittels INSERT/UPDATE modifizieren. -Zum Beispiel: - -<PRE> -<CODE> - jolly=> INSERT into pg_group (groname, grosysid, grolist) - jolly=> values ('posthackers', '1234', '{5443, 8261}'); - INSERT 548224 - jolly=> grant INSERT on foo to group posthackers; - CHANGE - jolly=> -</CODE> -</PRE><P> - - 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ür jede Gruppe sein. -<LI> grolist: die Liste der pg_user IDs, die zu dieser Gruppe gehö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> - -Überprü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ür eine Beschreibung.<P> - -<H4><a name="4.3">4.3</a>) Wie wä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ß alle Ergebniszeilen zum Client übermittelt werden. -Die komplette Abfrage muß abgearbeitet werden, selbst wenn Du nur die ersten paar Zeilen haben möchtest. -Ziehe ein Query in Erwägung, das ein <I>ORDER BY</I> benutzt. Es gibt keine Möglichkeit Zeilen -zurü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ür <I>psql</I> ansehen. -Sie enthält die SQL-Befehle, die die Backslash-Kommandos (\) ausfü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ü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ützen <I>alter table drop column</I> nicht, aber mache es so: -<PRE> <CODE> - SELECT ... -- wähle alle Spalten auß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öße für eine Zeile, eine Tabelle, eine Datenbank?</H4><P> - -Zeilen sind auf 8 kB begrenzt, aber das kann geändert werden, indem Du in -<I>include/config.h</I> die Konstante <I>BLCKSZ</I> änderst. -Um Attribute mit mehr als 8 kB zu nutzen, kannst Du auch das "Large Object Interface" benutzen.<P> -Zeilen überschreiten keine 8 kB-Grenzen. Eine Zeile mit 5 kB wird 8 kB Speicherplatz benötigen. -<P> - -Tabellen- und Datenbankgröß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ötigt eine Datenbank zur Speicherung einer Datendatei mit zeilenweisen Datensätzen?<BR></H4><P> - -Eine Postgres Datenbank kann ungefä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ötigt 2,4 MB Speicherplatz. -Die Größe der Postgres Datenbankdatei, die diese Daten enthält, liegt -ungefähr bei 14 MB. - -<PRE> - 36 Bytes: jeder Zeilenkopf (ungefähr) - + 8 Bytes: zwei Integer-Felder @ jedes 4 Bytes - + 4 Bytes: Zeiger auf den Datensatz - ----------------------------------------------- - 48 Bytes pro Zeile - - Die Größ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önnen so auch sehr groß 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ö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ßt Du ein explizites <I>vacuum</I> eingeben. -Nach dieser Aktualisierung weiß 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ürde.<P> - -Benutze den Befehl <I> vacuum analyze</I> für die spaltenspezifische Optimierung. - <I>Vacuum analyze</I> ist für komplexe Multi-Join-Abfragen wichtig, damit der Optimierer -die Anzahl der Zeilen von jeder Tabelle schätzen und dann die passende Join-Reihenfolge -wählen kann. -Das Backend verfolgt die Spaltenstatistik nicht selbst, so daß <I>vacuum analyze</I> -regelmäßig aufgerufen werden sollte. -<P> - -Indizes werden nicht für <I>ORDER BY</I> Operationen benutzt.<P> - -Bei der Nutzung von Wildcard-Operatoren wie <I>LIKE</I> oder <I>~,</I> kö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> beginnen (Die Sucheparameter regulärer Ausdrücke sollten -mit <I>^.</I> 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äumliche Daten zu indizieren. -Ein Hash-Index kann nicht für Bereichssuchen genutzt werden. -Ein B-Tree Index kann nur für Bereichssuchen in eindimensionalen Daten -genutzt werden. R-Trees kö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ö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önnen Polygone und Rechtecke verarbeiten. -Theoretisch kö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über, wie das zu machen wä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ösen. -Es erlaubt die Behandlung von großen Join-Queries ohne erschöpfende Suche. -<P> -Für weitere Informationen siehe die Dokumentation. - - -<H4><a name="4.13">4.13</a>) Wie verfahre ich bei der Suche mit regulären Ausdrücken und bei einer Suche mit Ignorierung der Groß- und Kleinschreibweisen?</H4><P> - -<I>~</I> und <I>~*</I> 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ß 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üllt bis zur angegebenen Länge -VARCHAR(#) varchar Die Größe legt die Maximallänge fest, kein Ausfüllen mit Leerzeichen -TEXT text Die Länge wird nur durch die maximale Zeilenlänge beschränkt -BYTEA bytea Bytearray mit variabler Länge -</PRE><P> - -Du mußt die internen Namen benutzen, wenn Du interne Operationen durchführen willst. -<P> - -Die letzten vier Typen sind "varlena"-Typen (d.h. die ersten vier Bytes geben die Länge an, gefolgt -von den Daten). -<I>CHAR(#)</I> belegt die maximale Anzahl von Bytes, unabhängig davon, wieviele Daten im -Feld gespeichert werden. -<I>TEXT, VARCHAR(#)</I> und <I>BYTEA</I> haben alle eine variable Länge auf dem Datenträger, -deshalb gibt es einen leichten Geschwindigkeitsnachteil bei der Nutzung dieser Typen. -Genauer, der Nachteil gilt fü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öhung des Inhalts?</H4><P> - -PostgreSQL unterstü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ür weitere Informationen über Sequenzen. - -Du kannst aber auch das <I>Oid</I> Feld jeder Zeile als eindeutigen Wert nutzen. -Jedoch muß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ä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ößer als dieser Wert. -Standardmäß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ö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 ändern, oder eine Kopie der -Tabelle mit den originalen Oids anlegen kö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 ändern sich, wenn Zeilen geändert oder -neu geladen werden. Sie werden von Index-Einträgen genutzt, um die -Zeilen physisch zu adressieren. - -<H4><a name="4.18">4.18</a>) Was ist die Bedeutung der verschiedenen Ausdrücke, die in PostgreSQL benutzt werden (z.B. attribute, class,...)?</H4><P> - -Einige der Quelltexte und die ältere Dokumentation nutzen allgemeine Begriffe. -Hier sind einige aufgefü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öglicherweise ist der virtuelle Speicher verbraucht oder Dein Kernel hat -eine niedrige Grenze fü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ür Prozesse erhöhen und vielleicht -lä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ü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ß -<I>lo_open</I> in eine Transaktion eingebunden werden muß, 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ßt, was sofort nach dem <I>lo_open</I> passiert, -wenn Du nicht innerhalb einer Transaktion bist. -So fü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ß Du -<CODE>auto-commit off</CODE> setzen muß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ßerdem sicher, daß 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ß Du nicht <I>malloc/free</I> und <I>palloc/pfree</I> durcheinanderwü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ückliefert?</H4><P> - -Das erfordert derart extreme Genialität, daß die Autoren es niemals versucht haben, -obwohl es im Prinzip zu machen wäre.<P> - -<H4><a name="5.5">5.5</a>) Ich habe eine der Quellendateien geändert. Warum macht sich die Änderung beim erneuten Compilerlauf nicht bemerkbar?</H4><P> - -Die Makefiles finden nicht die richtigen Abhängigkeiten. Du muß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 >server.log 2>&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>╔╙╔ж╔╦╔╖╔╞╔х╓нл╬а╟╓о║╒<<I>table</I>>_<<I>serialcolumn</I>>_<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->{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 <juk@postgresql.jp></A>) - - ╓Ё╓нFAQ╓ноблУ╓н╨Ню╝╓к╓╒╓©╓Й╤╗но╓Р╓╥╓ф╓╞╓ю╓╣╓ц╓©йЩ║╧(╥и╬н╓он╛╓╣╓╩╓ф╓╓╓©╓ю╓╜╓ч╓╧): - - едцГ л╜(<A HREF="mailto:Tanaka.Minoru@keiken.co.jp">Minoru Tanaka <Tanaka.Minoru@keiken.co.jp></A>) - юп╟Ф цёив(<A HREF="mailto:t-ishii@sra.co.jp">Tatsuo Ishii <t-ishii@sra.co.jp></A>) - СНфё цн©м(<A HREF="mailto:tomos@elelab.nsc.co.jp">Tomohito Saitoh <tomos@elelab.nsc.co.jp></A>) - го╬Л х╔(<A HREF="mailto:baba@kusastro.kyoto-u.ac.jp">Hajime Baba <baba@kusastro.kyoto-u.ac.jp></A>) - ╡╛кэ ╟Л╧╛(<A HREF="mailto:kokamoto@itg.hitachi.co.jp">Kazuyuki Okamoto <kokamoto@itg.hitachi.co.jp></A>) - ╬╝©Ш ╬╪╟Л(<A HREF="mailto:s-kosuge@str.hitachi.co.jp">Shoichi Kosuge <s-kosuge@str.hitachi.co.jp></A>) - ╩Ё╡╪ ╣аг╥(<A HREF="mailto:dica@eurus.dti.ne.jp">Yoshiyuki Yamashita <dica@eurus.dti.ne.jp></A>) - ╤╜ ©©бюо╨(<A HREF="mailto:s_sakai@mxn.mesh.ne.jp">Sintaro Sakai <s_sakai@mxn.mesh.ne.jp></A>) - ю╦╠ш ╬╩╦й(<A HREF="mailto:ogochan@zetabits.com">Masami Ogoshi <ogochan@zetabits.com></A>) - юпюН ╫с╧т(<A HREF="mailto:tosiyuki@gol.com">Toshiyuki Ishikawa <tosiyuki@gol.com></A>) - кэед лп╧╜(<A HREF="mailto:fwif0083@mb.infoweb.ne.jp">Shigehiro Honda <fwif0083@mb.infoweb.ne.jp></A>) - ╓╩╓╩ ╓╦╓Е╓С(<A HREF="mailto:sesejun@linet.gr.jp">Jun Sese <sesejun@linet.gr.jp></A>) - ©юц╚ ╠я╧╖(<A HREF="mailto:hkamiya@catvmics.ne.jp">Hidetaka Kamiya <hkamiya@catvmics.ne.jp></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 >server.log 2>&1 & -</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: - <<I>tabela</I>>_<<I>kolumnatypuserial</I>>_<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->{pg_oid_status}</I> po - wykonaniu <I>$sth->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 >server.log 2>&1 & -</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> - будет <<I>table</I>>_<<I>serialcolumn</I>>_<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->{pg_oid_status}</I> - после <I>$sth->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> - |