From d800532536d98b6eb2dd891ced54660f81445d04 Mon Sep 17 00:00:00 2001 From: Bruce Momjian <bruce@momjian.us> Date: Thu, 6 Jul 2000 23:14:30 +0000 Subject: [PATCH] Move FAQ source into main cvs tree. --- doc/src/FAQ/FAQ.html | 1268 ++++++++++++++++++++++++++++ doc/src/FAQ/FAQ_DEV.html | 486 +++++++++++ doc/src/FAQ/FAQ_german.html | 1136 +++++++++++++++++++++++++ doc/src/FAQ/FAQ_hpux.html | 172 ++++ doc/src/FAQ/FAQ_irix.html | 492 +++++++++++ doc/src/FAQ/FAQ_linux.html | 704 +++++++++++++++ doc/src/FAQ/FAQ_linux_german.html | 748 ++++++++++++++++ doc/src/FAQ/FAQ_linux_italian.html | 666 +++++++++++++++ doc/src/FAQ/FAQ_solaris.html | 168 ++++ 9 files changed, 5840 insertions(+) create mode 100644 doc/src/FAQ/FAQ.html create mode 100644 doc/src/FAQ/FAQ_DEV.html create mode 100644 doc/src/FAQ/FAQ_german.html create mode 100755 doc/src/FAQ/FAQ_hpux.html create mode 100755 doc/src/FAQ/FAQ_irix.html create mode 100644 doc/src/FAQ/FAQ_linux.html create mode 100644 doc/src/FAQ/FAQ_linux_german.html create mode 100644 doc/src/FAQ/FAQ_linux_italian.html create mode 100644 doc/src/FAQ/FAQ_solaris.html diff --git a/doc/src/FAQ/FAQ.html b/doc/src/FAQ/FAQ.html new file mode 100644 index 00000000000..c118ccb0c34 --- /dev/null +++ b/doc/src/FAQ/FAQ.html @@ -0,0 +1,1268 @@ +<HTML> +<HEAD> +<TITLE>PostgreSQL FAQ</TITLE> +</HEAD> +<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#A00000" ALINK="#0000FF"> +<H1> +Frequently Asked Questions (FAQ) for PostgreSQL +</H1> +<P> +Last updated: Fri Jun 2 11:32:13 EDT 2000 +<P> +Current maintainer: Bruce Momjian (<A +HREF="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR><P> + +The most recent version of this document can be viewed at the postgreSQL +Web site, <A HREF="http://www.Postgresql.org">http://www.PostgreSQL.org</A>.<P> + +Linux-specific questions are answered in <A +HREF="http://www.PostgreSQL.org/docs/faq-linux.html">http://www.PostgreSQL.org/docs/faq-linux.html</A>.<P> + +HPUX-specific questions are answered in <A +HREF="http://www.PostgreSQL.org/docs/faq-hpux.html">http://www.PostgreSQL.org/docs/faq-hpux.html</A>.<P> + +Solaris-specific questions are answered in <A +HREF="http://www.postgresql.org/docs/faq-solaris.html">http://www.postgresql.org/docs/faq-solaris.html</A>.<P> + +Irix-specific questions are answered in <A +HREF="http://www.PostgreSQL.org/docs/faq-irix.html">http://www.PostgreSQL.org/docs/faq-irix.html</A>.<P> + +<HR><P> + +<H2><CENTER>General Questions</CENTER></H2> + +<A HREF="#1.1">1.1</A>) What is PostgreSQL?<BR> +<A HREF="#1.2">1.2</A>) What's 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 for PostgreSQL?<BR> +<A HREF="#1.7">1.7</A>) What is the latest release of PostgreSQL?<BR> +<A HREF="#1.8">1.8</A>) What documentation is available for PostgreSQL?<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 SQL?<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 DBMS's?<BR> + + +<H2><CENTER>User Client Questions</CENTER></H2> + +<A HREF="#2.1">2.1</A>) Are there ODBC drivers for +PostgreSQL?<BR> +<A HREF="#2.2">2.2</A>) What tools are available for hooking +PostgreSQL to 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><CENTER>Administrative Questions</CENTER></H2> + +<A HREF="#3.1">3.1</A>) Why does initdb fail?<BR> +<A HREF="#3.2">3.2</A>) How do I install PostgreSQL somewhere other than +/usr/local/pgsql?<BR> +<A HREF="#3.3">3.3</A>) When I start the postmaster, I get a +<I>Bad System Call</I> or core dumped message. Why?<BR> +<A HREF="#3.4">3.4</A>) When I try to start the postmaster, I get +<I>IpcMemoryCreate</I> errors3. Why?<BR> +<A HREF="#3.5">3.5</A>) When I try to start the postmaster, I get +<I>IpcSemaphoreCreate</I> errors. Why?<BR> +<A HREF="#3.6">3.6</A>) How do I prevent other hosts from accessing my +PostgreSQL database?<BR> +<A HREF="#3.7">3.7</A>) Why can't I connect to my database from +another machine?<BR> +<A HREF="#3.8">3.8</A>) Why can't I access the database as the +<I>root</I> user?<BR> +<A HREF="#3.9">3.9</A>) All my servers crash under concurrent +table access. Why?<BR> +<A HREF="#3.10">3.10</A>) How do I tune the database engine for +better performance?<BR> +<A HREF="#3.11">3.11</A>) What debugging features are available in +PostgreSQL?<BR> +<A HREF="#3.12">3.12</A>) I get 'Sorry, too many clients' when trying to +connect. Why?<BR> +<A HREF="#3.13">3.13</A>) What are the pg_psort.XXX files in my +database directory?<BR> + +<H2><CENTER>Operational Questions</CENTER></H2> + +<A HREF="#4.1">4.1</A>) The system seems to be confused about commas, +decimal points, and date formats.<BR> +<A HREF="#4.2">4.2</A>) What is the exact difference between +binary cursors and normal cursors?<BR> +<A HREF="#4.3">4.3</A>) How do I <I>select</I> only the first few rows of +a query?<BR> + +<A HREF="#4.4">4.4</A>) How do I get a list of tables, or other +things I can see in <I>psql?</I><BR> +<A HREF="#4.5">4.5</A>) How do you remove a column from a table?<BR> + +<A HREF="#4.6">4.6</A>) What is the maximum size for a +row, table, database?<BR> +<A HREF="#4.7">4.7</A>) How much database disk space is required +to store data from a typical flat file?<BR> + +<A HREF="#4.8">4.8</A>) How do I find out what indices or +operations are defined in the database?<BR> +<A HREF="#4.9">4.9</A>) My queries are slow or don't make use of the +indexes. Why?<BR> +<A HREF="#4.10">4.10</A>) How do I see how the query optimizer is +evaluating my query?<BR> +<A HREF="#4.11">4.11</A>) What is an R-tree index?<BR> +<A HREF="#4.12">4.12</A>) What is Genetic Query Optimization?<BR> + +<A HREF="#4.13">4.13</A>) How do I do regular expression searches +and case-insensitive regexp searching?<BR> +<A HREF="#4.14">4.14</A>) In a query, how do I detect if a field +is NULL?<BR> +<A HREF="#4.15">4.15</A>) What is the difference between the +various character types?<BR> +<A HREF="#4.16.1">4.16.1</A>) How do I create a serial/auto-incrementing field?<BR> +<A HREF="#4.16.2">4.16.2</A>) How do I get the value of a serial insert?<BR> +<A HREF="#4.16.3">4.16.3</A>) Don't currval() and nextval() lead to a +race condition with other concurrent backend processes?<BR> + +<A HREF="#4.17">4.17</A>) What is an oid? What is a tid?<BR> +<A HREF="#4.18">4.18</A>) What is the meaning of some of the terms +used in PostgreSQL?<BR> + +<A HREF="#4.19">4.19</A>) Why do I get the error "FATAL: palloc +failure: memory exhausted?"<BR> +<A HREF="#4.20">4.20</A>) How do I tell what PostgreSQL version I +am running? <BR> +<A HREF="#4.21">4.21</A>) My large-object operations get <I>invalid +large obj descriptor.</I> Why?<BR> +<A HREF="#4.22">4.22</A>) How do I create a column that will default to the +current time?<BR> +<A HREF="#4.23">4.23</A>) Why are my subqueries using <CODE>IN</CODE> so +slow?<BR> +<A HREF="#4.24">4.24</A>) How do I do an <i>outer</i> join?<BR> + +<H2><CENTER>Extending PostgreSQL</CENTER></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>) What does the message: +<I>NOTICE:PortalHeapMemoryFree: 0x402251d0 not in alloc set!</I> mean?<BR> +<A HREF="#5.3">5.3</A>) How can I contribute some nifty new types and functions +for PostgreSQL?<BR> +<A HREF="#5.4">5.4</A>) How do I write a C function to return a +tuple?<BR> +<A HREF="#5.5">5.5</A>) I have changed a source file. Why does the +recompile does not see the change?<BR> + + +<HR> + +<H2><CENTER>General Questions</CENTER></H2> +<H4><A +NAME="1.1">1.1</A>) What is PostgreSQL?</H4><P> + +PostgreSQL is an enhancement of the POSTGRES database management system, +a next-generation DBMS research prototype. While PostgreSQL retains the +powerful data model and rich data types of POSTGRES, it replaces the +PostQuel query language with an extended subset of SQL. PostgreSQL is +free and the complete source is available.<P> + +PostgreSQL development is being performed by a team of Internet +developers who all subscribe to the PostgreSQL development mailing list. +The current coordinator is Marc G. Fournier (<A +HREF="mailto:scrappy@postgreSQL.org">scrappy@postgreSQL.org</A>). (See +below on how to join). This team is now responsible for all current and +future development of PostgreSQL.<P> + +The authors of PostgreSQL 1.01 were Andrew Yu and Jolly Chen. Many +others have contributed to the porting, testing, debugging and +enhancement of the code. The original Postgres code, from which +PostgreSQL is derived, was the effort of many graduate students, +undergraduate students, and staff programmers working under the +direction of Professor Michael Stonebraker at the University of +California, Berkeley.<P> + +The original name of the software at Berkeley was Postgres. When SQL +functionality was added in 1995, its name was changed to Postgres95. The +name was changed at the end of 1996 to PostgreSQL.<P> + +It is pronounced <I>Post-Gres-Q-L.</I> + +<H4><A NAME="1.2">1.2</A>) What's the copyright on +PostgreSQL?</H4><P> + +PostgreSQL is subject to the following COPYRIGHT.<P> + +PostgreSQL Data Base Management System<P> + +Portions copyright (c) 1996-2000, PostgreSQL, Inc + +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> + +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> + + + +<H4><A NAME="1.3">1.3</A>) What Unix platforms does PostgreSQL run +on?</H4><P> + +The authors have compiled and tested PostgreSQL on the following +platforms (some of these compiles require gcc): +<UL> +<LI> aix - IBM on AIX 3.2.5 or 4.x +<LI> alpha - DEC Alpha AXP on Digital Unix 2.0, 3.2, 4.0 +<LI> BSD44_derived - OSs derived from 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 on HP-UX 9.*, 10.* +<LI> i386_solaris - i386 Solaris +<LI> irix5 - SGI MIPS on IRIX 5.3 +<LI> linux - Intel i86 + Alpha + SPARC + PPC + M68k +<LI> sco - SCO 3.2v5 + Unixware +<LI> sparc_solaris - SUN SPARC on Solaris 2.4, 2.5, 2.5.1 +<LI> sunos4 - SUN SPARC on SunOS 4.1.3 +<LI> svr4 - Intel x86 on Intel SVR4 and MIPS +<LI> ultrix4 - DEC MIPS on Ultrix 4.4 +</UL> +<P> + +<H4><A NAME="1.4">1.4</A>) What non-unix ports are available?</H4><P> + +It is possible to compile the libpq 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.<P> + +A file <I>win31.mak</I> is included in the distribution for making a +Win32 libpq library and psql.<P> + +The database server is now working on Windows NT using the Cygnus +Unix/NT porting library. See pgsql/doc/README.NT in the distribution.<P> +There is also a web page at <A HREF= +"http://www.freebsd.org/~kevlo/postgres/portNT.html"> +http://www.freebsd.org/~kevlo/postgres/portNT.html.</A> + +There is another port using U/Win at <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>) 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> +<P> +For mirror sites, see our main web site. + +<H4><A NAME="1.6">1.6</A>) Where can I get support for PostgreSQL?</H4><P> + +There is no official support for PostgreSQL from the University of +California, Berkeley. It is maintained through volunteer effort.<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 a mail with the lines in the body (not +the subject line) + +<PRE> + subscribe + end +</PRE><P> + +to <A +HREF="mailto:pgsql-general-request@postgreSQL.org">pgsql-general-request@postgreSQL.org</A>.<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: + +<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:bugs-request@postgreSQL.org">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:hackers-request@postgreSQL.org">hackers-request@postgreSQL.org</A> +with a BODY of:<P> + +<PRE> + subscribe + end +</PRE><P> + +Additional mailing lists and information about PostgreSQL can be found +via the PostgreSQL WWW home page at: + +<BLOCKQUOTE> +<A HREF="http://postgreSQL.org">http://postgreSQL.org</A> +</BLOCKQUOTE><P> + +There is also an IRC channel on EFNet, channel #PostgreSQL. +I use the unix command <CODE>irc -c '#PostgreSQL' "$USER" +irc.phoenix.net</CODE><P> + +Commercial support for PostgreSQL is available at <A +HREF="http://www.pgsql.com">http://www.pgsql.com/</A><P> + + +<H4><A NAME="1.7">1.7</A>) What is the latest release of PostgreSQL?</H4><P> + +The latest release of PostgreSQL is version 7.0.2.<P> + +We plan to have major releases every four months.<P> + + +<H4><A NAME="1.8">1.8</A>) What documentation is available for PostgreSQL?</H4><P> + +Several manuals, manual pages, and some small test examples are +included in the distribution. See the /doc directory. You can also +browse the manual on-line at <A +HREF="http://www.postgresql.org/docs/postgres"> +http://www.postgresql.org/docs/postgres.</A> +in the distribution. +<P> + +There is a PostgreSQL book availiable at <A +HREF="http://www.postgresql.org/docs/awbook.html"> +http://www.postgresql.org/docs/awbook.html</A><P> + +<I>psql</I> has some nice \d commands to show information about types, +operators, functions, aggregates, etc.<P> + +The 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 SQL-92. See our +<A HREF="http://www.postgreSQL.org/docs/todo.html"> +TODO</A> for a list of known bugs, missing features, and future plans.<P> + +<H4><A NAME="1.10">1.10</A>) How can I learn SQL?</H4><P> + +The PostgreSQL book at <A +HREF="http://www.postgresql.org/docs/awbook.html"> +http://www.postgresql.org/docs/awbook.html</A> teaches SQL. + +There is a nice tutorial at <A +HREF="http://w3.one.net/~jhoffman/sqltut.htm"> +http://w3.one.net/~jhoffman/sqltut.htm</A> and at <A +HREF="http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM"> +http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM.</A><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> + +Many of our users like <I>The Practical SQL Handbook</I>, Bowman 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 2000AD, and before 2000BC.<P> + + +<H4><A NAME="1.12">1.12</A>) How do I join the development team?</H4><P> + +First, download the latest sources and read the PostgreSQL Developers +documentation on our web site, or in the distribution. +Second, subscribe to the pgsql-hackers and pgsql-patches mailing lists. +Third, submit high-quality patches to pgsql-patches.<P> + +There are about a dozen people who have <SMALL>COMMIT</SMALL> privileges to +the PostgreSQL CVS archive. All of them have submitted so many +high-quality patches that it was a pain for the existing +committers to keep up, and we had confidence that patches they +committed were likely to be of high quality. + +<H4><A NAME="1.13">1.13</A>) How do I submit a bug report?</H4><P> + +Fill out the "bug-template" file and send it to: <A +HREF="mailto:bugs@postgreSQL.org">bugs@postgreSQL.org</A><P> + +Also check out our ftp site <A +HREF="ftp://ftp.postgreSQL.org/pub">ftp://ftp.postgreSQL.org/pub</A> to +see if there is a more recent PostgreSQL version or patches.<P> + + +<H4><A NAME="1.14">1.14</A>) How does PostgreSQL compare to other +DBMS's?</H4><P> + +There are several ways of measuring software: features, performance, +reliability, support, and price.<P> + +<DL> +<DT> <B>Features</B> +<DD> + +PostgreSQL has most features present in large commercial DBMS's, like +transactions, subselects, triggers, views, foreign key referential +integrity, and sophisticated locking. We have some features they don't +have, like user-defined types, inheritance, rules, and multi-version +concurrency control to reduce lock contention. We don't have outer +joins, but are working on them for our next release.<BR><BR> + +<DT> <B>Performance</B> +<DD> + +PostgreSQL runs in two modes. Normal <I>fsync</I> mode flushes every +completed transaction to disk, guaranteeing that if the OS crashes or +loses power in the next few seconds, all your data is safely stored on +disk. In this mode, we are slower than most commercial databases, partly +because few of them do such conservative flushing to disk in their +default modes. In <I>no-fsync</I> mode, we are usually faster than +commercial databases, though in this mode, an OS crash could cause data +corruption. We are working to provide an intermediate mode that suffers +less performance overhead than full fsync mode, and will allow data +integrity within 30 seconds of an OS crash. The mode is select-able by +the database administrator.<BR><BR> + +In comparison to MySQL or leaner database systems, we are slower on +inserts/updates because we have transaction overhead. Of course, MySQL +doesn't have any of the features mentioned in the <I>Features</I> +section above. We are built for flexibility and features, though we +continue to improve performance through profiling and source code +analysis. 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> + +We handle each user connection by creating a Unix process. Backend +processes share data buffers and locking information. With multiple +CPU's, multiple backends can easily run on different CPU's.<BR><BR> + +<DT> <B>Reliability</B> +<DD> + +We realize that a DBMS 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> + +<DT> <B>Support</B> +<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 DBMS's don't always supply a fix either. Direct access to +developers, the user community, manuals, and the source code often make +PostgreSQL support superior to other DBMS's. +There is commercial per-incident support available for those who need +it. (See support FAQ item.)<BR><BR> + +<DT> <B>Price</B> +<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> +</DL> + +<HR> + +<H2><CENTER>User Client Questions</CENTER></H2> +<P> + + + +<H4><A NAME="2.1">2.1</A>) Are there ODBC drivers for PostgreSQL?</H4><P> + +There are two ODBC drivers available, PsqlODBC and OpenLink ODBC.<P> + +PsqlODBC is included in the distribution. More information about it can +be gotten from: <A HREF="ftp://ftp.postgresql.org/pub/odbc/index.html"> +ftp://ftp.postgresql.org/pub/odbc/index.html</A><P> + +OpenLink ODBC can be gotten from <A HREF="http://www.openlinksw.com/"> +http://www.openlinksw.com</A>. It works with their standard ODBC client +software so you'll have PostgreSQL ODBC available on every client +platform they support (Win, Mac, Unix, VMS).<P> + +They will probably be selling this product to people who need +commercial-quality support, but a freeware version will always be +available. Questions to <A +HREF="mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>.<P> + +See also the <A HREF="http://www.postgresql.org/docs/programmer/odbc.htm"> +ODBC chapter of the Programmer's Guide</A>.<P> + + +<H4><A NAME="2.2">2.2</A>) What tools are available for hooking +PostgreSQL to Web pages?</H4><P> + +A nice introduction to Database-backed Web pages can be seen at: <A +HREF="http://www.webtools.com">http://www.webtools.com</A><P> + +There is also one at <A HREF="http://www.phone.net/home/mwm/hotlist/"> +http://www.phone.net/home/mwm/hotlist/.</A><P> + +For web integration, PHP is an excellent interface. It is at: +<A HREF="http://www.php.net">http://www.php.net</A><P> + +PHP is great for simple stuff, but for more complex cases, many +use the perl interface and CGI.pm.<P> + +A WWW gateway based on WDB using perl can be downloaded from <A +HREF="http://www.eol.ists.ca/~dunlop/wdb-p95">http://www.eol.ists.ca/~dunlop/wdb-p95</A> + +<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> + +We also include <I>ecpg,</I> which is an embedded SQL query language interface for +C. + +<H4><A NAME="2.4">2.4</A>) What languages are available to +communicate with PostgreSQL?</H4><P> + +We have: +<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>C Easy API(libpgeasy) +<LI>Embedded HTML(<A HREF="http://www.php.net">PHP from http://www.php.net</A>) +</UL><P> + +<HR> + +<H2><CENTER>Administrative Questions</CENTER></H2><P> + + +<H4><A NAME="3.1">3.1</A>) Why does initdb fail?</H4><P> + +<UL> +<LI> check that you don't have any of the previous version's binaries in +your path +<LI> check to see that you have the proper paths set +<LI> check that the <I>postgres</I> user owns the proper files +</UL><P> + + +<H4><A NAME="3.2">3.2</A>) How do I install PostgreSQL somewhere +other than /usr/local/pgsql?</H4><P> + +The simplest way is to specify the --prefix option when running configure. +If you forgot to do that, you can edit Makefile.global and change POSTGRESDIR +accordingly, or create a Makefile.custom and define POSTGRESDIR there.<P> + + +<H4><A NAME="3.3">3.3</A>) When I start the postmaster, 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.4">3.4</A>) When I try to start the postmaster, I +get <I>IpcMemoryCreate</I> errors. Why?</H4><P> + +You either do not have shared memory configured properly in kernel or +you need to enlarge the shared memory available in the kernel. The +exact amount you need depends on your architecture and how many buffers +and backend processes you configure postmaster to run with. +For most systems, with default numbers of buffers and processes, you +need a minimum of ~1MB.<P> + +<H4><A NAME="3.5">3.5</A>) When I try to start the postmaster, 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 the postmaster 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> + +If the error message is something else, you might not have semaphore +support configured in your kernel at all.<P> + + +<H4><A NAME="3.6">3.6</A>) How do I prevent other hosts from +accessing my PostgreSQL database?</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 the <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.7">3.7</A>) Why can't I connect to my database from +another machine?</H4><P> + +The default configuration allows only unix domain socket connections +from the local machine. To enable TCP/IP connections, make sure the +postmaster has been started with the <I>-i</I> option, and add an +appropriate host entry to the file +<I>pgsql/data/pg_hba.conf</I>. See the <I>pg_hba.conf</I> manual page.<P> + + +<H4><A NAME="3.8">3.8</A>) Why can't I access the database as the <I>root</I> +user?</H4><P> + +You should not create database users with user id 0 (root). They will be +unable to access the database. This is a security precaution because +of the ability of any user to dynamically link object modules into the +database engine.<P> + + +<H4><A NAME="3.9">3.9</A>) All my servers crash under concurrent +table access. Why?</H4><P> + +This problem can be caused by a kernel that is not configured to support +semaphores.<P> + + +<H4><A NAME="3.10">3.10</A>) How do I tune the database engine for +better performance?</H4><P> + +Certainly, indices can speed up queries. The <SMALL>EXPLAIN</SMALL> command +allows you to see how PostgreSQL is interpreting your query, and which +indices are being used.<P> + +If you are doing a lot of <SMALL>INSERTs</SMALL>, consider doing them in a large +batch using the <SMALL>COPY</SMALL> command. This is much faster than single +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 indices when making large data +changes.<P> + +There are several tuning things that can be done. You can disable +fsync() by starting the postmaster with a <I>-o -F</I> option. This will +prevent <I>fsync()'s</I> from flushing to disk after every transaction.<P> + +You can also use the postmaster -B option to increase the number of +shared memory buffers used by the backend processes. If you make this +parameter too high, the postmaster may not start up because you've exceeded +your kernel's limit on shared memory space. +Each buffer is 8K and the default is 64 buffers.<P> + +You can also use the backend -S option to increase the maximum amount +of memory used by the backend process for temporary sorts. The -S value +is measured in kilobytes, and the default is 512 (ie, 512K).<P> + +You can also use the <SMALL>CLUSTER</SMALL> command to group data in base tables to +match an index. See the cluster(l) manual page for more details.<P> + + +<H4><A NAME="3.11">3.11</A>) What debugging features are available in +PostgreSQL?</H4><P> + +PostgreSQL has several features that report status information that can +be valuable for debugging purposes.<P> + +First, by running configure with the --enable-cassert option, many +<I>assert()'s</I> monitor the progress of the backend and halt the program when +something unexpected occurs.<P> + +Both postmaster and postgres have several debug options available. +First, whenever you start the postmaster, make sure you send the +standard output and error to a log file, like: +<PRE> + 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. Postmaster has a -d option that allows even +more detailed information to be reported. The -d option takes a number +that specifies the debug level. Be warned that high debug level values +generate large log files.<P> + +If the <i>postmaster</i> is not running, you can actually run the +postgres backend from the command line, and type your SQL 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 the postmaster, it +is not running in an identical environment and locking/backend +interaction problems may not be duplicated.<P> + +If the <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 with the +debugger and trace through the startup sequence.<P> + +The postgres program has -s, -A, and -t options that can be very useful +for debugging and performance measurements.<P> + +You can also compile with profiling to see what functions are taking +execution time. The backend profile files will be deposited in the +pgsql/data/base/dbname directory. The client profile file will be put +in the client's current directory.<P> + + +<H4><A NAME="3.12">3.12</A>) I get 'Sorry, too many clients' when trying +to connect. Why?</H4><P> + +You need to increase the postmaster's limit on how many concurrent backend +processes it can start.<P> + +In Postgres 6.5 and up, the default limit is 32 processes. You can +increase it by restarting the postmaster with a suitable <I>-N</I> +value. With the default configuration you can set <I>-N</I> as large as +1024; if you need more, increase <SMALL>MAXBACKENDS</SMALL> in +<I>include/config.h</I> and rebuild. You can set the default value of +<I>-N</I> at configuration time, if you like, using configure's +<I>--with-maxbackends</I> switch.<P> + +Note that if you make <I>-N</I> larger than 32, you must also increase +<I>-B</I> beyond its default of 64; -B must be at least twice -N, 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 Postgres +has a limit on the number of allowed backend processes is so that you +can ensure that your system won't run out of resources.<P> + +In Postgres 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.13">3.13</A>) What are the pg_tempNNN.NN 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 -S parameter allows, +then temp files are created to hold the extra data.<P> + +The temp files should go away automatically, but might not if a backend +crashes during a sort. If you have no transactions running at the time, +it is safe to delete the pg_tempNNN.NN files.<P> + +<HR> + +<H2><CENTER>Operational Questions</CENTER></H2><P> + + +<H4><A NAME="4.1">4.1</A>) The system seems to be confused about +commas, decimal points, and date formats.</H4><P> + +Check your locale configuration. PostgreSQL uses the locale settings of +the user that ran the postmaster process. There are postgres and psql +SET commands to control the date format. Set those accordingly for +your operating environment.<P> + + +<H4><A NAME="4.2">4.2</A>) What is the exact difference between +binary cursors and normal cursors?</H4><P> + +See the <SMALL>DECLARE</SMALL> manual page for a description.<P> + +<H4><A NAME="4.3">4.3</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 SELECT ... LIMIT....<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.4">4.4</A>) How do I get a list of tables, or other +information I see in <I>psql?</I><BR></H4><P> + +You can read the source code for <I>psql,</I> file +pgsql/src/bin/psql/psql.c. It contains SQL commands that generate the +output for psql's backslash commands. You can also start <I>psql</I> +with the <I>-E</I> option so that it will print out the queries it uses +to execute the commands you give.<P> + + +<H4><A NAME="4.5">4.5</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: +<PRE> + 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; +</PRE><P> + + + + +<H4><A NAME="4.6">4.6</A>) What is the maximum size for a +row, table, database?</H4><P> + +These are the limits: + +<PRE> +Maximum size for a database? unlimited (60GB databases exist) +Maximum size for a table? unlimited on all operating systems +Maximum size for a row? 8k, configurable to 32k +Maximum number of rows in a table? unlimited +Maximum number of columns table? unlimited +Maximum number of indexes on a table? unlimited +</PRE> + +Of course, these are not actually unlimited, but limited to available +disk space.<P> + +To change the maximum row size, edit <I>include/config.h</I> and change +<SMALL>BLCKSZ.</SMALL> To use attributes larger than 8K, you can also +use the large object interface.<P> + +Row length limit will be removed in 7.1.<P> + + +<H4><A NAME="4.7">4.7</A>)How much database disk space is required to +store data from a typical flat file?<BR></H4><P> + +A Postgres database can require about six and a half times the disk space +required to store the data in a flat file.<P> + +Consider a file of 300,000 lines with two integers on each line. The +flat file is 2.4MB. The size of the PostgreSQL database file containing +this data can be estimated at 14MB: + +<PRE> + 36 bytes: each row header (approximate) + + 8 bytes: two int fields @ 4 bytes each + + 4 bytes: pointer on page to tuple + ---------------------------------------- + 48 bytes per row + + The data page size in PostgreSQL is 8192 bytes (8 KB), so: + + 8192 bytes per page + ------------------- = 171 rows per database page (rounded up) + 48 bytes per row + + 300000 data rows + -------------------- = 1755 database pages + 171 rows per page + +1755 database pages * 8192 bytes per page = 14,376,960 bytes (14MB) +</PRE></P> + +Indexes do not contain as much overhead, but do contain the data that is +being indexed, so they can be large also.<P> + +<H4><A NAME="4.8">4.8</A>) How do I find out what indices or +operations are defined in the database?</H4><P> + +<I>psql</I> has a variety of backslash commands to show such information. Use +\? to see them.<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.9">4.9</A>) My queries are slow or don't make +use of the indexes. Why?</H4><P> + +PostgreSQL does not automatically maintain statistics. One has to make +an explicit <SMALL>VACUUM</SMALL> call to update the statistics. After +statistics are updated, the optimizer knows how many rows in the table, +and can better decide if it should use indices. Note that the optimizer +does not use indices in cases when the table is small because a +sequential scan would be faster.<P> + +For column-specific optimization statistics, use <SMALL>VACUUM +ANALYZE.</SMALL> <SMALL>VACUUM ANALYZE</SMALL> is important for complex +multi-join queries, so the optimizer can estimate the number of rows +returned from each table, and choose the proper join order. The backend +does not keep track of column statistics on its own, so <SMALL>VACUUM +ANALYZE</SMALL> must be run to collect them periodically.<P> + +Indexes are usually not used for <SMALL>ORDER BY</SMALL> operations: a +sequential scan followed by an explicit sort is faster than an indexscan +of all tuples of a large table, because it takes fewer disk accesses. +<P> + +When using wild-card operators such as <SMALL>LIKE</SMALL> or <I>~,</I> indices can +only be used if the beginning of the search is anchored to the start of +the string. So, to use indices, <SMALL>LIKE</SMALL> searches should not +begin with <I>%,</I> and <I>~</I>(regular expression searches) should +start with <I>^.</I> + +<H4><A NAME="4.10">4.10</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.11">4.11</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-tree's 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 efficient answer queries like select all points +within a bounding rectangle.<P> + +The canonical paper that describes the original R-Tree design is:<P> + +Guttman, A. "R-Trees: A Dynamic Index Structure for Spatial Searching." +Proc of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57.<P> + +You can also find this paper in Stonebraker's "Readings in Database +Systems"<P> + +Builtin R-Trees can handle polygons and boxes. In theory, R-trees can +be extended to handle higher number of dimensions. In practice, +extending R-trees require a bit of work and we don't currently have any +documentation on how to do it.<P> + + +<H4><A NAME="4.12">4.12</A>) What is Genetic Query +Optimization?</H4><P> + +The GEQO module in PostgreSQL is intended to solve the query +optimization problem of joining many tables by means of a Genetic +Algorithm (GA). It allows the handling of large join queries through +non-exhaustive search.<P> + +For further information see the documentation. + + + +<H4><A NAME="4.13">4.13</A>) How do I do regular expression searches and +case-insensitive regexp searching?</H4><P> + +The <I>~</I> operator does regular-expression matching, and <I>~*</I> +does case-insensitive regular-expression matching. There is no +case-insensitive variant of the LIKE operator, but you can get the +effect of case-insensitive <SMALL>LIKE</SMALL> with this: +<PRE> + WHERE lower(textfield) LIKE lower(pattern) +</PRE> + +<H4><A NAME="4.14">4.14</A>) In a query, how do I detect if a field +is NULL?</H4><P> + +You test the column with IS NULL and IS NOT NULL.<P> + + +<H4><A NAME="4.15">4.15</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 length limited only by maximum row length +BYTEA bytea variable-length array of bytes +</PRE><P> + +You will see the internal name when examining system catalogs +and in some error messages.<P> + +The last four types above are "varlena" types (i.e. the first four bytes +are the length, followed by the data). <I>char(#)</I> allocates the +maximum number of bytes no matter how much data is stored in the field. +<I>text, varchar(#),</I> and <I>bytea</I> all have variable length on the disk, +and because of this, there is a small performance penalty for using +them. Specifically, the penalty is for access to all columns after the +first column of this type.<P> + + +<H4><A NAME="4.16.1">4.16.1</A>) How do I create a +serial/auto-incrementing field?</H4><P> + +PostgreSQL supports <SMALL>SERIAL</SMALL> data type. It auto-creates a +sequence and index on the column. For example, this... +<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's -o</I> +option or <SMALL>COPY WITH OIDS</SMALL> option to preserve the oids.<P> + +For more details, see Bruce Momjian's chapter on +<A HREF="http://www.postgresql.org/docs/aw_pgsql_book">Numbering Rows.</A> + +<H4><A NAME="4.16.2">4.16.2</A>) How do I get the back the generated SERIAL value after an insert?</H4><P> +Probably the simplest approach is to to retrieve the next SERIAL 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.16.1">4.16.1</A>, that might look like this: +<PRE> + $newSerialID = nextval('person_id_seq'); + INSERT INTO person (id, name) VALUES ($newSerialID, 'Blaise Pascal'); +</PRE> +You would then also have the new value stored in <CODE>$newSerialID</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 SEQUENCE 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 SERIAL column, respectively. +<P> +Similarly, you could retrieve the just-assigned SERIAL value with the <I>currval</I>() function <I>after</I> it was inserted by default, e.g., +<PRE> + INSERT INTO person (name) VALUES ('Blaise Pascal'); + $newID = currval('person_id_seq'); +</PRE> +Finally, you could use the <A HREF="#4.17">oid</A> returned from the +INSERT statement to lookup 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 +$sth->{pg_oid_status} after $sth->execute(). + +<H4><A NAME="4.16.3">4.16.3</A>) Don't currval() and nextval() lead to a race condition with other +concurrent backend processes?</H4><P> + +No. That has been handled by the backends. + + +<H4><A NAME="4.17">4.17</A>) What is an oid? What is a tid?</H4><P> + +Oids are PostgreSQL's answer to unique row ids. Every row that is +created in PostgreSQL gets a unique oid. All oids generated during +initdb are less than 16384 (from <I>backend/access/transam.h</I>). All +user-created oids are equal or greater that this. By default, all these +oids are unique not only within a table, or database, but unique within +the entire PostgreSQL installation.<P> + +PostgreSQL uses oids in its internal system tables to link rows between +tables. These oids can be used to identify specific user rows and used +in joins. It is recommended you use column type oid to store oid +values. See the <I>sql(l)</I> manual page to see the other internal columns. +You can create an index on the oid field for faster access.<P> + +Oids are assigned to all new rows from a central area that is used by +all databases. If you want to change the oid to something else, or if +you want to make a copy of the table, with the original oid's, there is +no reason you can't do it: + +<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 are used to identify specific physical rows with block and offset +values. Tids change after rows are modified or reloaded. They are used +by index entries to point to physical rows.<P> + + +<H4><A NAME="4.18">4.18</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: + +<UL> +<LI> table, relation, class +<LI> row, record, tuple +<LI> column, field, attribute +<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>) Why do I get the error "FATAL: palloc +failure: memory exhausted?"<BR></H4><P> + +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 the postmaster: + +<PRE> + ulimit -d 65536 + limit datasize 64m +</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 SQL client because the backend is returning too much data, try +it before starting the client.<P> + +<H4><A NAME="4.20">4.20</A>) How do I tell what PostgreSQL version I +am running? <BR></H4><P> + +From <I>psql,</I> type <CODE>select version();</CODE><P> + +<H4><A NAME="4.21">4.21</A>) My large-object operations get <I>invalid +large obj descriptor.</I> Why? <BR></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> + +Current PostgreSQL enforces the rule by closing large object handles at +transaction commit, which will be instantly upon completion of the +<I>lo_open</I> command if you are not inside a transaction. 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> + +If you are using a client interface like ODBC you may need to set +<CODE>auto-commit off.</CODE><P> + +<H4><A NAME="4.22">4.22</A>) How do I create a column that will default to the +current time?<BR></H4><P> +Use <i>now()</i>: +<CODE><PRE> + CREATE TABLE test (x int, modtime timestamp default now() ); +</PRE></CODE> +<P> +<H4><A NAME="4.23">4.23</A>) Why are my subqueries using <CODE>IN</CODE> so +slow?<BR></H4><P> +Currently, we join subqueries to outer queries by sequential 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>. For example, +change: +<CODE><PRE> + SELECT * + FROM tab + WHERE col1 IN (SELECT col2 FROM TAB2) +</PRE></CODE> +to: +<CODE><PRE> + SELECT * + FROM tab + WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2) +</PRE></CODE> +We hope to fix this limitation in a future release. + +<H4><A NAME="4.24">4.24</A>) How do I do an <i>outer</i> join?<BR></H4><P> +PostgreSQL does not support outer joins in the current release. They 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: +<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 tab1.col1 +</PRE> + +<HR> + +<H2><CENTER>Extending PostgreSQL</CENTER></H2><P> + + +<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. + +<H4><A NAME="5.2">5.2</A>) What does the message: +<I>NOTICE:PortalHeapMemoryFree: 0x402251d0 not in alloc set!</I> mean?</H4><P> + +You are <I>pfree'ing</I> something that was not <I>palloc'ed.</I> +Beware of mixing <I>malloc/free</I> and <I>palloc/pfree.</I> + + +<H4><A NAME="5.3">5.3</A>) How can I contribute some nifty new types and +functions for PostgreSQL?</H4><P> + + +Send your extensions to the pgsql-hackers mailing list, and they will +eventually end up in the <I>contrib/</I> subdirectory.<P> + + +<H4><A NAME="5.4">5.4</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.5">5.5</A>) I have changed a source file. Why does the +recompile does not see the change?</H4><P> + +The Makefiles do not have the proper dependencies for include files. You +have to do a <I>make clean</I> and then another <I>make</I>. + You +have to do a <I>make clean</I> and then another <I>make.</I><P> + + +</BODY> +</HTML> + diff --git a/doc/src/FAQ/FAQ_DEV.html b/doc/src/FAQ/FAQ_DEV.html new file mode 100644 index 00000000000..ba60c157c21 --- /dev/null +++ b/doc/src/FAQ/FAQ_DEV.html @@ -0,0 +1,486 @@ +<HTML> +<HEAD> +<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: Fri Jun 9 21:54:54 EDT 2000 +<P> +Current maintainer: Bruce Momjian (<a +href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>)<BR> +<P> +The most recent version of this document can be viewed at +the postgreSQL Web site, <a +href="http://PostgreSQL.org">http://PostgreSQL.org</a>. +<P> +<HR> +<P> + +<CENTER><H2>Questions</H2></CENTER> +<a href="#1">1</a>) What tools are available for developers?<BR> +<a href="#2">2</a>) What books are good for developers?<BR> +<a href="#3">3</a>) Why do we use <I>palloc</I>() and <I>pfree</I>() to allocate memory?<BR> +<a href="#4">4</a>) Why do we use <I>Node</I> and <I>List</I> to +make data structures?<BR> +<a href="#5">5</a>) How do I add a feature or fix a bug?<BR> +<a href="#6">6</a>) How do I download/update the current source tree?<BR> +<a href="#7">7</a>) How do I test my changes?<BR> +<a href="#7">7</a>) I just added a field to a structure. What else +should I do?<BR> +<a href="#8">8</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="#9">9</a>) How do I efficiently access information in +tables from the backend code?<BR> +<a href="#10">10</a>) What is elog()?<BR> +<a href="#11">11</a>) What is configure all about?<BR> +<a href="#12">12</a>) How do I add a new port?<BR> +<BR> +<HR> + +<H3><a +name="1">1</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. + +<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 get a list of typedefs in the source code + make_ctags make vi 'tags' file in each directory + make_diff make *.orig and diffs of source + make_etags make emacs 'etags' files + make_keywords.README make comparison of our keywords and SQL'92 + make_mkid make mkid ID files + mkldexport create AIX exports file + pgindent indents C source files + 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> + + +Third, you need to get <I>id-utils</I> from: +<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.<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> +<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 &etc 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><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. + +<I>pginclude</I> contains scripts used to add needed #include's to +include files, and removed unneeded #include's. + +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. + +<H3><a name="2">2</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> + +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> + + + +<H3><a name="3">3</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 automatically free all memory allocated when a +transaction completes. This makes it easier to make sure we free memory +that gets allocated in one place, but only freed much later. There are +several contexts that memory can be allocated in, and this controls when +the allocated memory is automatically freed by the backend.<P> + + +<H3><a name="4">4</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> +Here are some of the <I>List</I> manipulation commands: +<BLOCKQUOTE> +<DL> +<DT>lfirst(i) +<DD>return the data at list element <I>i.</I> +<DT>lnext(i) +<DD>return the next list element after <I>i.</I> +<DT>foreach(i, list) +<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 snipped 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> +<DT>lcons(node, list) +<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> +<DT>lappend(list, node) +<DD>add <I>node</I> to the end of <I>list.</I> This is more expensive +that lcons. +<DT>nconc(list1, list2) +<DD>Concat <I>list2</I> on to the end of <I>list1.</I> +<DT>length(list) +<DD>return the length of the <I>list.</I> +<DT>nth(i, list) +<DD>return the <I>i</I>'th element in <I>list.</I> +<DT>lconsi, ... +<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. +</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. +<P> + +<H3><a name="5">5</a>) How do I add a feature or fix a bug?</H3><P> + +The source code is over 250,000 lines. Many problems/features are +isolated to one specific area of the code. Others require knowledge of +much of the source. If you are confused about where to start, ask the +hackers list, and they will be glad to assess the complexity and give +pointers on where to start.<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> + +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> + + +<H3><a name="6">6</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> + +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> + +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="6">6</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="7">7</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="8">8</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.) + +<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="9">9</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>SearchSysCacheTuple()</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> + +The rows returned are cached-owned versions of the heap rows. They are +invalidated when the base table changes. Because the cache is local to +each backend, you may use the pointer returned from the cache for short +periods without making a copy of the tuple. If you send the pointer +into a large function that will be doing its own cache lookups, it is +possible the cache entry may be flushed, so you should use +<I>SearchSysCacheTupleCopy()</I> in these cases, and <I>pfree()</I> the +tuple when you are done.<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> + +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> + +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. + +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: + +<PRE> +<CODE> + ((Form_pg_class) GETSTRUCT(tuple))->relnatts +</CODE> +</PRE> + +You should not directly change <I>live</I> tuples in this way. The best +way is to use <I>heap_tuplemodify()</I> and pass it your palloc'ed +tuple, and the values you want changed. It returns another 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 can use it for <I>heap_update()</I> too. + +Remember, tuples can be either system cache versions, which may go away +soon after you get them, buffer cache versions, 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="10">10</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>NOTICE,</I> <I>DEBUG,</I> <I>ERROR,</I> or +<I>FATAL.</I> + +<I>NOTICE</I> prints on the user's terminal and the postmaster logs. +<I>DEBUG</I> prints only in the postmaster logs. <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. + +<H3><a name="11">11</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> + +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> + +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="12">12</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> + +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> + + +</BODY> +</HTML> diff --git a/doc/src/FAQ/FAQ_german.html b/doc/src/FAQ/FAQ_german.html new file mode 100644 index 00000000000..b8c012bfe6c --- /dev/null +++ b/doc/src/FAQ/FAQ_german.html @@ -0,0 +1,1136 @@ +<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:maillist@candle.pha.pa.us">maillist@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>WARN: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/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_hpux.html b/doc/src/FAQ/FAQ_hpux.html new file mode 100755 index 00000000000..8ef9ccd76ec --- /dev/null +++ b/doc/src/FAQ/FAQ_hpux.html @@ -0,0 +1,172 @@ +<PRE> +======================================================= +Frequently Asked Questions (FAQ) for PostgreSQL V6.4 +HP-UX Specific +TO BE READ IN CONJUNCTION WITH THE NORMAL FAQ +======================================================= +last updated: Sat Nov 28 16:21:25 EST 1998 + +current maintainer: Tom Lane (tgl@sss.pgh.pa.us) +original author: Tom Lane (tgl@sss.pgh.pa.us) + + +Questions covered here: +1.1) What do I need to install PostgreSQL on HP-UX? +1.2) Anything special about the build/install procedure? +1.3) yacc dies trying to process src/backend/parser/gram.y. +1.4) Linking the main postgres executable fails, complaining that + there's no "alloca" function. +1.5) OK, it seemed to build and install, but the regression test fails. + + +---------------------------------------------------------------------- +Section 1: Installing PostgreSQL +---------------------------------------------------------------------- + +1.1) What do I need to install PostgreSQL on HP-UX? + +PostgreSQL 6.4 is known to build and pass regression test on HPUX 9.03, +9.05, and 10.20, given appropriate system patch levels and build tools. +It should work on other HPUX 9.* and 10.* releases for Series 700/800 +machines, too. (No one has reported trying it with HPUX 11 yet.) +Since this is a new FAQ, I don't yet have a lot of information about the +exact prerequisites, but I'd appreciate hearing from anyone who fails to +build a working copy, so that we can add more info about exactly what is +needed. + +Aside from PostgreSQL 6.4 or later sources, you will need GNU make +(HP's make will not do), and either GNU gcc or HP's full ANSI C compiler. +You must also get flex (GNU lex) 2.5.4 or later --- all versions of +HP's lex fail on the Postgres lexer files. + +I'd also recommend making sure you are fairly up-to-date on HP patches, +particularly if you are using HPUX 9. At a minimum, if you are on HPUX 9, +you *must* have PHSS_4630 (libm update) or a successor patch; otherwise +Postgres' date/time functions will misbehave. On general principles you +should be current on libc and ld/dld patches, as well as compiler +patches if you are using HP's C compiler (but I don't currently know of +any specific failures due to not having recent patches for these files). +See HP's support websites, such as http://us-support.external.hp.com/, +for free copies of their latest patches. + +PostgreSQL 6.3.2 and earlier required quite a few small tweaks to +install on HPUX, so I recommend you not bother with anything older +than 6.4. + + +1.2) Anything special about the build/install procedure? + +When you run configure, you will want to explicitly select either the +hpux_cc or hpux_gcc template depending on which compiler you plan to +use: + ./configure --with-template=hpux_cc +for HP's C compiler, or + ./configure --with-template=hpux_gcc +for GNU gcc. (If you omit --with-template, configure may either +default to hpux_cc or give up entirely, depending on which HPUX and +PostgreSQL releases you have.) + +You may want to tweak the CFLAGS setting in template/hpux_[g]cc before +you configure; the distributed files contain neither -O nor -g switches, +which is hardly optimal for any situation. I've seen no problems using +-O with gcc 2.7.2.*. + +The default install target location is /usr/local/pgsql, which +(particularly on HPUX 10) you might want to change to something under +/opt. If so, use the --prefix switch to configure. + +If you have both HP and GNU C++ compilers in your PATH, keep an eye on +whether configure picks the right one --- you want the HP c++ if you are +using HP C, or g++ if you are using gcc. Mixing HP and GNU compilers +won't work. You may need to provide a --with-CXX=compiler switch to +force configure to pick the matching C++ compiler, or even say +--without-CXX if you have a C++ compiler but it doesn't match the C +compiler you want to use. + +Otherwise the standard build/install procedure described in the +PostgreSQL documentation works fine. + + +1.3) yacc dies trying to process src/backend/parser/gram.y. + +HP's yacc doesn't create its tables large enough to handle the Postgres +grammar (a lot of other vendors' yaccs have this problem too). There +are three possible workarounds: + +1. The quickest answer is just to "touch" src/backend/parser/gram.c +and src/backend/parser/parse.h and repeat the build. Any PostgreSQL +distribution file should have up-to-date copies of those files included, +so you shouldn't need to run yacc on gram.y at all ... but sometimes +gram.y mistakenly has a newer timestamp in the distribution than the +derived files do. + +2. Install "bison" (GNU yacc) and reconfigure. Bison doesn't have a +problem with large grammars. Note this is not the right choice if you +are using HP's cc on HPUX 9 --- see next item. + +3. Increase yacc's table sizes enough to cope. With a pre-6.4 +PostgreSQL grammar, I was able to get HPUX 9's yacc to work by +setting YFLAGS to + -d -Np2000 -Ns3000 -Nm100000 -Nl2000 -Na30000 -Nc10000 +(You can edit YFLAGS either in the template file before running +configure, or in src/Makefile.global afterwards.) Future PostgreSQL +releases might require even larger tables, but this should do for +a starting point. + + +1.4) Linking the main postgres executable fails, complaining that + there's no "alloca" function. + +If you're using HP's cc on HPUX 9, it's right: there's no alloca +function. The only place in PostgreSQL that uses alloca is the parser +(gram.c), and that does so only if it was generated with GNU bison. +Unfortunately the distribution copy of gram.c is made with bison. +There are several possible answers: + + 1. Remake gram.c with HP's yacc (see above item for switch settings). + You might also need to remake src/backend/bootstrap/bootparse.c. + + 2. Build with gcc, which treats alloca as a compiled-in-line function. + + 3. Install HPUX 10, which has alloca. You're gonna have to do that + before Y2K anyway... + + +1.5) OK, it seemed to build and install, but the regression test fails. + +There are several "expected failures" due to differences between HPUX +and the regression test reference platform used by the PostgreSQL group. +A look at the textual differences between the expected and actual +outputs will usually reveal that the differences are minor. You should +expect these differences: + +TEST(S) COMMENTS + +int2, int4: pg_atoi generates a differently worded error + message for integer overflow. + +float8: In 6.4, float8 shows some differences due to + different handling of overflow/underflow errors in + exp() and pow(). This should be fixed in 6.4.1 + and later. + +float8, geometry: Lots of differences in the last digit or two + because of different roundoff errors in floating + arithmetic. Also, HPUX does not distinguish + -0 from 0 during printout, but the reference + platform does. + +horology: HPUX time library does not know about daylight + savings time before 1970, so there are some + places in horology where a time will be shown + in PST instead of PDT. + +In addition, the int8 regression test will fail massively on HPUX 9, +because int8 doesn't actually work on this platform (sprintf/sscanf +don't cope with long long int). Either upgrade to HPUX 10, or don't +use int8 data. + +Any other error is cause for suspicion. In particular, if you see +failures in the datetime test on HPUX 9, you probably forgot to +install the libm patch PHSS_4630 --- see item 1.1 above. +</PRE> diff --git a/doc/src/FAQ/FAQ_irix.html b/doc/src/FAQ/FAQ_irix.html new file mode 100755 index 00000000000..fb7fc0a22e2 --- /dev/null +++ b/doc/src/FAQ/FAQ_irix.html @@ -0,0 +1,492 @@ +<PRE> +====================================================== +Frequently Asked Questions (FAQ) for PostgreSQL >=V6.1 +IRIX Specific +TO BE READ IN CONJUNCTION WITH THE NORMAL FAQ +====================================================== +last updated: Mon Mar 05 17:00:00 GMT 1998 + +current maintainer: Andrew C.R. Martin (martin@biochem.ucl.ac.uk) +original author: Andrew C.R. Martin (martin@biochem.ucl.ac.uk) + + +Changes in this version (* = modified, + = new, - = removed): +*1.5) Can I install PostgreSQL (<V6.3) under Irix 6.x? ++1.10) How do I install PostgreSQL V6.3 under Irix 6.x? + +This file is divided approximately as follows: +1.*) Installing PostgreSQL +2.*) Uninstalling PostgreSQL +3.*) Extending PostgreSQL + + +Questions answered: +1.1) What extra items do I need to install PostgreSQL under Irix? +1.2) What changes do I need to make to src/Makefile.global? +1.3) What are the references in X11_LIB to libsocket and libnsl in + src/Makefile.global? +1.4) Are there any other changes I should make? +1.5) Can I install PostgreSQL (<V6.3) under Irix 6.x? +1.6) The make fails with the following message: + ld32: ERROR 4: Conflicting flag setting: -call_shared +1.7) Why won't it link? (Problems with lorder) +1.8) I have major problems with IRIX 6! +1.9) Why does lex fail with PostgreSQL 6.2.1? +1.10) How do I install PostgreSQL V6.3 under Irix 6.x? +2.1) Why can't I move the executable files? +3.1) How do I compile a C program to create a function for extending + PostgreSQL + +---------------------------------------------------------------------- +Section 1: Installing PostgreSQL +---------------------------------------------------------------------- + +1.1) What extra items do I need to install PostgreSQL under Irix? + + You *must* have the following installed: + a) Gnu make (installed as gmake) + + You are recommended to install the following: + a) GNU install (installed as ginstall) + (This is part of the GNU fileutils package) + + You may choose to install the following: + a) GNU readline library (if you wish psql to have readline + support). + b) tcl/tk (if you wish to compile pgtclsh) + +1.2) What changes do I need to make to src/Makefile.global or + src/Makefile.custom? + + The easiest way to do this is to use the customize script in + the src directory. + + You *must* set the following variables: + PORTNAME= irix5 + + You will also need to change the following to match your own + installation: + POSTGRESDIR + + If you switch on the USE_TCL option, you will need to set these: + TCL_INCDIR= + TCL_LIBDIR= + TCL_LIB = + TK_INCDIR= + TK_LIBDIR= + TK_LIB = + + You may also make any other changes you need as documented in + the INSTALL file and in Makefile.global + +1.3) What are the references in X11_LIB to libsocket and libnsl in + src/Makefile.global? + + This was a problem in 1.08 (they are Sun Solaris specific). + It is fixed in 1.09 and above. + +1.4) Are there any other changes I should make? + + If you have installed the GNU install program (ginstall), you + should add the following line to src/Makefile.custom: + CUSTOM_INSTALL=ginstall + + For an explanation as to why this is a good idea, see Question 2.1 + Ginstall is part of the GNU fileutils package. + + +1.5) Can I install PostgreSQL (<V6.3) under Irix 6.x? + + Instructions for PostgreSQL V6.3 are answered in Question 1.10! + + Irix 6.2-6.4 has a bug in ld which mishandles the addresses of + static procedures when object files are assembled into + larger object files using 'ld -r'. This bug has been reported + to Silicon Graphics. + + One option is to use the Gnu version of ld. Alternatively, + the following patch should be applied as a workaround. + (Supplied by Bob Bruccoleri <bruc@bms.com>) + +*** ./backend/Makefile.orig Thu May 22 00:00:15 1997 +--- ./backend/Makefile Thu Jun 5 16:47:27 1997 +*************** +*** 54,60 **** + all: postgres $(POSTGRES_IMP) global1.bki.source local1_template1.bki.source + + postgres: $(OBJS) ../utils/version.o +! $(CC) -o postgres $(OBJS) ../utils/version.o $(LDFLAGS) + + $(OBJS): $(DIRS:%=%.dir) + +--- 54,64 ---- + all: postgres $(POSTGRES_IMP) global1.bki.source local1_template1.bki.source + + postgres: $(OBJS) ../utils/version.o +! # $(CC) -o postgres $(OBJS) ../utils/version.o $(LDFLAGS) +! -rm -f *.o +! find . -name "*.o" -exec cp \{\} . \; +! rm -f SUBSYS.o +! $(CC) -o postgres *.o ../utils/version.o $(LDFLAGS) + + $(OBJS): $(DIRS:%=%.dir) + + + + +1.6) The make fails with the following message: + ld32: ERROR 4: Conflicting flag setting: -call_shared + + If gmake fails in .../src/backend while building obj/ACCESS.o + with a message from ld32, you can work around this by using + ld for the LD environment variable rather than cc. + + The problem has been observed under Irix 5.3 when compiling both + Postgres95-1.09 and PostgreSQL-6.2Beta6, but on some systems + these appear to compile with no such problems. + + Fix supplied by Brian Sanders (bsanders@netcom.com, + brian@fresnelsoft.com) + + +1.7) Why won't it link? (Problems with lorder) + + According to the IRIX man pages, lorder is useless, but harmless + under IRIX. However, it has caused problems for some people + using both IRIX 6.2. + + The solution is to add the following line to + .../src/makefiles/Makefile.irix5 + + MK_NO_LORDER=true + + +1.8) I have major problems with IRIX 6! + + The following is quoted directly from Bob Bruccoleri <bruc@bms.com> + +There is a really nasty loader bug in the compiler system (7.1) +on Irix 6.x, and the error that Lasse Petersen is the result of it. +Here is the original message. I don't know if all the changes have been +folded into the current release. + +Date: Fri, 06 Jun 1997 17:12:20 -0400 (EDT) +From: bruc@bms.com (Robert Bruccoleri) +Subject: [PORTS] Patches for Irix 6.4 + +I have worked out how to compile PostgreSQL on Irix 6.4 using the -n32 compiler +mode and version 7.1 of the C compiler. (The n32 compiler use 32 bits addressing, +but allows access to all the instructions in the MIPS4 instruction set.) +There were several problems: + +1) The ld command is not referenced as a macro in all the Makefiles. On +this platform, you have to include -n32 on all the ld commands. Makefiles +were changed as needed. + +2) There is a bug in "ld" which mishandles the addresses of static procedures +when object files are assembled into larger object files using "ld -r". +Because of this, I put a hack into src/backend/Makefile to avoid all the +SUBSYS.o files and just link all the objects. I have contacted SGI about the +problem, and hopefully, it will be fixed in the near future. + +3) Lots of warnings are generated from the compiler. Since the regression +tests worked OK, I didn't attempt to fix them. If anyone wants the compilation +log, please let me know, and I'll email it to you. + +The version of postgresql was 970602. Here is Makefile.custom: + +CUSTOM_COPT = -O2 -n32 +MK_NO_LORDER = 1 +LD = ld -n32 +CC += -n32 + +Here are the patches: + +*** ./backend/access/Makefile.orig Sun Nov 10 00:00:15 1996 +- --- ./backend/access/Makefile Tue Jun 3 10:22:32 1997 +*************** +*** 8,13 **** +- --- 8,16 ---- + # + #------------------------------------------------------------------------- + ++ SRCDIR = ../.. ++ include ../../Makefile.global ++ + OBJS = common/SUBSYS.o gist/SUBSYS.o hash/SUBSYS.o heap/SUBSYS.o \ + index/SUBSYS.o rtree/SUBSYS.o nbtree/SUBSYS.o transam/SUBSYS.o + + +*** ./backend/bootstrap/Makefile.orig Fri Apr 18 06:00:23 1997 +- --- ./backend/bootstrap/Makefile Tue Jun 3 10:23:59 1997 +*************** +*** 38,44 **** + all: SUBSYS.o + + SUBSYS.o: $(OBJS) +! ld -r -o SUBSYS.o $(OBJS) + + # bootstrap.o's dependency on bootstrap_tokens.h is computed by the + # make depend, but we state it here explicitly anyway because +- --- 38,44 ---- + all: SUBSYS.o + + SUBSYS.o: $(OBJS) +! $(LD) -r -o SUBSYS.o $(OBJS) + + # bootstrap.o's dependency on bootstrap_tokens.h is computed by the + # make depend, but we state it here explicitly anyway because + +*** ./backend/Makefile.orig Thu May 22 00:00:15 1997 +- --- ./backend/Makefile Thu Jun 5 16:47:27 1997 +*************** +*** 54,60 **** + all: postgres $(POSTGRES_IMP) global1.bki.source local1_template1.bki.source + + postgres: $(OBJS) ../utils/version.o +! $(CC) -o postgres $(OBJS) ../utils/version.o $(LDFLAGS) + + $(OBJS): $(DIRS:%=%.dir) + +- --- 54,64 ---- + all: postgres $(POSTGRES_IMP) global1.bki.source local1_template1.bki.source + + postgres: $(OBJS) ../utils/version.o +! # $(CC) -o postgres $(OBJS) ../utils/version.o $(LDFLAGS) +! -rm -f *.o +! find . -name "*.o" -exec cp \{\} . \; +! rm -f SUBSYS.o +! $(CC) -o postgres *.o ../utils/version.o $(LDFLAGS) + + $(OBJS): $(DIRS:%=%.dir) + +*************** +*** 116,122 **** + install: $(LIBDIR) $(BINDIR) $(HEADERDIR) postgres $(POSTGRES_IMP) fmgr.h\ + global1.bki.source local1_template1.bki.source \ + libpq/pg_hba.conf.sample optimizer/geqo/pg_geqo.sample +! + $(INSTALL) $(INSTL_EXE_OPTS) postgres $(BINDIR)/postgres + ifeq ($(MAKE_EXPORTS), true) + $(INSTALL) $(INSTLOPTS) $(POSTGRES_IMP) $(LIBDIR)/$(POSTGRES_IMP) +- --- 120,126 ---- + install: $(LIBDIR) $(BINDIR) $(HEADERDIR) postgres $(POSTGRES_IMP) fmgr.h\ + global1.bki.source local1_template1.bki.source \ + libpq/pg_hba.conf.sample optimizer/geqo/pg_geqo.sample +! + $(INSTALL) $(INSTL_EXE_OPTS) postgres $(BINDIR)/postgres + ifeq ($(MAKE_EXPORTS), true) + $(INSTALL) $(INSTLOPTS) $(POSTGRES_IMP) $(LIBDIR)/$(POSTGRES_IMP) + +*** ./backend/optimizer/Makefile.orig Wed Feb 19 12:00:34 1997 +- --- ./backend/optimizer/Makefile Tue Jun 3 10:39:47 1997 +*************** +*** 8,13 **** +- --- 8,16 ---- + # + #------------------------------------------------------------------------- + ++ SRCDIR= ../.. ++ include ../../Makefile.global ++ + all: submake SUBSYS.o + + OBJS = path/SUBSYS.o plan/SUBSYS.o prep/SUBSYS.o util/SUBSYS.o geqo/SUBSYS.o + +*** ./backend/libpq/pqcomprim.c.orig Mon May 26 00:00:23 1997 +- --- ./backend/libpq/pqcomprim.c Fri Jun 6 16:02:24 1997 +*************** +*** 32,40 **** + # define hton_l(n) (ntoh_l(n)) + # else /* BYTE_ORDER != BIG_ENDIAN */ + # if BYTE_ORDER == PDP_ENDIAN +! # #error PDP_ENDIAN macros not written yet + # else /* BYTE_ORDER != anything known */ +! # #error BYTE_ORDER not defined as anything understood + # endif /* BYTE_ORDER == PDP_ENDIAN */ + # endif /* BYTE_ORDER == BIG_ENDIAN */ + #endif /* BYTE_ORDER == LITTLE_ENDIAN */ +- --- 32,40 ---- + # define hton_l(n) (ntoh_l(n)) + # else /* BYTE_ORDER != BIG_ENDIAN */ + # if BYTE_ORDER == PDP_ENDIAN +! # error PDP_ENDIAN macros not written yet + # else /* BYTE_ORDER != anything known */ +! # error BYTE_ORDER not defined as anything understood + # endif /* BYTE_ORDER == PDP_ENDIAN */ + # endif /* BYTE_ORDER == BIG_ENDIAN */ + #endif /* BYTE_ORDER == LITTLE_ENDIAN */ + +*** ./backend/storage/Makefile.orig Sun Nov 10 00:01:06 1996 +- --- ./backend/storage/Makefile Tue Jun 3 10:41:29 1997 +*************** +*** 8,13 **** +- --- 8,16 ---- + # + #------------------------------------------------------------------------- + ++ SRCDIR= ../.. ++ include ../../Makefile.global ++ + all: submake SUBSYS.o + + OBJS = buffer/SUBSYS.o file/SUBSYS.o ipc/SUBSYS.o large_object/SUBSYS.o \ + + + + +1.9) Why does lex fail with PostgreSQL 6.2.1? + + IRIX 5.3 lex has been reported to fail in + postgresql-6.2.1/src/backend/parser with the error: + + lex scan.l + "scan.l":line 86: Error: Invalid request %x xc + gmake[2]: *** [scan.c] Error 1 + + The answer is to use GNU flex 2.5.4 or later. Use the command + flex --version + to check you have a new enough version of flex + + +1.10) How do I install PostgreSQL V6.3 under Irix 6.x? + + Irix 6.2-6.4 has a bug in ld which mishandles the addresses of + static procedures when object files are assembled into + larger object files using 'ld -r'. This bug has been reported + to Silicon Graphics. + + Depending on your Irix installation you may also encounter + 2 other problems detailed below: Conflict in C standards, + Conflict in library functions. + + a) Solving the ld bug + --------------------- + + One option is to use the Gnu version of ld. Alternatively, + the following patch should be applied as a workaround. + (Supplied by Bob Bruccoleri <bruc@bms.com> and modified for + PostgreSQL V6.3 by Lasse Hiller Petersen <lassehp@imv.aau.dk>) + + Apply the following patch: + +*** ./backend/Makefile.orig Tue Mar 3 15:33:58 1998 +--- ./backend/Makefile Tue Mar 3 15:39:27 1998 +*************** +*** 63,69 **** + global1.description +local1_template1.description + + postgres: $(OBJS) ../utils/version.o +! $(CC) -o postgres $(OBJS) ../utils/version.o $(LDFLAGS) + + $(OBJS): $(DIRS:%=%.dir) + +--- 63,73 ---- + global1.description +local1_template1.description + + postgres: $(OBJS) ../utils/version.o +! # $(CC) -o postgres $(OBJS) ../utils/version.o $(LDFLAGS) +! -rm -f *.o +! find . -name "*.o" -exec cp \{\} . \; +! rm -f SUBSYS.o +! $(CC) -o postgres *.o ../utils/version.o $(LDFLAGS) + + $(OBJS): $(DIRS:%=%.dir) + + + + + Lasse configured with ./configure --enable-locale + and modified Makefile.custom to contain: +CC = cc -n32 +LD = ld -n32 + + He reports that the installation without -n32 works fine too, + but the -n32 was required for compatibility with his Perl + installation. His system was an Origin200 running IRIX64 v6.4. + + + b) Conflict in C standards + -------------------------- + + I have found that the following patch is also necessary in order + to prevent a duplicate definition of a Union used for semaphores. + Apply the following patch to: + .../src/makefile/Makefile.irix5: + +*** src/makefiles/Makefile.irix5.orig Thu Mar 5 16:59:58 1998 +--- src/makefiles/Makefile.irix5 Thu Mar 5 17:01:13 1998 +*************** +*** 6,9 **** + %.so: %.o + $(LD) -G -Bdynamic -shared -o $@ $< + +! +--- 6,9 ---- + %.so: %.o + $(LD) -G -Bdynamic -shared -o $@ $< + +! CFLAGS+= -U_NO_XOPEN4 + + i.e. the addition of the line: + CFLAGS+= -U_NO_XOPEN4 + + This is needed to stop the semun union being redefined in + /usr/include/sys/sem.h + + c) Conflict in library functions + -------------------------------- + + In addition, if you have the nsl and crypt libraries these will + conflict with the required definitions. I think that libnsl.a + may be the Netware socket library (or something similar). In + any case, if you have these libraries, they will be added to + Makefile.global and you will need to remove them. + + Thus, you should edit .../src/Makefile.global. Goto (approximately) + line 217 where LDFLAGS= is set and remove -lnsl and -lcrypt + from this line. + + +---------------------------------------------------------------------- +Section 2: Deinstalling PostgreSQL +---------------------------------------------------------------------- + +2.1) Why can't I move the executable files? + + By default, the IRIX port uses the BSD compatible version of + install from /usr/bin/X11. If you read the man page for this + version of install, you will see that it is not meant for + end-user use; it has the interesting side-effect of chowning + files it installs to root. + + You should still be able to delete the files as you (the + postgres user) will own the directory in which they are + stored. + + The normal IRIX install program cannot be used easily as it + takes its arguments in the reverse order. It is therefore + recommended to use the GNU version of install (ginstall). + See Question 1.4 + + +---------------------------------------------------------------------- +Section 3: Extending PostgreSQL +---------------------------------------------------------------------- +3.1) How do I compile a C program to create a function for extending + PostgreSQL + + Here is a sample command line: + + cc -I/usr/local/PostgreSQL/include/ -I/usr/local/PostgreSQL/src/backend + -shared -o funcs.so funcs.c + + +---------------------------------------------------------------------------- +Dr. Andrew C.R. Martin University College London +EMAIL: (Work) martin@biochem.ucl.ac.uk (Home) andrew@stagleys.demon.co.uk +URL: http://www.biochem.ucl.ac.uk/~martin +Tel: (Work) +44(0)171 419 3890 (Home) +44(0)1372 275775 +</PRE> diff --git a/doc/src/FAQ/FAQ_linux.html b/doc/src/FAQ/FAQ_linux.html new file mode 100644 index 00000000000..d89fcc4d8ac --- /dev/null +++ b/doc/src/FAQ/FAQ_linux.html @@ -0,0 +1,704 @@ +<PRE> +======================================================= +Frequently Asked Questions (FAQ) for PostgreSQL >= V6.1 +Linux Specific +TO BE READ IN CONJUNCTION WITH THE NORMAL FAQ +======================================================= +last updated: Fri Jun 19 13:35:00 BST 1998 + +current maintainer: Andrew C.R. Martin (martin@biochem.ucl.ac.uk) +original author: Andrew C.R. Martin (martin@biochem.ucl.ac.uk) + + +Changes in this version (* = modified, + = new, - = removed): + ++1.23) Why does the compile fail with messages about F_BOOLIN, F_BOOLOUT + and F_BYTEAIN being undeclared? + +This file is divided approximately as follows: +1.*) Installing PostgreSQL +2.*) Compiling accessory programs +3.*) Runtime Problems + + +Questions answered: +1.1) What changes do I need to make to src/Makefile.global or + src/Makefile.custom and are there any other changes needed? +1.2) Why do I get problems with missing libreadline? +1.3) [REDHAT] Why do I get problems with missing libdl and dlfcn.h? +1.4) [SLACKWARE 3.1] Why do I get problems with missing libdl and dlfcn.h? +1.5) My compile of the backend dies complaining about the include file + dlfcn.h missing +1.6) GCC complains about an ignored option -fpic +1.7) I get warnings of the form + warning: cast from pointer to integer of different size +1.8) [SuSE-Linux 4.2-4.4] Where is curses and termcap? +1.9) Why do I get problems with ld.so? +1.10) Why do I get `yy_flush_buffer undefined' errors? +1.11) How do I compile PostgreSQL on an a.out system? +1.12) Why does make fail with: + yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y + make: /usr/bin/make: cannot execute binary file +1.13) What are the references in X11_LIB to libsocket and libnsl in + src/Makefile.global? +1.14) [DEBIAN] Where is libtermcap? +1.15) [REDHAT] Can I get PostgreSQL as an RPM? +1.16) While trying to compile a development version under Linux, compilation + fails with a message like: + In file included from /usr/include/sys/sem.h:8, + from ipc.c:37: + /usr/include/asm/bitops.h:32: warning: no previous prototype for Set_bit' + .... + make: *** [ipc.o] Error 1 +1.17) When compiling postgres, gcc reports signal 11 and aborts. +1.18) Can I install 6.1.1 under MkLinux? +1.19) Why does make exit or crash? +1.20) How can I optimise for 486 or pentium processors +1.21) Why do I get strange results with printing times (for example + in the regression test 'timespan')? +1.22) Why don't I get any shared libraries for libpq when I compile + 6.3.2? +1.23) Why does the compile fail with messages about F_BOOLIN, F_BOOLOUT + and F_BYTEAIN being undeclared? +2.1) The linker fails to find libX11 when compiling pgtclsh +3.1) I get an error reporting _fUnKy_POSTPORT_sTuFf_ undefined when + running scripts like createuser +3.2) I run postmaster and after that system says 'Bad system call(Core + dumped)' +3.3) When I try to start the Postmaster, why do I get an error of the form + Failed Assertion("!(file != 0):(null)", File: + "/usr/local/PostgreSQL/src/backend/storage/file/fd.c", Line: 257) + !(file != 0) (0) + initdb: could not create template database + initdb: cleaning up. +3.4) Why doesn't createuser work? +3.5) Why do I get an error like: + IpcMemoryCreate: memKey=155356396 , size=760632 , + permission=384IpcMemoryCreate: shmget(..., create, ...) + failed: Invalid argument +3.6) Why does psql fail with: + psql: can't load library 'libpq.so.1' +3.7) Other strange behaviour +3.8) When PostgreSQL is running when the system is shutdown, Linux + always fsck's the disk when rebooted. +3.9) Why does Query 32 in the regression tests take so long? +3.10) Why do I get funny rounding results in some date/time arithmetic, + such as + select '4 hours'::timespan; + returning '3 hours 59 minutes 60 seconds'? + +---------------------------------------------------------------------- +Section 1: Compiling PostgreSQL +---------------------------------------------------------------------- + +1.1) What changes do I need to make to src/Makefile.global or + src/Makefile.custom and are there any other changes needed? + + Changes to the makefiles are most easily made by running the + customize shell script in the src directory which will write a + Makefile.custom for you. + + The only other change you may have to make is to replace + Flex if you have version 2.5.3 which has a bug which generally + manifests itself as createuser failing (See Question 3.4) + + If you modify the makefiles by hand, you *must* set the + following variable: + PORTNAME= linux + + You will also need to change the following to match your own + installation: + POSTGRESDIR + + If you switch on the USE_TCL option, you will need to set these: + TCL_INCDIR= + TCL_LIBDIR= + TCL_LIB= + TK_INCDIR= + TK_LIBDIR= + TK_LIB= + X11_INCDIR= + X11_LIBDIR= + X11_LIB= + + On my Slackware3.0 system, these are: + TCL_INCDIR= /usr/include/tcl + TCL_LIBDIR= /usr/lib + TCL_LIB= -ltcl + TK_INCDIR= /usr/include/tcl + TK_LIBDIR= /usr/lib + TK_LIB= -ltk + X11_INCDIR= /usr/include/X11 + X11_LIBDIR= /usr/X386/lib + X11_LIB= -lX11 + + You may also make any other changes you need as documented in + the INSTALL file and in Makefile.global + + +1.2) Why do I get problems with missing libreadline? + + Linux systems generally don't come with the GNU readline library + installed. Either ensure you do not activate the readline options + in src/Makefile.global or src/Makefile.custom or install the GNU + readline library. + + Note that Debian Linux (like FreeBSD) does come with readline + installed. + +1.3) [REDHAT] Why do I get problems with missing libdl and dlfcn.h? + + This manifests itself as being unable to link with functions + such as dlopen(), dlclose(), etc. during the last phase of the + compilation. + + The libdl library is used for dynamic linking of user-supplied + functions at run-time. For some reason this library was missed out + from the Redhat distribution. It seems that the latest Redhat 4.0 + (Colgate) fixes this. + + RedHat now have a new ld.so RPM package on their FTP site. + Simply grab: + + ftp://ftp.redhat.com/pub/redhat/devel/i386/RedHat/RPMS/ld.so-1.7.14-4.i386.rpm + + Install the RPM file in the usual way and off you go! + + NOTE! You will have to re-run configure and do a make clean + after installing the library and before recompiling. + + There has been one report of a corrupted system resulting from + programs accessing these libraries while updating them (not + altogether surprising). Consequently it is a good idea to reboot + the system before installing the new libraries and to + have as little running as possible during this upgrade. Going + into single-user mode is probably a good idea! + + If you want to do it the hard way, you can obtain the library and the + header file from: + + ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ld.so-1.7.14.tar.gz + + Alternatively, you may find precompiled binaries in + distributions/debian/buzz/binary-i386/base/ld.so-1.7.14-4.deb + on the same site, or follow the instructions given for question 1.2 for + correcting the same error with early releases of Slackware 3.1. + Don't use this method unless you know what you are doing! + + + +1.4) [SLACKWARE 3.1] Why do I get problems with missing libdl and dlfcn.h? + + This manifests itself as being unable to link with functions + such as dlopen(), dlclose(), etc. during the last phase of the + compilation. + + See the answer to question 1.3. Slackware up to version 3.0 was + supplied with this library and include file and they seem to be + back in again in the latest versions of 3.1, but the early 3.1 + releases (before 9th September 1996) had them missing and many + CD-ROM versions will have been pressed from the first 3.1 releases. + + There has been one report of a corrupted system resulting from + programs accessing these libraries while updating them (not + altogether surprising). Consequently it is a good idea to reboot + the system before installing the new libraries and to + have as little running as possible during this upgrade. Going + into single-user mode is probably a good idea! + + The easiest fix is to obtain the file ldso.tgz from the a4 disk of + a more recent Slackware distribution and unpack this file + from the root (/) directory, then do + + sh install/doinst.sh + + to complete the installation. Follow this with + + ldconfig + + NOTE! You will have to re-run configure and do a make clean + after installing the library and before recompiling. + + If you want to install manually, you must first install the file + dlfcn.h in /usr/include. + + Second, install the file libdl.so.1.7.14 (or whatever the latest + release is) in /lib, then do: + + cd /lib + ln -sf libdl.so.1.7.14 libdl.so.1 + ln -sf libdl.so.1 libdl.so + + On some systems (depending on your GCC configuration) it may be + necessary to do: + + cd /usr/lib + ln -sf /lib/libdl.so . + + Finally + + ldconfig + + NOTE! You will have to re-run configure and do a make clean + after installing the library and before recompiling. + + +1.5) My compile of the backend dies complaining about the include file + dlfcn.h missing + + See the answer to question 1.3/1.4. Don't forget that if you are using + an a.out system you must first have installed the dld package + (which is not supplied with most a.out systems) to have dlfcn.h + at all. See Question 1.11. + + +1.6) GCC complains about an ignored option -fpic + + Earlier versions of GCC accepted either -fpic or -fPIC. + It appears that more recent versions (V2.7.2?) require -fPIC. + If you are using an ELF version of Linux, this can safely be + ignored as -fPIC is the default. + + You can correct this by editing src/Makefile.global and + changing CFLAGS_SL + + +1.7) I get warnings of the form + warning: cast from pointer to integer of different size + + These were seen in earlier versions of Postgres95 and could + safely be ignored. PostgreSQL V6.0 should compile with no warnings + except those related to system header files (which can also + be safely ignored). + +1.8) [SuSE-Linux 4.2-4.4] Where is curses and termcap? + + SuSE-Linux 4.2 has ncurses but not curses. 4.4 appears to have both. + SuSE-Linux also has the termcap library is in /usr/lib/termcap + instead of in /usr/lib. + + PostgreSQL (up to V6.0) + ----------------------- + Set the value of CURSES_LIB in src/Makefile.custom to -lncurses + (or do this through the customize script). + Add the following line to src/Makefile.custom: + + LDADD_BE+= -L/usr/lib/termcap + + You may need to edit src/bin/psql/Makefile and change: + ifeq ($(PORTNAME), linux) + LD_ADD+= + to: + ifeq ($(PORTNAME), linux) + LD_ADD+= -ltermcap + + PostgreSQL (V6.1) + ----------------- + The configure script doesn't know to look in /usr/lib/termcap for + the termcap library, so you should specify this as one of the + library directories when asked for additional directories to + search. + + If this doesn't work (I don't have SuSE to verify that it does) + then after running configure, you need to edit + src/Makefile.global and add -ltermcap to the LDFLAGS line + (after -lreadline). (Alternatively, you can modify + src/Makefile.custom before running configure.) + + Some versions of SuSE provide only ncurses, so you may need + to force use of ncurses rather than curses by changing + -lcurses to -lncurses. (Reported true for SuSE 5.1) + + +1.9) Why do I get problems with ld.so? + + If you get problems with ld.so, another library required under + ELF for dynamic loading, then you have messed up your installation + or (more likely) upgrade of Linux. + + See the answers to Question 1.3/1.4. You may need to install + ld.so.x.y.z in /lib and run ldconfig. + + The most recent stable release of the ld package is 1.7.14 + At the time of writing, 1.8.x versions of ld are experimental. + +1.10) Why do I get `yy_flush_buffer undefined' errors? + + This isn't really Linux specific, but is common on older Linux + installations. You must have a recent version of flex (2.5.2 or later) + to compile PostgreSQL. Note that flex 2.5.3 has a bug: see + Question 3.4. + +1.11) How do I compile PostgreSQL on an a.out system? + + First, you must install the dld library. This may be obtained + from Sunsite as: + Linux/libs/dld.3.2.7.tar.gz + (ftp://sunsite.unc.edu/pub/Linux/libs/dld.3.2.7.tar.gz) + + Second, add the following line to src/Makefile.custom: + LINUX_ELF= + (or use the customize script) + +1.12) Why does make fail with: + yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y + make: /usr/bin/make: cannot execute binary file + + This was a problem in earlier versions of Postgres95. The default + for PostgreSQL is to use bison -y rather than yacc. + + yacc is generally implemented as a script which invokes bison -y + For some reason (certain versions of make? certain versions of + bash?) make is unable to execute this script file. + + To correct this, simply edit src/mk/port/postgres.mk.linux + and, at the end of the file, change: + # YACC = bison -y + to + YACC = bison -y + +1.13) What are the references in X11_LIB to libsocket and libnsl in + src/Makefile.global? + + This was a problem in 1.08 (they are Sun Solaris specific). + It is fixed in 1.09 and 6.0 + +1.14) [DEBIAN] Where is libtermcap? + + Debian Linux comes without the termcap library and uses ncurses + (which uses terminfo instead). There is no need to change the + CURSES_LIB variable in src/bin/psql/Makefile since Debian provides + a link from libncurses to libcurses (unlike SuSE-Linux --- see + Question 1.8). + + You may need to edit src/bin/psql/Makefile and comment out the + change: + ifeq ($(PORTNAME), linux) + LD_ADD+= -ltermcap + to: + ifeq ($(PORTNAME), linux) + LD_ADD+= + + +1.15) [REDHAT] Can I get PostgreSQL as an RPM? + + Yes! Michal Mosiewicz <mimo@lodz.pdi.net> + (http://www.pdi.lodz.pl/~mimo) has kindly put together an RPM + for PostgreSQL V6.0 on Intel architectures which he has uploaded to + ftp://ftp.redhat.org/pub/Incoming/Postgres-6.0-1.i386.rpm + + This is a pre-compiled version, the source RPM is on its + was as I write (3rd Feb 1997). + +1.16) While trying to compile a development version under Linux, compilation + fails with a message like: + In file included from /usr/include/sys/sem.h:8, + from ipc.c:37: + /usr/include/asm/bitops.h:32: warning: no previous prototype for Set_bit' + .... + make: *** [ipc.o] Error 1 + + The problem is that Linux provides no prototypes for these + inline functions. The solution is to go into the + .../src/backend/storage/ipc directory and edit the Makefile. + Change the line + CFLAGS+=$(INCLUDE_OPT) + to + CFLAGS+=$(INCLUDE_OPT) -Wno-error + + Do the same in the ../src/backend/storage/lmgr directory. + +1.17) When compiling postgres, gcc reports signal 11 and aborts. + More specifically: + gcc: Internal compiler error: program cc1 got fatal + signal 11 + + This may be a hardware/memory problem. PortgreSQL is a big + program, and large gcc compilations (such as building + PostgreSQL or bebuilding the kernel) stress memory like + few other programs, resulting in errors that do not occur + in normal operation. Lesser operating systems are also + unlikely to stress the hardware to this degree so you + may never see any problems under DOS/Windows. + + More information on this problem at: + http://www.bitwizard.nl/sig11 + + From this Sig11 FAQ, there appears to be a specific problem + with Redhat 5.0 gcc running on Cyrix processors. See the + URL above for more details! + +1.18) Can I install 6.1.1 under MkLinux? + + Tatsuo Ishii <t-ishii@sra.co.jp> has done this under + MkLinux DR2.1 update2 after a small patch available from: + ftp://ftp.sra.co.jp/pub/cmd/postgres/6.1.1/mklinux.patch.gz + +1.19) Why does make exit or crash? + + There have been a couple of reports of gmake either just + exiting early or seg faulting. The latter problem was reported + with gmake 3.74 - upgrading to 3.76.1 solved the problem. + However, 3.74 is known to work fine in other people's setups. + In short, try upgrading gmake to the latest version you can + find before reporting this as a problem + +1.20) How can I optimise for 486 or pentium processors + + The default compiler flags perform no optimisation for 486 + or Pentium processors. To add such optimisation, edit + Makefile.custom and add: + + CFLAGS+= -m486 + + or (for the new compilers that most people are not yet running) + + CFLAGS+= -mpentium + or + CFLAGS+= -mpentiumpro + +1.21) Why do I get strange results with printing times (for example + in the regression test 'timespan')? + The times are appearing as: '4 hours 59 mins 60.00 secs' + instead of '5 hours' + + This is a problem with the glibc2 library which comes with + Redhat 5.0. Update your glibc to the latest RedHat version + for v5.0/hurricane. Anything prior to glibc-2.0.7 is likely + to have the problem. + +1.22) Why don't I get any shared libraries for libpq when I compile + 6.3.2? + + There was some last minute breakage of the Linux configuration for + v6.3.2. Look in ftp://postgresql.org/pub/patches/ for a few fix-ups, + including a linux_elf patch. + +1.23) Why does the compile fail with messages about F_BOOLIN, F_BOOLOUT + and F_BYTEAIN being undeclared? + + The actual messages are something like: + + -I/usr/include/readline -O2 -Wall -Wmissing-prototypes -I.. + -Wno-error -c bootstrap.c -o bootstrap.o + bootstrap.c:160: `F_BOOLIN' undeclared here (not in a function) + bootstrap.c:160: initializer element for `Procid[0].inproc' is not + constant + bootstrap.c:160: `F_BOOLOUT' undeclared here (not in a function) + bootstrap.c:160: initializer element for `Procid[0].outproc' is not + constant + bootstrap.c:161: `F_BYTEAIN' undeclared here (not in a function) + bootstrap.c:161: initializer element for `Procid[1].inproc' is not + constant + + This is tricky unless you know why it happens, as these constants + don't seem to be defined anywhere. + + The solution is to make sure that cpp is included in your path + before you start the make. + + On Redhat 5.1, cpp is in /usr/lib/gcc-lib/i386-redhat-linux/2.7.2.3 + + + +---------------------------------------------------------------------- +Section 2: Compiling accessory programs +---------------------------------------------------------------------- + +2.1) The linker fails to find libX11 when compiling pgtclsh + + Add the following to src/Makefile.custom + X11_LIBDIR = /usr/X11R6/lib + + +---------------------------------------------------------------------- +Section 3: Runtime Problems +---------------------------------------------------------------------- + +3.1) I get an error reporting _fUnKy_POSTPORT_sTuFf_ undefined when + running scripts like createuser + + This is a bug in V1.06-V1.07 of Postgres and is fixed in V1.08 + and above. + +3.2) I run postmaster and after that system says 'Bad system call(Core + dumped)' + + This indicates that you have not compiled shared memory support + into your kernel. You need to recompile the Linux kernel to add this + feature. + + +3.3) When I try to start the Postmaster, why do I get an error of the form + Failed Assertion("!(file != 0):(null)", File: + "/usr/local/PostgreSQL/src/backend/storage/file/fd.c", Line: 257) + !(file != 0) (0) + initdb: could not create template database + initdb: cleaning up. + + Your permissions on the file /dev/null are wrong. + + ls -l /dev/null should give you something like: + + crw-rw-rw- 1 root wheel 2, 2 Oct 8 18:41 /dev/null + + Correct the permissions using: + + chmod a+rw /dev/null + +3.4) Why doesn't createuser work? + + There is a problem with Version 2.5.3 of GNU flex and createuser. + Your options are to downgrade flex to V2.5.2, upgrade to V2.5.4 + or apply a patch to V2.5.3 which is supplied in doc/README.flex + You may obtain V2.5.4 from + ftp://prep.ai.mit.edu/pub/gnu/flex-2.5.4.tar.gz + +3.5) Why do I get an error like: + IpcMemoryCreate: memKey=155356396 , size=760632 , + permission=384IpcMemoryCreate: shmget(..., create, ...) + failed: Invalid argument + + You haven't build IPC support into your Linux kernel. You + will have to rebuild the kernel and switch on this option. + +3.6) Why does psql fail with: + psql: can't load library 'libpq.so.1' + + Psql has been compiled to link dynamically with the libpq + library. + + To solve this, you should log in as root and edit the file + /etc/ld.so.conf + Add a single line at the end which gives the name of the + PostgreSQL library directory (the lib subdirectory of your + PostgreSQL installation) and run + /sbin/ldconfig -v + + Alternatively, (and if you don't have root access), you may + use the LD_LIBRARY_PATH environment variable. + + The LD_LIBRARY_PATH variable contains a colon separated list of + paths to be searched for shared libraries. This list is + searched before the libraries specified by ldconfig. + + Therefore under Bash, you would do something like: + export LD_LIBRARY_PATH='PathToPGSQL'/lib + or, using tcsh + setenv LD_LIBRARY_PATH 'PathToPGSQL'/lib + replacing 'PathToPGSQL' with the appropriate path to your top level + PostgreSQL directory + + Note that the ldd command can be used on a dynamically linked + executable to list the paths to all the shared libraries upon + which the executable depends. + + +3.7) Other strange behaviour + + I'm not sure what the symptoms might be except for nothing + working properly, but it has been pointed out that one needs + to be careful that the dynamic loader loads the correct version + of the libpq library. If you have old versions lying around + in your library path (for example in /usr/lib) these may get + loaded instead of the new version you intended to load. Make + sure you get them out of the way and look at Q3.6 for + details of loading libraries. + +3.8) When PostgreSQL is running when the system is shutdown, Linux + always fsck's the disk when rebooted. + + There have been some reports of this happening and it seems + to be a result of running PostgreSQL from /etc/inittab as + suggested in the INSTALL document. + + You are therefore recommended to start the postmaster from an + rc script. Under a Slackware-like release, you would modify + /etc/rc.d/rc.local to start the postmaster. Under a RedHat-like + release you should create a SysV style script in + /etc/rc.d/rc3.d based on the /etc/rc.d/init.d skeleton file. + + There's a sample file in contrib/linux/postgres.init + + Here's another sample file supplied by John Robinson + <john@intelligent.co.uk> which you should modify as needed: + +#!/bin/sh +# +# postgreSQL.init This shell script takes care of starting and stopping +# the PostgreSQL postmaster. +# + +# Source function library. +. /etc/rc.d/init.d/functions + +# Source networking configuration. +. /etc/sysconfig/network + +# Check that networking is up. +[ ${NETWORKING} = "no" ] && exit 0 + +# See how we were called. +case "$1" in + start) + # Start daemons. + echo -n "Starting postgres Postmaster daemon:" + if [ -z "`pidofproc postmaster`" ] + then + su postgres -c "/usr/local/pgsql/bin/postmaster -D /home/postgreSQL/data -p 5432 &" + echo -n " postmaster" + else + echo -n " (already running)" + fi + echo + touch /var/lock/subsys/postgres + ;; + stop) + # Stop daemons. + echo -n "Shutting down postgres Postmaster daemon: " + killall -TERM postmaster 2>/dev/null + killall -TERM postgres 2>/dev/null + echo + rm -f /var/lock/subsys/postgres + ;; + *) + echo "Usage: postgres {start|stop}" + exit 1 +esac + +exit 0 + + + +3.9) Why does Query 32 in the regression tests take so long? + + This is due to a bug in regression scripts which only happens + on linux boxes. There are two workarounds as far as I know + (information from Tatsuo Ishii <t-ishii@sra.co.jp>): + + 1. change following in regress.sh: + time postgres -texecutor -tplanner -Q bench < bench.sql + to: + postgres -texecutor -tplanner -Q bench < bench.sql + + 2. after running the test, remove a line at the very end of + bench.out something like: + 85.86user 114.47system 4:49.20elapsed 69%CPU (0avgtext+0avgdata 0maxresident)k + then type: + sh ./perquery < bench.out > & bench.out.perquery + + + +3.10) Why do I get funny rounding results in some date/time arithmetic, + such as + select '4 hours'::timespan; + returning '3 hours 59 minutes 60 seconds'? + + You are running the new glibc2 libraries and have a version earlier than + 2.0.7. It is a math rounding problem in the library. Upgrade your library. +---------------------------------------------------------------------------- +Dr. Andrew C.R. Martin University College London +EMAIL: (Work) martin@biochem.ucl.ac.uk (Home) andrew@stagleys.demon.co.uk +URL: http://www.biochem.ucl.ac.uk/~martin +Tel: (Work) +44(0)171 419 3890 (Home) +44(0)1372 275775 +</PRE> diff --git a/doc/src/FAQ/FAQ_linux_german.html b/doc/src/FAQ/FAQ_linux_german.html new file mode 100644 index 00000000000..4f32472430f --- /dev/null +++ b/doc/src/FAQ/FAQ_linux_german.html @@ -0,0 +1,748 @@ +<HTML> +<HEAD> +<TITLE>Linux PostgreSQL FAQ (german)</TITLE> + <META NAME="Author" CONTENT="Karsten Schulz"> + <META NAME="GENERATOR" CONTENT="all pages hand-made by Karsten Schulz, using NEdit (Linux)"> + <META http-equiv="content-type" CONTENT="text/html;CHARSET=iso8859-1"> + <META NAME="robots" CONTENT="index"> + <META NAME="robots" CONTENT="follow"> + <META NAME="description" CONTENT="Die deutsche Übersetzung der Linux-spezifischen FAQ zum Datenbanksystem PostgreSQL"> + <META NAME="keywords" CONTENT="Linux, FAQ, DB, PostgreSQL, SQL, deutsch, german"> + <LINK REV=MADE HREF="mailto:schulz@Linux-Systemhaus.de" TITLE="Karsten Schulz"> +</HEAD> +<BODY BGCOLOR="#FFFFFF"> + +<CENTER><H1>Häufig gestellte Fragen (FAQ) zu PostgreSQL >= V6.1, Linux-spezifisch</H1> +<STRONG>Bitte Zusammen mit der normalen FAQ lesen!</STRONG></CENTER> + +<HR> +<TABLE BORDER=0> +<TR> + <TD>Letztes Update des Originals:</TD> + <TD>Tue Aug 10 11:15:00 BST 1999</TD> +</TR> +<TR> + <TD>Original-FAQ gepflegt durch:</TD> + <TD>Andrew C.R. Martin (<A HREF="mailto:martin@biochem.ucl.ac.uk">martin@biochem.ucl.ac.uk</A>)</TD> +</TR> +<TR> + <TD>Original Autor:</TD> + <TD>Andrew C.R. Martin (<A HREF="mailto:martin@biochem.ucl.ac.uk">martin@biochem.ucl.ac.uk</A>)</TD> +</TR> +<TR> + <TD COLSPAN=2> </TD> +</TR> +<TR> + <TD>Letztes Update der Übersetzung:</TD> + <TD>Mo, 23. August 1999, 10:00 CEST</TD> +</TR> +<TR> + <TD>Übersetzer:</TD> + <TD>Karsten Schulz (<A HREF="mailto:schulz@linux-systemhaus.de">schulz@linux-systemhaus.de</A>)</TD> +</TR> +</TABLE> +<HR> +<P> +Änderungen in dieser Version (* = geändert, + = neu, - = entfernt) +<P> + +<A HREF="#3.11">+3.11)</A> Wieso bekomme ich einen Fehler wie: <EM>IpcMemoryCreate: shmget failed (Permission denied)</EM>?<BR> + +<H2>Diese Datei ist ungefähr wie folgt unterteilt:</H2> + +<A HREF="#1.">1.*)</A> PostgreSQL kompilieren<BR> +<A HREF="#2.">2.*)</A> Hilfs- und Zusatzprogramme kompilieren<BR> +<A HREF="#3.">3.*)</A> Laufzeit Probleme<BR> +<P><BR> + + +<H2>Beantwortete Fragen:</H2> +<A NAME="1."> </A><H3><A HREF="#Sec1">PostgreSQL kompilieren</A></H3> + + +<A HREF="#1.1">1.1)</A> Welche Anpassungen müssen in src/Makefile.global oder src/Makefile.custom gemacht werden + und gibt es weitere notwendige Änderungen?<BR> +<A HREF="#1.2">1.2)</A> Warum habe ich Probleme mit der fehlenden Bibliothek libreadline?<BR> +<A HREF="#1.3">1.3)</A> [REDHAT] Warum habe ich Probleme mit der fehlenden Bibliothek libdl und der fehlenden dlfcn.h?<BR> +<A HREF="#1.4">1.4)</A> [SLACKWARE 3.1] Warum habe ich Probleme mit der fehlenden Bibliothek libdl und der fehlenden dlfcn.h?<BR> +<A HREF="#1.5">1.5)</A> Die Kompilierung des Backends schlägt mit der Meldung fehl, daß die Include-Datei dlfcn.h fehlen würde.<BR> +<A HREF="#1.6">1.6)</A> GCC meldet, daß er die Option -fpic ignorieren würde.<BR> +<A HREF="#1.7">1.7)</A> Ich bekomme Warnungen, wie: <EM>warning: cast from pointer to integer of different size</EM><BR> +<A HREF="#1.8">1.8)</A> [SuSE-Linux 4.2-5.3] Wo sind curses und termcap?<BR> +<A HREF="#1.9">1.9)</A> Warum bekomme ich Probleme mit ld.so?<BR> +<A HREF="#1.10">1.10)</A> Wieso bekomme ich <EM>yy_flush_buffer undefined</EM> Fehler?<BR> +<A HREF="#1.11">1.11)</A> Wie kompiliere ich PostgreSQL auf einem a.out System?<BR> +<A HREF="#1.12">1.12)</A> Warum scheitert make mit der Meldung:<BR><EM> + yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y + make: /usr/bin/make: cannot execute binary file</EM><BR> +<A HREF="#1.13">1.13)</A> Was sind die Bezüge in der Bibliothek X11_LIB zu libsocket und libnsl in der Datei src/Makefile.global?<BR> +<A HREF="#1.14">1.14)</A> [DEBIAN] Wo ist die Bibliothek libtermcap?<BR> +<A HREF="#1.15">1.15)</A> [REDHAT] Kann ich PostgreSQL als RPM-Archiv bekommen?<BR> +<A HREF="#1.16">1.16)</A> Während ich versuche eine Entwickler-Version unter Linux zu kompilieren, bricht der Vorgang mit folgender + Fehlermeldung ab:<BR><EM> + In file included from /usr/include/sys/sem.h:8,<BR> + from ipc.c:37:<BR> + /usr/include/asm/bitops.h:32: warning: no previous prototype for Set_bit'<BR> + ....<BR> + make: *** [ipc.o] Error 1</EM><BR> +<A HREF="#1.17">1.17)</A> Beim Kompilieren von PostgreSQL bricht der gcc mit einer Signal 11 Meldung ab.<BR> +<A HREF="#1.18">1.18)</A> Kann ich Version 6.1.1 unter MkLinux installieren?<BR> +<A HREF="#1.19">1.19)</A> Warum stoppt make oder bricht sonstwie ab?<BR> +<A HREF="#1.20">1.20)</A> Wie kann ich für die Prozessoren 486 oder Pentium optimieren?<BR> +<A HREF="#1.21">1.21)</A> Wieso bekomme ich seltsame Ergebnisse beim Drucken von Zeiten (z.B. beim Regressionstest 'timespan')?<BR> +<A HREF="#1.22">1.22)</A> Warum bekomme ich keine shared libraries für libpq, wenn ich Version 6.3.2 kompiliere?<BR> +<A HREF="#1.23">1.23)</A> Warum scheitert der Kompilierungslauf mit Nachrichten, daß F_BOOLIN, F_BOOLOUT und F_BYTEAIN nicht deklariert seien?<BR> + +<P> + +<A NAME="2."> </A><H3><A HREF="#Sec2">Hilfs- und Zusatzprogramme kompilieren</A></H3> + +<A HREF="#2.1">2.1)</A> Der Linker findet die Bibliothek libX11 nicht, wenn pgtclsh kompiliert werden soll.<BR> + + +<A NAME="3."> </A><H3><A HREF="#Sec3">Laufzeit Probleme</A></H3> + +<A HREF="#3.1">3.1)</A> Ich bekomme die Fehlermeldung <EM>_fUnKy_POSTPORT_sTuFf_ undefined</EM>, wenn Skripts wie createuser laufen.<BR> +<A HREF="#3.2">3.2)</A> Nachdem ich postmaster starte, meldet das System <EM>Bad system call (Core dumped)</EM><BR> +<A HREF="#3.3">3.3)</A> Wenn ich versuche, den Postmaster zu starten, bekomme ich eine Fehlermeldung wie:<BR><EM> + Failed Assertion("!(file != 0):(null)", File:<BR> + "/usr/local/PostgreSQL/src/backend/storage/file/fd.c", Line: 257)<BR> + !(file != 0) (0)<BR> + initdb: could not create template database<BR> + initdb: cleaning up.</EM><BR> +<A HREF="#3.4">3.4)</A> Warum funktioniert createuser nicht?<BR> +<A HREF="#3.5">3.5)</A> Wieso bekomme ich einen Fehler, wie:<BR><EM> + IpcMemoryCreate: memKey=155356396 , size=760632 ,<BR> + permission=384IpcMemoryCreate: shmget(..., create, ...)<BR> + failed: Invalid argument</EM><BR> +<A HREF="#3.6">3.6)</A> Wieso scheitert der Aufruf von psql mit: <EM>psql: can't load library 'libpq.so.1</EM><BR> +<A HREF="#3.7">3.7)</A> Andere seltsame Verhaltensweisen<BR> +<A HREF="#3.8">3.8)</A> Wenn PostgreSQL beim Systemhalt lief, führt Linux beim Neustart jedesmal einen Filesystemcheck (fsck) durch<BR> +<A HREF="#3.9">3.9)</A> Warum dauert Query 32 in den RegressionsTests so lange?<BR> +<A HREF="#3.10">3.10)</A> Warum bekomme ich lustige Rundungsergebnisse in einigen Datums/Zeit-Berechnungen, wie:<BR><EM> + select '4 hours'::timespan;<BR> + liefert '3 hours 59 minutes 60 seconds'</EM>?<BR> +<A HREF="#3.11">+3.11)</A> Wieso bekomme ich einen Fehler wie: <EM>IpcMemoryCreate: shmget failed (Permission denied)</EM>?<BR> + +<P> + +<H3><A NAME="Sec1">Abschnitt 1: PostgreSQL kompilieren</A></H3> + +<H4><A NAME="1.1">1.1)</A> Welche Anpassungen müssen in src/Makefile.global oder src/Makefile.custom gemacht werden + und gibt es weitere notwendige Änderungen?</H4> + +Änderungen an den Makefiles werden am einfachsten dadurch gemacht, indem das <EM>customize shellscript</EM> +im src-Verzeichnis aufgerufen wird, das ein Makefile.custom erzeugt. +<P> +Die einzige andere Änderung, die evtl. zu machen wäre, ist Flex zu ersetzen, wenn Du die Version 2.5.3 hast. +Diese Version hat einen Fehler, der sich durch das Scheitern des createuser-Programms äußert. +(siehe dazu auch <A HREF="#3.4">Frage 3.4</A>). +<P> +Falls Du die Makefiles manuell änderst, <STRONG>musst</STRONG> Du die +folgende Variable setzen:<BR><BR> +<PRE> +PORTNAME= linux +</PRE> + +Du musst auch die folgende Variable ändern, damit sie auf Deine +Installation passt: +<PRE> +POSTGRESDIR +</PRE> +Falls Du die <EM>USE_TCL</EM>-Option aktivierst, musst Du folgende Variablen setzen:<BR><BR> + +<PRE> +TCL_INCDIR= +TCL_LIBDIR= +TCL_LIB= +TK_INCDIR= +TK_LIBDIR= +TK_LIB= +X11_INCDIR= +X11_LIBDIR= +X11_LIB= +</PRE> + +Auf meinem Slackware 3.0 System sind das: +<PRE> +TCL_INCDIR= /usr/include/tcl +TCL_LIBDIR= /usr/lib +TCL_LIB= -ltcl +TK_INCDIR= /usr/include/tcl +TK_LIBDIR= /usr/lib +TK_LIB= -ltk +X11_INCDIR= /usr/include/X11 +X11_LIBDIR= /usr/X386/lib +X11_LIB= -lX11 +</PRE> +<P> +Du solltest auch alle weiteren Änderungen durchführen, die in der +Datei INSTALL und in Makefile.global dokumentiert sind. + +<H4><A NAME="1.2">1.2)</A> Warum habe ich Probleme mit der fehlenden Bibliothek libreadline?</H4> +Linux Systeme kommen in der Regel nicht mit einer installierten GNU readline Bibliothek. +Stelle entweder sicher, daß Du die readline-Optionen in src/Makefile.global oder +src/Makefile.custom nicht aktivierst oder installiere die GNU readline Bibliothek.<BR> +Hinweis: Debian Linux (wie FreeBSD) kommt mit einer installierten GNU readline Bibliothek. + +<H4><A NAME="1.3">1.3)</A> [REDHAT] Warum habe ich Probleme mit der fehlenden Bibliothek libdl und der fehlenden dlfcn.h?</H4> +Das Problem erscheint dadurch, daß in der letzten Phase des Kompilierungsvorgangs Funktionen wie +dlopen(), dlclose(), etc. nicht gelinkt werden können. +<P> +Die libdl Bibliothek wird zum dynamischen Linken von Benutzerfunktionen zur Laufzeit +benutzt. Aus irgendwelchen Gründen wurde diese Bibliothek mit der RedHat-Distribution +nicht ausgeliefert. Anscheinend ist dies in der letzten RedHat 4.0 (Colgate) geändert worden. +<P> +RedHat hat nun ein neues ld.so RPM-Archiv auf ihrem ftp-Server. Hole Dir einfach: +<P> +<A HREF="ftp://ftp.redhat.com/pub/redhat/devel/i386/RedHat/RPMS/">ftp://ftp.redhat.com/pub/redhat/devel/i386/RedHat/RPMS/ld.so-1.7.14-4.i386.rpm</A> +<P> +Installiere das RPM-Archiv wie üblich und gut ist! +<P> +Hinweis: Du mußt <EM>configure</EM> und <EM>make clean</EM> nach der Installation +der Bibliothek und vor dem erneuten Kompilieren laufen lassen. +<P> +Es gab einen Bericht über ein zerstörtes System, weil Programme auf +diese Bibliothek während des Updates zugegriffen haben (alles in allem nicht +weiter überraschend). Konsequenterweise ist es eine gute Idee, das System vor der +Installation zu rebooten, um so wenige Programme wie möglich während +des Updates laufen zu haben. In den Single-User-Mode zu gehen ist wahrscheinlich +auch eine gute Idee! +<P> +Wenn Du lieber den harten Weg gehen willst, kannst Du die Bibliothek und +die Header-Dateien von: +<P> +<A HREF="ftp://tsx-11.mit.edu/pub/linux/packages/GCC/">ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ld.so-1.7.14.tar.gz</A> +<P> +holen. Alternativ findest Du vorkompilierte Binaries in +distributions/debian/buzz/binary-i386/base/ld.so-1.7.14-4.deb auf dem gleichen +ftp-Server oder folge den Instruktionen bei <A HREF="#1.2">Frage 1.2</A>, die den gleichen Fehler +für Slackware 3.1 behandelt. +<P> +Mache es aber nur auf diese Weise, wenn Du weißt, was Du tust! + + +<H4><A NAME="1.4">1.4)</A> [SLACKWARE 3.1] Warum habe ich Probleme mit der fehlenden Bibliothek libdl und der fehlenden dlfcn.h?</H4> +Das Problem erscheint dadurch, daß in der letzten Phase des Kompilierungsvorgangs Funktionen wie +dlopen(), dlclose(), etc. nicht gelinkt werden können. +<P> +Siehe die Antwort zu <A HREF="#1.3">Frage 1.3</A>. +<P> +Slackware bis Version 3.0 war mit dieser Bibliothek und der Include-Datei ausgestattet und ab späten +3.1er-Versionen scheinen sie auch wieder da zu sein. Aber in frühen 3.1er-Versionen (vor dem 09.09.96) +fehlten sie und es wurden viele CD-ROMs von diesen ersten 3.1.er-Versionen gepresst. +<P> +Es gab einen Bericht über ein zerstörtes System, weil Programme auf +diese Bibliothek während des Updates zugegriffen haben (alles in allem nicht +weiter überraschend). Konsequenterweise ist es eine gute Idee, das System vor der +Installation zu rebooten, um so wenige Programme wie möglich während +des Updates laufen zu haben. In den Single-User-Mode zu gehen ist wahrscheinlich +auch eine gute Idee! +<P> +Der einfachste Weg, den Fehler zu beseitigen ist, die Datei ldso.tgz von der a4-Diskette einer +aktuelleren Slackware zu nehmen, diese Datei im Wurzelverzeichnis (/) zu entpacken und dann ein +<PRE>sh install/doinst.sh</PRE> +durchzuführen. Danach ein <PRE>ldconfig</PRE>durchführen. +<P> +Hinweis: Du mußt <EM>configure</EM> und <EM>make clean</EM> nach der Installation +der Bibliothek und vor dem erneuten Kompilieren laufen lassen. +<P> +Falls Du manuell installieren möchtest, installiere zuerst die Datei dlfcn.h in /usr/include. +Dann die libdl.so.1.7.14 (oder was immer die letzte Version ist) in /lib. Dann führe +folgende Befehle aus: +<PRE> +cd /lib +ln -sf libdl.so.1.7.14 libdl.so.1 +ln -sf libdl.so.1 libdl.so +</PRE> +Auf manchen Systemen (je nach Deiner gcc-Konfiguration) können noch folgende +Befehle notwendig sein: +<PRE> +cd /usr/lib +ln -sf /lib/libdl.so . +</PRE> +Und zum Schluß noch ein <PRE>ldconfig</PRE> +<P> +Hinweis: Du mußt <EM>configure</EM> und <EM>make clean</EM> nach der Installation +der Bibliothek und vor dem erneuten Kompilieren laufen lassen. + +<H4><A NAME="1.5">1.5)</A> Die Kompilierung des Backends schlägt mit der Meldung fehl, daß die Include-Datei dlfcn.h fehlen würde.</H4> +Siehe die Antworten zu den Fragen <A HREF="#1.3">1.3</A> und <A HREF="#1.4">1.4</A>. +Und vergiss nicht, falls Du ein a.out-System benutzt, daß Du das dld-Paket installiert haben muß +(welches bei den meisten a.out-Systemen nicht dabei ist), um dlfcn.h zu haben. Siehe <A HREF="#1.11">Frage 1.11</A>. + +<H4><A NAME="1.6">1.6)</A> GCC meldet, daß er die Option -fpic ignorieren würde.</H4> +Frühere Versionen des gcc nahmen entweder <CODE>-fpic</CODE> oder <CODE>-fPIC</CODE> an. +Es scheint, daß neuere Versionen (V2.7.2?) <CODE>-fPIC</CODE> erfordern. +Falls Du ein ELF-System benutzt, kannst das alles ignoriert werden, da <CODE>-fPIC</CODE> +als Standardvorgabe voreingestellt ist. + +Du kannst diese Angabe korrigieren, indem Du CFLAGS_SL in der Datei src/Makefile.global +änderst. + + +<H4><A NAME="1.7">1.7)</A> Ich bekomme Warnungen, wie: <EM>warning: cast from pointer to integer of different size</EM></H4> +Diese Warnungen wurden in früheren Versionen von Postgres95 gesichtet und können ignoriert werden. +PostgreSQL V6.0 sollte ohne Warnungen kompiliert werden, außer jenen, die sich auf System-Header-Dateien beziehen +(welche auch ignoriert werden können). + + +<H4><A NAME="1.8">1.8)</A> [SuSE-Linux 4.2-5.3] Wo sind curses und termcap?</H4> +SuSE-Linux 4.2 hat ncurses, nicht curses. Version 4.4 scheint beide Bibliotheken zu haben. +Bei SuSE-Linux ist außerdem die termcap-Bibliothek in /usr/lib/termcap/ und nicht in /usr/lib. + +<H5>PostgreSQL (bis Version V6.0)</H5> +Setze den Wert für CURSES_LIB in src/Makefile.custom auf -lncurses (oder erledige das durch das <EM>customize script</EM>. +Füge folgende Zeile zur Datei src/Makefile.custom hinzu: +<PRE> +LDADD_BE+= -L/usr/lib/termcap +</PRE> +Möglicherweise mußt Du in der Datei src/bin/psql/Makefile folgende Änderung durchführen: +<PRE> +ifeq ($(PORTNAME), linux) + LD_ADD+= +</PRE> +ändern in: +<PRE> +ifeq ($(PORTNAME), linux) + LD_ADD+= -ltermcap +</PRE> + +<H5>PostgreSQL (V6.1)</H5> +Das Konfigurationsscript weiß nicht, daß es auch in /usr/lib/termcap nach der termcap-Bibliothek schauen soll. +Du solltest dieses Verzeichnis angeben, wenn es nach zusätzlichen Such-Verzeichnissen fragt. +<P> +Falls das nicht funkitoniert (Ich habe SuSE nicht, um das zu testen), dann solltest Du nach dem <EM>./configure</EM>-Lauf +die Datei src/Makefile.global ändern und in die LDFLAGS-Zeile den Eintrag -ltermcap (nach -lreadline) hinzufügen. +(Alternativ kannst Du auch die Datei src/Makefile.custom ändern, bevor Du <EM>./configure</EM> aufrufst.) +<P> +Einige SuSE-Versionen liefern nur ncurses, deshalb kann es sein, daß Du die +Benutzung von ncurses statt curses erzwingen mußt, indem Du -lcurses in -lncurses änderst. +(bestätigt für SuSE 5.1) +<P> +<H5>PostgreSQL (V6.4)</H5> +In PostgreSQL V6.4 überprüft <CODE>configure</CODE> sowohl das Vorhandensein von +curses, als auch das von ncurses. +In der Zwischenzeit kannst Du den patch von <A HREF="mailto:ke@suse.de">Karl Eichwalder (ke@suse.de)</A> +anwenden: +<P> +<A HREF="http://www.PostgreSQL.ORG/mhonarc/pgsql-patches/msg00407.html">http://www.PostgreSQL.ORG/mhonarc/pgsql-patches/msg00407.html</A><BR> +oder (mit deutschen Bemerkungen):<BR> +<A HREF="http://www.suse.de/Support/sdb/ke_postgresql-632.html">http://www.suse.de/Support/sdb/ke_postgresql-632.html</A> +<P> +Es gab außerdem einen Bericht, daß beim Update von SuSE 5.0 auf SuSE 5.2 der Link +von libtermcap.so.2.0.8 auf libtermcap.so nicht gesetzt wurde: +<PRE> +cd /usr/lib +ln -s libtermcap.so.2.0.8 libtermcap.so +</PRE> + +<H4><A NAME="1.9">1.9)</A> Warum bekomme ich Probleme mit ld.so?</H4> + +Falls Du Probleme mit ld.so bekommst - eine andere Bibliothek, die im ELF-System für dynamisches Laden +benötigt wird - dann hast Du Deine Systeminstallation oder wahrscheinlicher ein Linux-Update durcheinandergebracht + +Siehe die Fragen <A HREF="#1.3">1.3</A>/<A HREF="#1.4">1.4</A>. Möglicherweise mußt Du ld.so.x.y.z in /lib installieren +und ldconfig laufen lassen. Die aktuellste Version des ld-Packages ist 1.7.14. Zum Zeitpunkt des Schreibens dieser FAQ ist die Version 1.8 noch experimental. + +<H4><A NAME="1.10">1.10)</A> Wieso bekomme ich <EM>yy_flush_buffer undefined</EM> Fehler?</H4> +Das ist nicht wirklich Linux-spezifisch, aber es tritt häufiger auf alten Linux-Systemen auf. +Du brauchst eine aktuelle Version von flex (2.5.2. oder neuer), um PostgreSQL zu kompilieren. Beachte, daß flex 2.5.3. +einen Bug hat, siehe auch <A HREF="3.4">Frage 3.4</A>. + +<H4><A NAME="1.11">1.11)</A> Wie kompiliere ich PostgreSQL auf einem a.out System?</H4> +Als erstes mußt Du die dld-Bibliothek installieren. Diese gibt es auf Sunsite unter +Linux/libs/dld.3.2.7.tar.gz (<A HREF="ftp://sunsite.unc.edu/pub/Linux/libs/">ftp://sunsite.unc.edu/pub/Linux/libs/dld.3.2.7.tar.gz</A>). +<P> +Dann füge folgende Zeile in src/Makefile.custom hinzu: +<PRE> +LINUX_ELF= +</PRE> +oder benutze das <EM>customize Skript</EM> + +<H4><A NAME="1.12">1.12)</A> Warum scheitert make mit der Meldung:<BR><EM> + yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y + make: /usr/bin/make: cannot execute binary file</EM></H4> + +Das war ein Problem in frühreren Versionen von Postgres95. Standardmäßig benutzt PostgreSQL <CODE>bison -y</CODE> +anstatt <CODE>yacc</CODE>. +<P> +yacc ist normalerweise als Skript implementiert, das <CODE>bison -y</CODE> aufruft. Aus verschiedenen Gründen ist +<EM>make</EM> nicht in der Lage, das Skript auszuführen (verschiedene Versionen von make? Verschiedene Versionen der bash?) +<P> +Um das zu beheben, ändere einfach die Datei src/mk/port/postgres.mk.linux am Ende. Die Zeile: +<PRE> +# YACC = bison -y +</PRE> +wird zu: +<PRE> +YACC = bison -y +</PRE> + + +<H4><A NAME="1.13">1.13)</A> Was sind die Bezüge in der Bibliothek X11_LIB zu libsocket und libnsl in der Datei src/Makefile.global?</H4> +Das war ein Problem in Version 1.08 (Sun Solaris spezifisch). Sie sind behoben in 1.09 und 6.0 + +<H4><A NAME="1.14">1.14)</A> [DEBIAN] Wo ist die Bibliothek libtermcap?</H4> +Debian Linux kommt ohne die termcap-Bibliothek und benutzt ncurses (welche terminfo benutzt). +Es gibt keinen Grund, die CURSES_LIB-Variable in src/bin/psql/Makefile zu ändern, da Debian +einen Link von libncurses auf libcurses bereitstellt (im Gegensatz zu SuSE, siehe <A HREF="1.8">Frage 1.8</A>) +<P> +Du kannst die Datei src/bin/psql/Makefile wie folgt ändern: +<PRE> +ifeq ($(PORTNAME), linux) + LD_ADD+= -ltermcap +</PRE> +in +<PRE> +ifeq ($(PORTNAME), linux) + LD_ADD+= + </PRE> + + +<H4><A NAME="1.15">1.15)</A> [REDHAT] Kann ich PostgreSQL als RPM-Archiv bekommen?</H4> +Ja! <A HREF="mailto:mimo@lodz.pdi.net">Michal Mosiewicz</A> (<A HREF="http://www.pdi.lodz.pl/~mimo">http://www.pdi.lodz.pl/~mimo</A>) +hat ein RPM für PostgreSQL V6.0 auf Intel Architekturen zusammengestellt, +welches er nach <A HREF="ftp://ftp.redhat.org/pub/Incoming/">ftp://ftp.redhat.org/pub/Incoming/Postgres-6.0-1.i386.rpm</A> +hochgeladen hat. +<P> +Das ist eine vorkompilierte Version, das Quelltext-RPM stammt vom 03.02.1997. + + + +<H4><A NAME="1.16">1.16)</A> Während ich versuche eine Entwickler-Version unter Linux zu kompilieren, bricht der Vorgang mit folgender + Fehlermeldung ab:<BR><EM> + In file included from /usr/include/sys/sem.h:8,<BR> + from ipc.c:37:<BR> + /usr/include/asm/bitops.h:32: warning: no previous prototype for Set_bit'<BR> + ....<BR> + make: *** [ipc.o] Error 1</EM></H4> + +Das Problem ist, daß Linux keine Prototypen für diese Inline-Funktionen bereithält. Die Lösung +liegt darin, das Makefile in .../src/backend/storage/ipc/ zu ändern: +Ändere die Zeile: +<PRE> +CFLAGS+=$(INCLUDE_OPT) +</PRE> +in +<PRE> +CFLAGS+=$(INCLUDE_OPT) -Wno-error +</PRE> +Mache dasselbe dann im ../src/backend/storage/lmgr Verzeichnis. + + +<H4><A NAME="1.17">1.17)</A> Beim Kompilieren von PostgreSQL bricht der gcc mit einer Signal 11 Meldung ab.</H4> +Oder genauer: <EM>gcc: Internal compiler error: program cc1 got fatal signal 11</EM> +<P> +Das können Hardware/Speicherprobleme sein. PostgreSQL ist ein großes Programm und große +gcc-Kompilierungsläfe (wie eben PostgreSQL oder eine Kernel-Kompilierung) beanspruchen den Hauptspeicher +wie wenig andere Programme. Dadurch können Fehler auftreten, die in normalen Situationen nicht erscheinen. +Niedrigere Betriebssysteme beanspruchen die Hardware ebenfalls nicht in diesem Maße, deshalb kann es sein, daß Du niemals +Probleme unter DOS/Windows siehst. +<P> +Mehr Information zu diesem Problem gibt es unter <A HREF="http://www.BitWizard.nl/sig11/">http://www.BitWizard.nl/sig11/</A> und +in deutsch unter <A HREF="http://www.suse.de/sdb/de/html/kfr_58.html">http://www.suse.de/sdb/de/html/kfr_58.html</A>. +<P>Laut dieser Sig11-FAQ scheint es ein spezielles Problem mit dem RedHat 5.0 gcc auf einem Cyrix-Prozessor zu geben. +Siehe bitte dort nach den Details nach. + +<H4><A NAME="1.18">1.18)</A> Kann ich Version 6.1.1 unter MkLinux installieren?</H4> +<A HREF="mailto:t-ishii@sra.co.jp">Tatsuo Ishii</A> hat das unter MkLinux DR2.1 update2 geschafft, nachdem der kleine Patch +von <A HREF="ftp://ftp.sra.co.jp/pub/cmd/postgres/6.1.1/">ftp://ftp.sra.co.jp/pub/cmd/postgres/6.1.1/mklinux.patch.gz</A> +eingespielt wurde. + + +<H4><A NAME="1.19">1.19)</A> Warum stoppt make oder bricht sonstwie ab?</H4> +Es gibt eine Reihe von Reports darüber, daß gmake zu früh aussteigt oder mit einem Segmentation Fault aussteigt. +Das letzte Problem wurde von gmake 3.74 berichtet. Ein Update auf 3.76.1 löste dieses Problem. +Wie auch immer, 3.74 arbeitet bei vielen Leuten zur vollsten Zufriedenheit. Kurz gesagt, upgrade +Deinen gmake auf die aktuellste Version, bevor Du dieses Problem meldest. + +<H4><A NAME="1.20">1.20)</A> Wie kann ich für die Prozessoren 486 oder Pentium optimieren?</H4> +Die Standard-Compilerflags führen keine Optimierung für den 486er oder den Pentium-Prozessor durch. +Um diese Optimierung zu aktivieren, füge wahlweise <U>eine</U> der folgenden Zeilen +der Datei Makefile.custom hinzu: +<PRE> +CFLAGS+= -m486 +</PRE> +oder +<PRE> +CFLAGS+= -mpentium +</PRE> +oder +<PRE> +CFLAGS+= -mpentiumpro +</PRE> + +<H4><A NAME="1.21">1.21)</A> Wieso bekomme ich seltsame Ergebnisse beim Drucken von Zeiten (z.B. beim Regressionstest 'timespan')?</H4> +Die Zeit erscheint z.B. als: "4 hours 59 mins 60.00 secs" und nicht als "5 hours" +<P> +Das ist ein Problem mit der glibc2-Bibliothek, die mit RedHat 5.0 ausgeliefert wird. Update Deine glibc auf die aktuellste RedHat-Version +für v5.0/Hurricane. Alle Versionen vor glibc-2.9.7 scheinen dieses Problem zu haben. + +<H4><A NAME="1.22">1.22)</A> Warum bekomme ich keine shared libraries für libpq, wenn ich Version 6.3.2 kompiliere?</H4> +Es gab eine Last-Minute-Änderung der Linux-Konfiguration für Version 6.3.2. +Siehe für einige Fehlerbehebungen und einen Linux-ELF-Patch in <A HREF="ftp://postgresql.org/pub/patches/">ftp://postgresql.org/pub/patches/</A> nach. + +<H4><A NAME="1.23">1.23)</A> Warum scheitert der Kompilierungslauf mit Nachrichten, daß F_BOOLIN, F_BOOLOUT und F_BYTEAIN nicht deklariert seien?</H4> +Die komplette Meldung sieht ungefähr so aus: +<PRE> + -I/usr/include/readline -O2 -Wall -Wmissing-prototypes -I.. + -Wno-error -c bootstrap.c -o bootstrap.o + bootstrap.c:160: `F_BOOLIN' undeclared here (not in a function) + bootstrap.c:160: initializer element for `Procid[0].inproc' is not + constant + bootstrap.c:160: `F_BOOLOUT' undeclared here (not in a function) + bootstrap.c:160: initializer element for `Procid[0].outproc' is not + constant + bootstrap.c:161: `F_BYTEAIN' undeclared here (not in a function) + bootstrap.c:161: initializer element for `Procid[1].inproc' is not + constant +</PRE> +Solange Du nicht weißt, warum das passiert, ist dieses Problem ziemlich kniffelig, da diese +Konstanten anscheinend nirgendwo definiert werden. +<P> +Die Lösung ist dafür zu sorgen, daß der cpp in Deinem Pfad erreichbar ist, bevor +make gestartet wird. +<P> +Auf Redhat 5.1, ist cpp in /usr/lib/gcc-lib/i386-redhat-linux/2.7.2.3 + + + + +<H3><A NAME="Sec2">Abschnitt 2: Hilfs- und Zusatzprogramme kompilieren</A></H3> + +<H4><A NAME="2.1">2.1)</A> Der Linker findet die Bibliothek libX11 nicht, wenn pgtclsh kompiliert werden soll.</H4> +Füge folgende Zeile in src/Makefile.custom hinzu: +<PRE> +X11_LIBDIR = /usr/X11R6/lib +</PRE> + +<H3><A NAME="Sec3">Abschnitt 3: Laufzeit Probleme</A></H3> + +<H4><A NAME="3.1">3.1)</A> Ich bekomme die Fehlermeldung <EM>_fUnKy_POSTPORT_sTuFf_ undefined</EM>, wenn Skripts wie createuser laufen.</H4> +Das ist ein Fehler in Versionen 1.06-1.07 und ist ab Version 1.08 und höher behoben. + +<H4><A NAME="3.2">3.2)</A> Nachdem ich postmaster starte, meldet das System <EM>Bad system call (Core dumped)</EM></H4> +Diese Fehlermeldung deutet an, daß Du keinen Shared-Memory-Support in den Kernel einkompiliert hast. +Der Kernel muß mit dieser Option neu kompiliert werden, um diese Eigenschaft hinzuzufügen. + +<H4><A NAME="3.3">3.3)</A> Wenn ich versuche, den Postmaster zu starten, bekomme ich eine Fehlermeldung wie:<BR><EM> + Failed Assertion("!(file != 0):(null)", File:<BR> + "/usr/local/PostgreSQL/src/backend/storage/file/fd.c", Line: 257)<BR> + !(file != 0) (0)<BR> + initdb: could not create template database<BR> + initdb: cleaning up.</EM></H4> + +Deine Berechtigungen für die Datei /dev/null sind falsch gesetzt. +ein <CODE>ls -l /dev/null</CODE> sollte folgende Ausgabe zeigen: +<PRE> +crw-rw-rw- 1 root wheel 2, 2 Oct 8 18:41 /dev/null +</PRE> +Korrigiere die Berechtigungen mit: +<PRE> +chmod a+rw /dev/null +</PRE> + +<H4><A NAME="3.4">3.4)</A> Warum funktioniert createuser nicht?</H4> +Es gibt ein Problem mit Version 2.5.3 des GNU flex und createuser. Die Möglichkeiten, diesen Fehler zu beheben sind: +Entweder auf die flex-Version 2.5.3 zu gehen, auf Version 2.5.4 zu gehen, oder +den Patch nach doc/README.flex einzuspielen. +<P> +Die Version 2.5.4. gibt es unter <A HREF="ftp://prep.ai.mit.edu/pub/gnu/">ftp://prep.ai.mit.edu/pub/gnu/flex-2.5.4.tar.gz</A>. + + +<H4><A NAME="3.5">3.5)</A> Wieso bekomme ich einen Fehler, wie:<BR><EM> + IpcMemoryCreate: memKey=155356396 , size=760632 ,<BR> + permission=384IpcMemoryCreate: shmget(..., create, ...)<BR> + failed: Invalid argument</EM></H4> + +Du hast keine IPC-Unterstützung in Deinen Linux-Kernel einkompiliert. +Der Kernel muß mit dieser Option neu kompiliert werden, um diese Eigenschaft hinzuzufügen. + +<H4><A NAME="3.6">3.6)</A> Wieso scheitert der Aufruf von psql mit: <EM>psql: can't load library 'libpq.so.1</EM></H4> +Psql wurde mit dynamischen Zugriff auf die libpq-bibliothek kompiliert. +Um dieses Problem zu lösen, solltest Du Dich als root anmelden und die Datei /etc/ld.so.conf editieren. +Füge eine Zeile am Ende hinzu, die den Namen des PostgreSQL-Bibliotheken-Verzeichnis enthält (das +lib-Verzeichnis im PostgreSQL-Installationsverzeichnis) und rufe den Befehl <CODE>/sbin/ldconfig -v</CODE> auf. + +Alternativ (und falls Du keinen root-Zugriff hast) kannst Du die LD_LIBRARY_PATH-Variable +benutzen. +Die LD_LIBRARY_PATH-Variable enthält eine durch Doppelpunkt getrennte Liste mit Suchpfaden für +Shared-Bibliotheken. Diese Liste wird durchsucht, bevor auf die Informationen von ldconfig zugegriffen wird. +Unter der bash sieht das ganze so aus: +<PRE> +export LD_LIBRARY_PATH='PathToPGSQL'/lib +</PRE> +unter der tcsh so: +<PRE> +setenv LD_LIBRARY_PATH 'PathToPGSQL'/lib +</PRE> +wobei 'PathToPGSQL' das Installationsverzeichnis von PostgreSQL ist. +Hinweis: der ldd-Befehl dient dazu, sich die dynamischen Bibliotheken für eine bestimmte +ausführbare Datei anzeigen zu lassen. + + +<H4><A NAME="3.7">3.7)</A> Andere seltsame Verhaltensweisen</H4> +Ich bin mir nicht sicher, welche Symptome alle auftreten können, außer daß gar nichts richtig funktioniert, +aber es stellte sich heraus, daß man sorgsam darauf achten sollte, daß die richtige Version der libpq-Bibliothek +geladen wird. Falls Du alte Versionen in Deinem Bibliothekspfad hast (z.B. in /usr/lib) können diese statt der +neueren Version geladen werden. Schaffe diese alten Versionen beiseite und siehe im übrigen +<A HREF="3.6">Frage 3.6</A> für weitere Details bezüglich dem Laden von Bibliotheken. + +<H4><A NAME="3.8">3.8)</A> Wenn PostgreSQL beim Systemhalt lief, führt Linux beim Neustart jedesmal einen Filesystemcheck (fsck) durch</H4> +Es gab darüber einige Berichte und es scheint, daß dies passiert, wenn PostgreSQL von der /etc/inittab +gestartet wird, wie im INSTALL-Dokument beschrieben. +<P> +Deshalb wird Dir empfohlen, den postmaster von einem rc-Skript aus zu starten. +Unter einem Slackware-artigem System würdest Du /etc/rc.d/rc.local modifizieren, +um den postmaster zu starten. +<P> +Unter RedHat-artigen Systemen würdest Du ein SysV-artiges Skript in /etc/rc.d/rc3.d +basierend auf der /etc/rc.d/init.d Schablonen-Datei erstellen. +<P> +Es gibt eine Beispieldatei unter dem Verzeichnis contrib/linux/postgres.init. +<P> +Hier ist noch ein anderes Beispiel von <A HREF="mailto:john@intelligent.co.uk">John Robinson</A> +welches Du entsprechend anpassen kannst. + +<PRE> +#!/bin/sh +# +# postgreSQL.init This shell script takes care of starting and stopping +# the PostgreSQL postmaster. +# + +# Source function library. +. /etc/rc.d/init.d/functions + +# Source networking configuration. +. /etc/sysconfig/network + +# Check that networking is up. +[ ${NETWORKING} = "no" ] && exit 0 + +# See how we were called. +case "$1" in + start) + # Start daemons. + echo -n "Starting postgres Postmaster daemon:" + if [ -z "`pidofproc postmaster`" ] + then + su postgres -c "/usr/local/pgsql/bin/postmaster -D /home/postgreSQL/data -p 5432 &" + echo -n " postmaster" + else + echo -n " (already running)" + fi + echo + touch /var/lock/subsys/postgres + ;; + stop) + # Stop daemons. + echo -n "Shutting down postgres Postmaster daemon: " + killall -TERM postmaster 2>/dev/null + killall -TERM postgres 2>/dev/null + echo + rm -f /var/lock/subsys/postgres + ;; + *) + echo "Usage: postgres {start|stop}" + exit 1 +esac + +exit 0 +</PRE> + + +<H4><A NAME="3.9">3.9)</A> Warum dauert Query 32 in den RegressionsTests so lange?</H4> +Das passiert wegen eines Fehlers in den Regressions-Skripten auf Linux-Kisten. +Es gibt - soweit ich weiß - zwei Möglichkeiten, diese Fehler zu umgehen +(die Information stammt von <A HREF="mailto:t-ishii@sra.co.jp">Tatsuo Ishii</A>): +<P> +1. ändere folgende Zeile in regress.sh: +<PRE> +time postgres -texecutor -tplanner -Q bench < bench.sql +</PRE> +in +<PRE> +postgres -texecutor -tplanner -Q bench < bench.sql +</PRE> +2. nachdem der Test gelaufen ist, entferne eine Zeile ganz am Ende der Datei bench.out, +die ungefähr so aussieht: +<PRE> +85.86user 114.47system 4:49.20elapsed 69%CPU (0avgtext+0avgdata 0maxresident)k +</PRE> +dann gib folgendes auf der Befehlszeile ein: +<PRE> +sh ./perquery < bench.out > & bench.out.perquery +</PRE> + + + +<H4><A NAME="#3.10">3.10)</A> Warum bekomme ich lustige Rundungsergebnisse in einigen Datums/Zeit-Berechnungen, wie:<BR><EM> + select '4 hours'::timespan;<BR> + liefert '3 hours 59 minutes 60 seconds'</EM>?</H4> + +Du benutzt neue glibc2-Bibliotheken in einer Version kleiner als 2.0.7. Das ist ein mathematisches Rundungsproblem. +Aktualisiere Deine Bibliothek. + + +<H4><A NAME="3.11">3.11)</A> Wieso bekomme ich einen Fehler wie: <EM>IpcMemoryCreate: shmget failed (Permission denied)</EM>?</H4> +Im Detail erscheint der Fehler mit dieser Meldung:<BR> +<PRE> +In detail, a message like this may appear: +IpcMemoryCreate: shmget failed (Permission denied) +key=5432010, size=120, permission=700 +IpcMemoryAttach: shmat failed (Permission denied) id=0 +FATAL 1: AttachSLockMemory: could not attach segment +</PRE> +Dieser Fehler wird durch nicht gelöschte Segmente im <EM>shared memory</EM> verursacht. +(Du kannst sie mit dem Programm <EM>ipcs</EM> sehen. +Benutze das Programm <EM>ipcrm</EM>, um sie zu löschen. +<HR> +<P><BR> +<P><BR> +<CENTER> +<TABLE BORDER=0 CELLSPACING=2 CELLPADDING=2> +<TR> + <TH COLSPAN=2>Author of the english version</TH> +</TR> +<TR> + <TD ALIGN=LEFT>Dr. Andrew C.R. Martin</TD> + <TD ALIGN=RIGHT>University College London</TD> +</TR> +<TR> + <TD ALIGN=LEFT>EMAIL: (Work) martin@biochem.ucl.ac.uk</TD> + <TD ALIGN=RIGHT>(Home) andrew@stagleys.demon.co.uk</TD> +</TR> +<TR> + <TD ALIGN=CENTER COLSPAN=2>URL: http://www.biochem.ucl.ac.uk/~martin</TD> +</TR> +<TR> + <TD ALIGN=LEFT>Tel: (Work) +44(0)171 419 3890</TD> + <TD ALIGN=RIGHT>(Home) +44(0)1372 275775</TD> +</TR> +</TABLE> +<P> +<TABLE BORDER=0 CELLSPACING=2 CELLPADDING=2> +<TR> + <TH COLSPAN=2>Translator of the german version</TH> +</TR> +<TR> + <TD ALIGN=LEFT>Karsten Schulz</TD> + <TD ALIGN=RIGHT>Linux Systemhaus Schulz</TD> +</TR> +<TR> + <TD ALIGN=LEFT>EMAIL: (Work) schulz@Linux-Systemhaus.de</TD> + <TD ALIGN=RIGHT>(Home) kaschu@t800.ping.de</TD> +</TR> +<TR> + <TD ALIGN=CENTER COLSPAN=2>URL: http://www.Linux-Systemhaus.de/</TD> +</TR> +<TR> + <TD ALIGN=LEFT>Tel: (Work) +49 231 3944432</TD> + <TD ALIGN=RIGHT>(Fax) +49 231 3944435</TD> +</TR> +</TABLE> +</CENTER> +</BODY> +</HTML> diff --git a/doc/src/FAQ/FAQ_linux_italian.html b/doc/src/FAQ/FAQ_linux_italian.html new file mode 100644 index 00000000000..71303d4d4f2 --- /dev/null +++ b/doc/src/FAQ/FAQ_linux_italian.html @@ -0,0 +1,666 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> + <META NAME="GENERATOR" CONTENT="Mozilla/4.06 [en] (X11; I; Linux 2.1.105 i586) [Netscape]"> +</HEAD> +<BODY BGCOLOR="#FFFDEC"> + +<PRE>======================================================= +Frequently Asked Questions (FAQ) per PostgreSQL >= V6.1 +Specifiche per Linux Os +DA LEGGERE IN CONGIUNZIONE CON LE NORMALI FAQ +======================================================= +Ultimo aggiornamento: Lunedi' 18 Maggio 11:17:00 GMT 1998 + +Curatore corrente: Andrew C.R. Martin (martin@biochem.ucl.ac.uk) +Autore originale: Andrew C.R. Martin (martin@biochem.ucl.ac.uk) +Traduzione FAQ in italiano: Daniele Medri 'MaDriD' (madrid@darshan.org) + +Cambiamenti in questa versione (* = modificato, + = nuovo, - = rimosso): + ++1.21) Perche' ricevo strani risultati con i tempi di stampa (per esempio + nel test di regressione 'timespan'?</PRE> + +<PRE>Questo file è diviso approsimativamente nel sequente modo: +1.*) Istallare PostgreSQL +2.*) Compilare programmi accessori +3.*) Problemi di esecuzione + + +Domande risposte: +1.1) Quali cambiamenti devo fare a src/Makefile.global o a src/Makefile.custom + e ci sono altri cambiamenti necessari? +1.2) Perche' ricevo problemi con missing libreadline? +1.3) [REDHAT] Perche' ricevo problemi di libdl e dlfcn.h perse? +1.4) [SLACKWARE 3.1] Perche' ricevo problemi di libdl e dlfcn.h perse? +1.5) La mia compilazione si arresta segnalando la mancanza dell'include file + dlfcn.h perso. +1.6) GCC reclama una ignorata opzione -fpic +1.7) Ricevo messaggi di warning (errore) del tipo + warning: cast from pointer to integer of different size +1.8) [SuSE-Linux 4.2-4.4] Dove sono curses e termcap? +1.9) Perche' ho problemi con ld.so? +1.10) Perche' ricevo errori del tipo `yy_flush_buffer undefined'? +1.11) Come posso compilare PostgreSQL su un sistema a.out? +1.12) Che cosa fallisce con: + yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y + make: /usr/bin/make: cannot execute binary file +1.13) Quali sono i riferimenti in X11_LIB a libsocket e libnsl in + src/Makefile.global? +1.14) [DEBIAN] Dov'e' libtermcap? +1.15) [REDHAT] Posso trovare PostgreSQL come RPM? +1.16) Quando tento di compilare una versione in sviluppo sotto Linux, la + compilazione fallisce con il seguente messaggio: + In file included from /usr/include/sys/sem.h:8, + from ipc.c:37: + /usr/include/asm/bitops.h:32: warning: no previous prototype for Set_bit' + .... + make: *** [ipc.o] Error 1 +1.17) Quando sto' compilando postgres, gcc riporta un signal 11 e si interrompe. +1.18) Posso installare 6.1.1 su MkLinux? +1.19) Perche' esce o va in crash? +1.20) Come posso ottimizzarlo per un 486 o un processore pentium +1.21) Perche' ricevo strani risultati con i tempi di stampa (per esempio + nel test di regressione 'timespan'? +2.1) Il linker non trova libX11 quando sta' compilando pgtclsh +3.1) Ricevo un messaggio tipo _fUnKy_POSTPORT_sTuFf_ non definito quando + lancio uno script come createuser +3.2) Lancio postmaster e dopo il sistema dice 'Bad system call(Core + dumped)' +3.3) Quando tento di lanciare Postmaster, perche' ricevo un errore del tipo + Failed Assertion("!(file != 0):(null)", File: + "/usr/local/PostgreSQL/src/backend/storage/file/fd.c", Line: 257) + !(file != 0) (0) + initdb: could not create template database + initdb: cleaning up. +3.4) Perche' createuser non funziona? +3.5) Perche' ricevo un errore del tipo: + IpcMemoryCreate: memKey=155356396 , size=760632 , + permission=384IpcMemoryCreate: shmget(..., create, ...) + failed: Invalid argument +3.6) Perche' psql fallisce con: + psql: can't load library 'libpq.so.1' +3.7) Altri comportamenti strani +3.8) Quando PostgreSQL e' attivo allo shutdown di sistema, Linux + esegue al reboot un fsck al disco. +3.9) Perche' la Query 32 nel test di regressione pretende molto tempo? +3.10) Perche' ricevo dei risultati arrotondati su date/time aritmetici, + come + select '4 hours'::timespan; + returning '3 hours 59 minutes 60 seconds'? + +---------------------------------------------------------------------- +Sezione 1: Compilare PostgreSQL +---------------------------------------------------------------------- + +1.1) Quali cambiamenti devo fare a src/Makefile.global o a + src/Makefile.custom e ci sono altri cambiamenti necessari? + + I cambiamenti ai makefiles sono piu'facilmente fatti usando + lo script di shell per la personalizzazione che si trova nella + directory src che scrive un file Makefile.custom appropriato. + + I soli altri cambiamenti che tu devi fare e rimpiazzare Flex se tu + hai una versione 2.5.3, la quale ha dei bug che si manifestano al + fallimento di createuser (Vedi domanda 3.4) + + Se tu modifichi i makefiles a mano, tu *devi* settare le seguenti + variabili: + PORTNAME= linux + + Tu devi anche cambiare quello che segue per settare la tua propria + installazione: + POSTGRESDIR + + Se tu cambi sull'opzione USE_TCL, devi settare questo: + TCL_INCDIR= + TCL_LIBDIR= + TCL_LIB= + TK_INCDIR= + TK_LIBDIR= + TK_LIB= + X11_INCDIR= + X11_LIBDIR= + X11_LIB= + + Sul mio sistema Slackware3.0 esse sono: + TCL_INCDIR= /usr/include/tcl + TCL_LIBDIR= /usr/lib + TCL_LIB= -ltcl + TK_INCDIR= /usr/include/tcl + TK_LIBDIR= /usr/lib + TK_LIB= -ltk + X11_INCDIR= /usr/include/X11 + X11_LIBDIR= /usr/X386/lib + X11_LIB= -lX11 + + Devi fare ogni altro cambiamento necessario come documentato nel + file INSTALL e in Makefile.global + + +1.2) Perche' ricevo problemi con missing libreadline? + + I sistemi Linux in genere non vengono distribuiti con la libreria + Gnu readline installata. Si può in ogni caso o disattivare l'opzione + di readline in src/Makefile.global o src/Makefile.custom, oppure + installare la libreria GNU stessa (readline). + + Nota che Linux Debian (come FreeBSD) esce con le readline installate. + +1.3) [REDHAT] Perche' ricevo problemi di libdl e dlfcn.h perse?? + + Questa manifestazione avvisa che non c'e' la capacita' di linkare + funzioni come dlopen(), dlclose(), etc. durante l'ultima fase di compilazione. + + La libreria libdl e' usata per linkare in maniera dinamica le funzioni + e rendere flessibile l'avvio dell'applicativo. Per alcune ragioni questa + non era presente nella distribuzione Red Hat. La versione Redhat 4.0 + (Colgate) a colmato a questa mancanza. + + RedHat ha ora una nuova versione di ld.so in formato RPM nei propri siti FTP. + Scaricate: + + ftp://ftp.redhat.com/pub/redhat/devel/i386/RedHat/RPMS/ld.so-1.7.14-4.i386.rpm + + Installa il file RPM nella maniera usuale e andra'! + + ATTENZIONE! Devi rilanciare nuovamente il file configure e fare un + make clean dopo aver installato la libreria e prima di ricompilare. + + C'e' stata una sola notizia di sistema corrotto da programmi che + accedevano a queste librerie mentre venivano aggiornate (nessun altra + sorpresa.) Conseguentemente e' una buona idea quella di fare un reboot + del sistema prima di installare le nuove librerie e avere pochi + processi attivi durante questo upgrade. Lanciare il sistema in + modalita' utente singolo (single-user) e' probabilmente una buona idea! + + Se tu vuoi fare la strada piu' dura, puoi ottenere la libreria e + l'header file da: + + ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ld.so-1.7.14.tar.gz + + Alternativamente puoi trovare i file binari precompilati in + distributions/debian/buzz/binary-i386/base/ld.so-1.7.14-4.deb + nel medesimo sito, o seguire le istruzioni date alla domanda 1.2 per + correggere lo stesso errore con le aggiornate versioni di Slackware 3.1. + Non scegliere questo metodo se non sai quello che stai facendo! + + + +1.4) [SLACKWARE 3.1] Perche' ricevo problemi di libdl e dlfcn.h perse?? + + Questa manifestazione avvisa che non c'e' la capacita' di linkare + funzioni come dlopen(), dlclose(), etc. durante l'ultima fase di compilazione.</PRE> + +<PRE> Guarda la risposta alla domanda 1.3. Slackware fino alla versione 3.0 + era provvista di questa libreria e degli include file e ritornarono nell'ultima + versione 3.1, ma la prima versione della 3.1 (prima del 9 settembre 1996) + non aveva queste e molte versioni su CD-ROM erano state stampate + con la prima edizione. + + C'e' stata una sola notizia di sistema corrotto da programmi che + accedevano a queste librerie mentre venivano aggiornate (nessun altra + sorpresa.) Conseguentemente e' una buona idea quella di fare un reboot + del sistema prima di installare le nuove librerie e avere pochi + processi attivi durante questo upgrade. Lanciare il sistema in + modalita' utente singolo (single-user) e' probabilmente una buona idea! + + Per fissare facilmente questo basta ottenere il file ldso.tgz dal quarto + dischetto della piu' recente distribuzione Slackware e scompattarlo da + dalla directory di root (/) e poi lanciare + + sh install/doinst.sh + + per completare l'installazione. Successivamente lanciare + + ldconfig + + ATTENZIONE! Devi rilanciare nuovamente il file configure e fare un + make clean dopo aver installato la libreria e prima di ricompilare. + + Se vuoi installarla manualmente bisogna installare prima il file + dlfcn.h in /usr/include. + + Secondo, installa il file libdl.so.1.7.14 (o qualsiasi altra versione) + in /lib, e poi fai: + + cd /lib + ln -sf libdl.so.1.7.14 libdl.so.1 + ln -sf libdl.so.1 libdl.so + + Su certi sistemi (a seconda della personale configurazione di GCC) + e' necessario fare: + + cd /usr/lib + ln -sf /lib/libdl.so . + + Finalmente + + ldconfig + + ATTENZIONE! Devi rilanciare nuovamente il file configure e fare un + make clean dopo aver installato la libreria e prima di ricompilare. + + +1.5) La mia compilazione si arresta segnalando la mancanza dell'include file + dlfcn.h perso. + + Guarda la risposta 1.3/1.4. Non dimenticare che se stai usando un sistema + a.out devi prima avere installato il pacchetto dld (il quale non viene + fornito con molti sistemi a.out) per avere dlfcn.h e gli altri. + Guarda la domanda 1.11. + + +1.6) GCC reclama una ignorata opzione -fpic + + Le prime versioni di GCC accettavano entrambe -fpic o -£PIC. + Nelle piu' recenti versioni (V2.7.2?) richiede -£PIC. + Se tu stai usando una versione ELF di Linux, questa puo' per sicurezza + essere ignorata perche' -£PIC e' di default. + + Puoi correggere questa editando il file src/Makefile.global e cambiare + CFLAGS_SL + + +1.7) Ricevo messaggi di warning (errore) del tipo + warning: cast from pointer to integer of different size + + Questi appararivano nelle prime versione di Postgres95 e posso per sicurezza + essere ignorate. PostgreSQL V6.0 dovrebbe compilare senza warnings + ad eccezione di quelli relativi agli header file di sistema (i quali possono + essere ignorati per sicurezza). + +1.8) [SuSE-Linux 4.2-4.4] Dove sono curses e termcap? + + SuSE-Linux 4.2 ha le ncurses ma non le curses. 4.4 ha entrambe. + SuSE-Linux ha anche le librerie termcap in /usr/lib/termcap + invece di essere in /usr/lib. + + PostgreSQL (fino alla V6.0) + ----------------------- + Setta il valore delle CURSES_LIB in src/Makefile.custom a -lncurses + (o fai questo attraverso lo script di personalizzazione). + Aggiundi la seguente riga al file src/Makefile.custom: + + LDADD_BE+= -L/usr/lib/termcap + + Devi editare il file src/bin/psql/Makefile e cambiare: + ifeq ($(PORTNAME), linux) + LD_ADD+= + con: + ifeq ($(PORTNAME), linux) + LD_ADD+= -ltermcap + + PostgreSQL (V6.1) + ----------------- + Lo script di configurazone non sa' di cercare nella directory + /usr/lib/termcap per le librerie termcap, percio' tu devi specificare + questo come una delle directory delle librerie dove cercare. + + Se non funziona (non ho SuSE per verificare che vada) + allora lancia configure, edita src/Makefile.global e aggiungi + -ltermcap alla linea LDFLAGS + (dopo -lreadline). (Alternativamente poi configurare + src/Makefile.custom prima di lanciare configure.) + + Alcune versioni di SuSE forniscono solo ncurses, percio' tu devi + forzare l'uso delle ncurses piuttosto che le curses cambiando + -lcurses con -lncurses. (dimostrato per SuSE 5.1) + + +1.9) Perche' ho problemi con ld.so? + + Se tu hai problemi con ld.so, un altra libreria richiesta sotto ELF + per il caricamento dinamico, allora hai creato disordine con la tua + installazione o fatto un upgrade di Linux. + + Guarda le risposte alle domande 1.3/1.4. Devi installare ld.so.x.y.z in + /lib e lanciare ldconfig. + + La piu' recente vesione stabile del pacchetto ld eì 1.7.14 + Mentre scrivo, la versione 1.8.x di ld e' sperimentale. + +1.10) Perche' ricevo errori del tipo `yy_flush_buffer undefined'? + + Questo non e' specifico per Linux, ma e' comune nelle vecchie istallazione + di Linux. Devi avere una versione recente di Flex (2.5.2 o superiore) + per compilare PostgreSQL. Nota che Flex 2.5.3 ha dei bug: guarda la + domanda 3.4. + +1.11) Come posso compilare PostgreSQL su un sistema a.out? + + Prima, devi installare la libreria dld. Puoi ottenere questa da Sunsite come: + Linux/libs/dld.3.2.7.tar.gz + (ftp://sunsite.unc.edu/pub/Linux/libs/dld.3.2.7.tar.gz) + + Secondo, aggiungi la seguente linea al file src/Makefile.custom: + LINUX_ELF= + (o usa lo script di configurazione) + +1.12) Che cosa fallisce con: + yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y + make: /usr/bin/make: cannot execute binary file + + Questo e' un problema delle prime versioni di Postgres95. Il default + per PostgreSQL e' di usare bison -y piuttosto che yacc. + + yacc e' generalmente implementato come script che invoca bison -y + Per alcune ragioni (certe versioni di make? certe versioni di bash?) + make non puo' eseguire questo file di script. + + Per correggere questo, edita semplicemente src/mk/port/postgres.mk.linux + e alla fine del file cambia: + # YACC = bison -y + con + YACC = bison -y + +1.13) Quali sono i riferimenti in X11_LIB a libsocket e libnsl in + src/Makefile.global? + + Questo era un problema nella versione 1.08 (specifica per Sun Solaris) + E' stata fissata nella 1.09 e 6.0 + +1.14) [DEBIAN] Dov'e' libtermcap? + + Debian Linux viene distribuita senza librerie termcap e usa ncurses + (le quali usano terminfo all'interno). Non c'e' bisogno di cambiare la + variabile CURSES_LIB in src/bin/psql/Makefile peche' Debian provvede + con un link da libncurses a libcurses (diversamente da SuSE-Linux -- + Vedi domanda 1.8). + + Devi editare src/bin/psql/Makefile e commentare i cambiamenti: + ifeq ($(PORTNAME), linux) + LD_ADD+= -ltermcap + con: + ifeq ($(PORTNAME), linux) + LD_ADD+= + + +1.15) [REDHAT] Posso trovare PostgreSQL come RPM? + + Si! Michal Mosiewicz <mimo@lodz.pdi.net> + (http://www.pdi.lodz.pl/~mimo) ha creato un RPM + per PostgreSQL V6.0 per architettura Intel uplodata a + ftp://ftp.redhat.org/pub/Incoming/Postgres-6.0-1.i386.rpm + + Questa e' una precompilata versione, le sorgenti RPM erano come + io ho scritto (3 Febbraio 1997). + +1.16) Quando tento di compilare una versione in sviluppo sotto Linux, la + compilazione fallisce con il seguente messaggio: + In file included from /usr/include/sys/sem.h:8, + from ipc.c:37: + /usr/include/asm/bitops.h:32: warning: no previous prototype for Set_bit' + .... + make: *** [ipc.o] Error 1 + + Il problema e' che Linux non prevede prototipi per queste funzioni inline. + La soluzione e' di andare dentro la directory .../src/backend/storage/ipc + ed editare Makefile. + Cambia la linea + CFLAGS+=$(INCLUDE_OPT) + con + CFLAGS+=$(INCLUDE_OPT) -Wno-error + + Fai lo stesso con la directory ../src/backend/storage/lmgr. + +1.17) Quando sto' compilando postgres, gcc riporta un signal 11 e si interrompe. + Piu' specificatamente: + gcc: Internal compiler error: program cc1 got fatal + signal 11 + + Questo e' un problema di hardware/memoria. PostgreSQL e' un grande + programma, e una larga compilazione con gcc (come la compilazione + di PostgreSQL o la compilazione del kernel) stressa la memoria come + molti altri programmi, mostrando errori che non appaiono nelle normali + operazioni. Sistemi operativi inferiori non riescono a stressare l'hardware + in questo modo, per questo non vedrai mai questi errori sotto DOS/Windows. + + Maggiori informazioni in merito: + http://www.bitwizard.nl/sig11 + + Da questo Sig11 FAQ, sembra essere un errore specifico con Redhat 5.0 + lanciando su un processore Cyrix. Guarda il link superiore per i dettagli! + +1.18) Posso installare 6.1.1 su MkLinux? + + Tatsuo Ishii <t-ishii@sra.co.jp> ha fatto questo su MkLinux DR2.1 update2 dopo una piccola + patch disponibile presso: + ftp://ftp.sra.co.jp/pub/cmd/postgres/6.1.1/mklinux.patch.gz + +1.19) Perche' esce o va in crash?? + + Ci sono state diverse segnalazioni di gmake, dove in tutte si usciva + subito e c'era una seg faulting. Il problema piu' marcato e' stato + riportato con gmake 3.74 - upgradandolo alla 3.76.1 si e' risolto. + Comunque, la versione 3.74 e' funzionante per altri tipi di setup. + In breve, prova ad upgradare gmake all'ultima versione che puoi trovare + prima di riportarlo come un problema. + +1.20) Come posso ottimizzarlo per un 486 o un processore pentium + + Le flags di compilazione per default non permettono l'optimizzazione per 486 + o per processori Pentium. Per aggiungerla come ottimizzazione, edita + Makefile.custom e aggiungi: + + CFLAGS+= -m486 + + o (per i nuovi compilatori che molte persone non stanno usando) + + CFLAGS+= -mpentium + o + CFLAGS+= -mpentiumpro + +1.21) Perche' ricevo strani risultati con i tempi di stampa (per esempio + nel test di regressione 'timespan'? + Le ore appaiono come: '4 hours 59 mins 60.00 secs' + invece di '5 hours' + + Questo e' un problema con le librerie glibc2 le quali appaiono con + RedHat 5.0. Aggiorna le tue glibc con le ultime versioni di RedHat per + v5.0/hurricane. Tutto quello che e' anteriore alle glibc-2.0.7 ha + questi problemi. + +---------------------------------------------------------------------- +Sezione 2: Compilare programmi accessori +---------------------------------------------------------------------- + +2.1) Il linker non trova libX11 quando sta' compilando pgtclsh + + Aggiungi la seguente riga al file src/Makefile.custom + X11_LIBDIR = /usr/X11R6/lib + + +---------------------------------------------------------------------- +Sezione 3: Problemi di esecuzione +---------------------------------------------------------------------- + +3.1) Ricevo un messaggio tipo _fUnKy_POSTPORT_sTuFf_ non definito quando + lancio uno script come createuser + + Questo e' un bug nella V.1.06-V1.07 di Postgres ed e' fissata con la versione + 1.08 o superiore. + +3.2) Lancio postmaster e dopo il sistema dice 'Bad system call(Core + dumped)' + + Questo indica che non hai compilato il supporto per la memoria condivisa nel + kernel. Devi ricompilare il kernel per aggiungere questa feature. + +3.3) Quando tento di lanciare Postmaster, perche' ricevo un errore del tipo + Failed Assertion("!(file != 0):(null)", File: + "/usr/local/PostgreSQL/src/backend/storage/file/fd.c", Line: 257) + !(file != 0) (0) + initdb: could not create template database + initdb: cleaning up. + + I permessi sul file /dev/null sono sbagliati. + + ls -l /dev/null should give you something like: + + crw-rw-rw- 1 root wheel 2, 2 Oct 8 18:41 /dev/null + + Correggi i permessi con: + + chmod a+rw /dev/null + +3.4) Perche' createuser non funziona? + + C'e' un problema con la versione 2.5.3 di GNU Flex e createuser. + Le tue opzioni devono recedere a Flex V2.5.2, aggiornale alla V2.5.4 o + applica una patch alla V2.5.3 la quale e' fornita in doc/README.flex + Puoi ottenere la V.2.5.4 da: + ftp://prep.ai.mit.edu/pub/gnu/flex-2.5.4.tar.gz + +3.5) Perche' ricevo un errore del tipo: + IpcMemoryCreate: memKey=155356396 , size=760632 , + permission=384IpcMemoryCreate: shmget(..., create, ...) + failed: Invalid argument + + Non hai compilato il supporto IPC nel kernel di Linux. + Devi ricompilare il kernel con questa opzione. + +3.6) Perche' psql fallisce con: + psql: can't load library 'libpq.so.1' + + Psql e' stata compilata per linkarsi dinamicamente con la libreria libpq. + + Per risolvere questo, devi accedere come root ed editare il file + /etc/ld.so.conf + Aggiungi una linea singola alla fine, la quale prende il nome della directory + delle librerie di PostgreSQL (la sottodirectory delle librerie + dell'installazione diPostgreSQL) e lancia + /sbin/ldconfig -v + + Alternativamente, (e se tu non hai accesso come root), devi usare la + variabile di ambiente LD_LIBRARY_PATH. + + La variabile LD_LIBRARY_PATH contiene una lista di paths per ricercare le librerie + condivise. Questa lista e' ricercata prima delle librerie specificate da ldconfig. + + Percio' sotto Bash, devi fare qualcosa del tipo: + export LD_LIBRARY_PATH='PathToPGSQL'/lib + o, usando tcsh + setenv LD_LIBRARY_PATH 'PathToPGSQL'/lib + rimpiazzando 'PathToPGSQL' con l'appropriato path alla tua directory PostgreSQL + al top level. + Nota che il comando ldd puo' essere eseguito su un programma linkato dinamicamente + alla lista di paths a tutte le librerie condivise sopra, alle quali gli eseguibili + dipendono. + + +3.7) Altri comportamenti strani + + Non sono sicuro quali siano i sintomi che non permettono la corretta esecuzione, + ma si puo' ipotizzare che le ragioni vadano oltre il regolare funzionamento del + loader dinamico nel caricare la corretta versione delle librerie libpq. + Se hai una versione vecchia dai una occhiata al path delle librerie + (per esempio in /usr/lib) che dovrebbero caricare nelle nuove versioni che intendi + far girare. Renditi sicuro di prendere queste nel percorso e guarda la Domanda 3.6 + per i dettagli in merito al caricamento dinamico delle librerie. + +3.8) Quando PostgreSQL e' attivo allo shutdown di sistema, Linux + esegue al reboot un fsck al disco. + + Ci sono state alcune segnalazioni di questo e sembre essere il + risultato di lanciare PostgreSQL dal /etc/inittab come suggerito + nel file INSTALL. + + Si raccomanda percio' di lanciare il postmaster da un rc script. + Sotto una versione di tipo Slackware, devi modificare /etc/rc.d/rc.local + per lanciare il postmaster. Sotto una versione in stile RedHat + devi creare uno script in stile SysV sotto /etc/rc.d/rc3.d basato + sul file /etc/rc.d/init.d. + + C'e' un esempio di file in contrib/linux/postgres.init + + Un altro file di esempio è proposto da John Robinson + <john@intelligent.co.uk> il quale puo' essere modificato a seconda delle esigenze: + +#!/bin/sh +# +# postgreSQL.init This shell script takes care of starting and stopping +# the PostgreSQL postmaster. +# + +# Source function library. +. /etc/rc.d/init.d/functions + +# Source networking configuration. +. /etc/sysconfig/network + +# Check that networking is up. +[ ${NETWORKING} = "no" ] && exit 0 + +# See how we were called. +case "$1" in + start) + # Start daemons. + echo -n "Starting postgres Postmaster daemon:" + if [ -z "`pidofproc postmaster`" ] + then + su postgres -c "/usr/local/pgsql/bin/postmaster -D /home/postgreSQL/data -p 5432 &" + echo -n " postmaster" + else + echo -n " (already running)" + fi + echo + touch /var/lock/subsys/postgres + ;; + stop) + # Stop daemons. + echo -n "Shutting down postgres Postmaster daemon: " + killall -TERM postmaster 2>/dev/null + killall -TERM postgres 2>/dev/null + echo + rm -f /var/lock/subsys/postgres + ;; + *) + echo "Usage: postgres {start|stop}" + exit 1 +esac + +exit 0 + + + +3.9) Perche' la Query 32 nel test di regressione pretende molto tempo? + + Questo e' un bug nello script di regressione presente su Linux Os. + Ci sono due raggiri per evitarli (informazione di Tatsuo Ishii <t-ishii@sra.co.jp>): + + 1. cambia quello che segue in regress.sh: + time postgres -texecutor -tplanner -Q bench < bench.sql + a: + postgres -texecutor -tplanner -Q bench < bench.sql + + 2. dopo aver lanciato il test, rimuovi la linea finale di + bench.out, qualcosa del tipo: + 85.86user 114.47system 4:49.20elapsed 69%CPU (0avgtext+0avgdata 0maxresident)k + poi digita: + sh ./perquery < bench.out > & bench.out.perquery + + + +3.10) Perche' ricevo dei risultati arrotondati su date/time aritmetici, + come + select '4 hours'::timespan; + returning '3 hours 59 minutes 60 seconds'? + + Stai usando le nuove librerie glibc2 e hai una versione precedene alla + 2.0.7. E' un problema di arrotondamento matematico nella libreria. + Aggiorna le tue librerie.</PRE> + +<PRE> +---------------------------------------------------------------------------- +Dr. Andrew C.R. Martin University College London +EMAIL: (Work) martin@biochem.ucl.ac.uk (Home) andrew@stagleys.demon.co.uk +URL: http://www.biochem.ucl.ac.uk/~martin +Tel: (Work) +44(0)171 419 3890 (Home) +44(0)1372 275775 +---------------------------------------------------------------------------- +Daniele Medri 'MaDriD' - e-mail: madrid@darshan.org web: www.darshan.org +----------------------------------------------------------------------------</PRE> + +</BODY> +</HTML> diff --git a/doc/src/FAQ/FAQ_solaris.html b/doc/src/FAQ/FAQ_solaris.html new file mode 100644 index 00000000000..dc456b46120 --- /dev/null +++ b/doc/src/FAQ/FAQ_solaris.html @@ -0,0 +1,168 @@ +<PRE> +======================================================= +Frequently Asked Questions (FAQ) for PostgreSQL V6.5 +Sun Solaris Specific +TO BE READ IN CONJUNCTION WITH THE NORMAL FAQ +======================================================= +last updated: Thu Sep 21 9:30:00 CET 1999 + +current maintainer: Marc Liyanage (liyanage@access.ch) +original author: Marc Liyanage (liyanage@access.ch) + + + +Contents: + +1.1) What tools do I need to build and install PostgreSQL on Solaris? +1.2) What else do I have to do before building PostgreSQL? +1.3) Why am I getting "IpcMemoryCreate" errors when I try + to run postmaster? +1.4) Why am I getting "Can't tell what username to use" errors + when I try to run initdb? + +A) Contributors + + + +Notes: + +- The commands given here are for the bash shell. If you use + a different shell, you'll have to change the commands accordingly, + especially these regarding environment variables. + +- These instructions are written for Solaris 2.6 + + + +---------------------------------------------------------------------- +Section 1: Building and Installing PostgreSQL +---------------------------------------------------------------------- + +1.1) What tools do I need to build and install PostgreSQL on Solaris? + +You will need + +- GNU flex 2.5.4 or better (the lex included in Solaris 2.6 won't work) +- GNU bison (the yacc included in Solaris 2.6 won't work) +- GNU zip (gzip and especially zcat for installing the docs) +- GNU make +- GNU readline library + +We also used + +- GNU cc (gcc 2.8.1) + +If you like Solaris packages, you can find these tools here: +http://www.sunfreeware.com + +If you prefer sources, look here: +http://www.gnu.org/order/ftp.html + + + + +1.2) What else do I have to do before building PostgreSQL? + +Shared libraries +---------------- + +The default installation procedure puts the shared libraries +into "/usr/local/pgsql/lib", but the dynamic loader won't +find them there at runtime unless you use some hack like +symlinking the libraries in /usr/lib or setting LD_LIBRARY_PATH +for every user that will use the DB system. + +The first time you'll encounter this problem is usually when +running "initdb". It will fail with something like + + ld.so.1: pg_id: fatal: libpq.so: open failed: No such file or directory + +We recommend that you store the path of the directory containing +the libraries in the environment variable LD_RUN_PATH *before* +starting the build. This will cause the linker to store this +path in the binaries. + +Do this: + +# export LD_RUN_PATH=/usr/local/pgsql/lib + +(or wherever you choose to put the libraries) + +There is some good information about this here: +http://www.visi.com/~barr/ldpath.html + + +zcat +---- + +If + +- both the original solaris zcat as well as the recommended + GNU zcat are installed on the system (e.g. the former in /usr/bin and + the latter in /usr/local/bin) and +- configure (or "which zcat") finds the wrong one + +then configure needs to be told where GNU zcat can be found. + +Failure to do so will cause configure to select the wrong one +and the "gmake install" command in the "doc" subdirectory +(step 12 in the INSTALL file) will fail because Solaris +zcat cannot handle the .gz compressed documentation files. + +To fix this, type + +# export GZCAT=/usr/local/bin/zcat + +(or wherever your GNU zcat lives) + +before running configure. + + + + +1.3) Why am I getting "IpcMemoryCreate" errors when I try + to run the postmaster? + +(See also 3.4 in the main FAQ file) + +Under Solaris 2.6 and probably others, the default shared memory +maximum segment size kernel parameter is set too low. The solution +is to put something like the following line into /etc/system and +reboot the system. + +set shmsys:shminfo_shmmax=0x7fffffff + +Excellent info regarding shared memory under Solaris can be found here: +http://www.sunworld.com/swol-09-1997/swol-09-insidesolaris.html + + + + +1.4) Why am I getting "Can't tell what username to use" errors + when I try to run initdb? + +Put something like this into the .bash_profile startup script +of the postgres user (see also step 17 in the INSTALL file): + +export USER=postgres + + + + + + + + + +---------------------------------------------------------------------- +Section A: Contributors +---------------------------------------------------------------------- + +- Jose Luis Rodriguez Garcia + Suggested to change the shmmax parameter in 1.3 from 0xffffffff to 0x7fffffff + because the value is a signed integer in Solaris versions prior to 2.6. + + + +</PRE> + -- GitLab