good, you'll have to ram them down people's throats." -- Howard Aiken
+From owner-pgsql-hackers@hub.org Tue Oct 19 10:31:10 1999
+Received: from renoir.op.net (root@renoir.op.net [209.152.193.4])
+ by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id KAA29087
+ for <maillist@candle.pha.pa.us>; Tue, 19 Oct 1999 10:31:08 -0400 (EDT)
+Received: from hub.org (hub.org [216.126.84.1]) by renoir.op.net (o1/$Revision: 1.2 $) with ESMTP id KAA27535 for <maillist@candle.pha.pa.us>; Tue, 19 Oct 1999 10:19:47 -0400 (EDT)
+Received: from localhost (majordom@localhost)
+ by hub.org (8.9.3/8.9.3) with SMTP id KAA30328;
+ Tue, 19 Oct 1999 10:12:10 -0400 (EDT)
+ (envelope-from owner-pgsql-hackers)
+Received: by hub.org (bulk_mailer v1.5); Tue, 19 Oct 1999 10:11:55 -0400
+Received: (from majordom@localhost)
+ by hub.org (8.9.3/8.9.3) id KAA30030
+ for pgsql-hackers-outgoing; Tue, 19 Oct 1999 10:11:00 -0400 (EDT)
+ (envelope-from owner-pgsql-hackers@postgreSQL.org)
+Received: from sss.sss.pgh.pa.us (sss.pgh.pa.us [209.114.166.2])
+ by hub.org (8.9.3/8.9.3) with ESMTP id KAA29914
+ for <pgsql-hackers@postgreSQL.org>; Tue, 19 Oct 1999 10:10:33 -0400 (EDT)
+ (envelope-from tgl@sss.pgh.pa.us)
+Received: from sss.sss.pgh.pa.us (localhost [127.0.0.1])
+ by sss.sss.pgh.pa.us (8.9.1/8.9.1) with ESMTP id KAA09038;
+ Tue, 19 Oct 1999 10:09:15 -0400 (EDT)
+To: "Hiroshi Inoue" <Inoue@tpf.co.jp>
+cc: "Vadim Mikheev" <vadim@krs.ru>, pgsql-hackers@postgreSQL.org
+Subject: Re: [HACKERS] mdnblocks is an amazing time sink in huge relations
+In-reply-to: Your message of Tue, 19 Oct 1999 19:03:22 +0900
+ <000801bf1a19$2d88ae20$2801007e@cadzone.tpf.co.jp>
+Date: Tue, 19 Oct 1999 10:09:15 -0400
+Message-ID: <9036.940342155@sss.pgh.pa.us>
+From: Tom Lane <tgl@sss.pgh.pa.us>
+Sender: owner-pgsql-hackers@postgreSQL.org
+Status: OR
+
+"Hiroshi Inoue" <Inoue@tpf.co.jp> writes:
+> 1. shared cache holds committed system tuples.
+> 2. private cache holds uncommitted system tuples.
+> 3. relpages of shared cache are updated immediately by
+> phisical change and corresponding buffer pages are
+> marked dirty.
+> 4. on commit, the contents of uncommitted tuples except
+> relpages,reltuples,... are copied to correponding tuples
+> in shared cache and the combined contents are
+> committed.
+> If so,catalog cache invalidation would be no longer needed.
+> But synchronization of the step 4. may be difficult.
+
+I think the main problem is that relpages and reltuples shouldn't
+be kept in pg_class columns at all, because they need to have
+very different update behavior from the other pg_class columns.
+
+The rest of pg_class is update-on-commit, and we can lock down any one
+row in the normal MVCC way (if transaction A has modified a row and
+transaction B also wants to modify it, B waits for A to commit or abort,
+so it can know which version of the row to start from). Furthermore,
+there can legitimately be several different values of a row in use in
+different places: the latest committed, an uncommitted modification, and
+one or more old values that are still being used by active transactions
+because they were current when those transactions started. (BTW, the
+present relcache is pretty bad about maintaining pure MVCC transaction
+semantics like this, but it seems clear to me that that's the direction
+we want to go in.)
+
+relpages cannot operate this way. To be useful for avoiding lseeks,
+relpages *must* change exactly when the physical file changes. It
+matters not at all whether the particular transaction that extended the
+file ultimately commits or not. Moreover there can be only one correct
+value (per relation) across the whole system, because there is only one
+length of the relation file.
+
+If we want to take reltuples seriously and try to maintain it
+on-the-fly, then I think it needs still a third behavior. Clearly
+it cannot be updated using MVCC rules, or we lose all writer
+concurrency (if A has added tuples to a rel, B would have to wait
+for A to commit before it could update reltuples...). Furthermore
+"updating" isn't a simple matter of storing what you think the new
+value is; otherwise two transactions adding tuples in parallel would
+leave the wrong answer after B commits and overwrites A's value.
+I think it would work for each transaction to keep track of a net delta
+in reltuples for each table it's changed (total tuples added less total
+tuples deleted), and then atomically add that value to the table's
+shared reltuples counter during commit. But that still leaves the
+problem of how you use the counter during a transaction to get an
+accurate answer to the question "If I scan this table now, how many tuples
+will I see?" At the time the question is asked, the current shared
+counter value might include the effects of transactions that have
+committed since your transaction started, and therefore are not visible
+under MVCC rules. I think getting the correct answer would involve
+making an instantaneous copy of the current counter at the start of
+your xact, and then adding your own private net-uncommitted-delta to
+the saved shared counter value when asked the question. This doesn't
+look real practical --- you'd have to save the reltuples counts of
+*all* tables in the database at the start of each xact, on the off
+chance that you might need them. Ugh. Perhaps someone has a better
+idea. In any case, reltuples clearly needs different mechanisms than
+the ordinary fields in pg_class do, because updating it will be a
+performance bottleneck otherwise.
+
+If we allow reltuples to be updated only by vacuum-like events, as
+it is now, then I think keeping it in pg_class is still OK.
+
+In short, it seems clear to me that relpages should be removed from
+pg_class and kept somewhere else if we want to make it more reliable
+than it is now, and the same for reltuples (but reltuples doesn't
+behave the same as relpages, and probably ought to be handled
+differently).
+
+ regards, tom lane
+
+************
+
+From owner-pgsql-hackers@hub.org Tue Oct 19 21:25:30 1999
+Received: from renoir.op.net (root@renoir.op.net [209.152.193.4])
+ by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id VAA28130
+ for <maillist@candle.pha.pa.us>; Tue, 19 Oct 1999 21:25:26 -0400 (EDT)
+Received: from hub.org (hub.org [216.126.84.1]) by renoir.op.net (o1/$Revision: 1.2 $) with ESMTP id VAA10512 for <maillist@candle.pha.pa.us>; Tue, 19 Oct 1999 21:15:28 -0400 (EDT)
+Received: from localhost (majordom@localhost)
+ by hub.org (8.9.3/8.9.3) with SMTP id VAA50745;
+ Tue, 19 Oct 1999 21:07:23 -0400 (EDT)
+ (envelope-from owner-pgsql-hackers)
+Received: by hub.org (bulk_mailer v1.5); Tue, 19 Oct 1999 21:07:01 -0400
+Received: (from majordom@localhost)
+ by hub.org (8.9.3/8.9.3) id VAA50644
+ for pgsql-hackers-outgoing; Tue, 19 Oct 1999 21:06:06 -0400 (EDT)
+ (envelope-from owner-pgsql-hackers@postgreSQL.org)
+Received: from sd.tpf.co.jp (sd.tpf.co.jp [210.161.239.34])
+ by hub.org (8.9.3/8.9.3) with ESMTP id VAA50584
+ for <pgsql-hackers@postgreSQL.org>; Tue, 19 Oct 1999 21:05:26 -0400 (EDT)
+ (envelope-from Inoue@tpf.co.jp)
+Received: from cadzone ([126.0.1.40] (may be forged))
+ by sd.tpf.co.jp (2.5 Build 2640 (Berkeley 8.8.6)/8.8.4) with SMTP
+ id KAA01715; Wed, 20 Oct 1999 10:05:14 +0900
+From: "Hiroshi Inoue" <Inoue@tpf.co.jp>
+To: "Tom Lane" <tgl@sss.pgh.pa.us>
+Cc: <pgsql-hackers@postgreSQL.org>
+Subject: RE: [HACKERS] mdnblocks is an amazing time sink in huge relations
+Date: Wed, 20 Oct 1999 10:09:13 +0900
+Message-ID: <000501bf1a97$b925a860$2801007e@cadzone.tpf.co.jp>
+MIME-Version: 1.0
+Content-Type: text/plain;
+ charset="iso-8859-1"
+Content-Transfer-Encoding: 7bit
+X-Priority: 3 (Normal)
+X-MSMail-Priority: Normal
+X-Mailer: Microsoft Outlook 8.5, Build 4.71.2173.0
+X-Mimeole: Produced By Microsoft MimeOLE V4.72.2106.4
+Importance: Normal
+Sender: owner-pgsql-hackers@postgreSQL.org
+Status: ORr
+
+> -----Original Message-----
+> From: Hiroshi Inoue [mailto:Inoue@tpf.co.jp]
+> Sent: Tuesday, October 19, 1999 6:45 PM
+> To: Tom Lane
+> Cc: pgsql-hackers@postgreSQL.org
+> Subject: RE: [HACKERS] mdnblocks is an amazing time sink in huge
+> relations
+>
+>
+> >
+> > "Hiroshi Inoue" <Inoue@tpf.co.jp> writes:
+>
+> [snip]
+>
+> >
+> > > Deletion is necessary only not to consume disk space.
+> > >
+> > > For example vacuum could remove not deleted files.
+> >
+> > Hmm ... interesting idea ... but I can hear the complaints
+> > from users already...
+> >
+>
+> My idea is only an analogy of PostgreSQL's simple recovery
+> mechanism of tuples.
+>
+> And my main point is
+> "delete fails after commit" doesn't harm the database
+> except that not deleted files consume disk space.
+>
+> Of cource,it's preferable to delete relation files immediately
+> after(or just when) commit.
+> Useless files are visible though useless tuples are invisible.
+>
+
+Anyway I don't need "DROP TABLE inside transactions" now
+and my idea is originally for that issue.
+
+After a thought,I propose the following solution.
+
+1. mdcreate() couldn't create existent relation files.
+ If the existent file is of length zero,we would overwrite
+ the file.(seems the comment in md.c says so but the
+ code doesn't do so).
+ If the file is an Index relation file,we would overwrite
+ the file.
+
+2. mdunlink() couldn't unlink non-existent relation files.
+ mdunlink() doesn't call elog(ERROR) even if the file
+ doesn't exist,though I couldn't find where to change
+ now.
+ mdopen() doesn't call elog(ERROR) even if the file
+ doesn't exist and leaves the relation as CLOSED.
+
+Comments ?
+
+Regards.
+
+Hiroshi Inoue
+Inoue@tpf.co.jp
+
+************
+
<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.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>
+<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>
+<A HREF="#1.15">1.15</A>) What are the maximum size limits?
<H2><CENTER>User Client Questions</CENTER></H2>
-<A HREF="#2.1">2.1</A>) Are there ODBC drivers for
+<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
+<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 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
+<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
+<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
+<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
+<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
+<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
+<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
+<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
+<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
+<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
+<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
+<A HREF="#3.13">3.13</A>) What are the pg_psort.XXX files in my
database directory?<BR>
-<A HREF="#3.14">3.14</A>) How do I set up a pg_group?<BR>
<H2><CENTER>Operational Questions</CENTER></H2>
-<A HREF="#4.1">4.1</A>) The system seems to be confused about commas,
+<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
+<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 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
+<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.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
+<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
+<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
+<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
+<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
+<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.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
+<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
+<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
+<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>) Wouldn't use of currval() and nextval() lead to a race condition with other concurrent backend processes?<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>) Wouldn't use of 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
+<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
+<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
+<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
+<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>
<H2><CENTER>Extending PostgreSQL</CENTER></H2>
-<A HREF="#5.1">5.1</A>) I wrote a user-defined function. When I run
+<A HREF="#5.1">5.1</A>) I wrote a user-defined function. When I run
it in <I>psql,</I> why does it dumps core?<BR>
-<A HREF="#5.2">5.2</A>) What does the message:
+<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
+<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
+<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
+<A HREF="#5.5">5.5</A>) I have changed a source file. Why does the
recompile does not see the change?<BR>
<H2><CENTER>General Questions</CENTER></H2>
<H4><A
-NAME="1.1">1.1</A>) What is PostgreSQL?</H4><P>
+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
It is pronounced <I>Post-Gres-Q-L.</I>
-<H4><A NAME="1.2">1.2</A>) What's the copyright on
+<H4><A NAME="1.2">1.2</A>) What's the copyright on
PostgreSQL?</H4><P>
PostgreSQL is subject to the following COPYRIGHT.<P>
-<H4><A NAME="1.3">1.3</A>) What Unix platforms does PostgreSQL run
+<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
</UL>
<P>
-<H4><A NAME="1.4">1.4</A>) What non-unix ports are available?</H4><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,
"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>
+<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>
+<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>
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>
+<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.<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>
+<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
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><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>
+<H4><A NAME="1.10">1.10</A>) How can I learn SQL?</H4><P>
There is a nice tutorial at <A
HREF="http://w3.one.net/~jhoffman/sqltut.htm">
Osborne McGraw-Hill.<P>
-<H4><A NAME="1.11">1.11</A>) Is PostgreSQL Y2K compliant?</H4><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>
+<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.
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>
+<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>
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
+<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,
in our BSD-style license stated above.<BR><BR>
</DL>
+<H4><A NAME="1.14">1.14</A>) What are the maximum size limits?</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
+Maximun number of indexes on a table? unlimited
+</PRE>
+The row length limit will be removed in 7.1.<P>
<HR>
-<H4><A NAME="2.1">2.1</A>) Are there ODBC drivers for PostgreSQL?</H4><P>
+<H4><A NAME="2.1">2.1</A>) Are there ODBC drivers for PostgreSQL?</H4><P>
There are two ODBC drivers available, PostODBC and OpenLink ODBC.<P>
-<H4><A NAME="2.2">2.2</A>) What tools are available for hooking
+<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
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?
+<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
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
+<H4><A NAME="2.4">2.4</A>) What languages are available to
communicate with PostgreSQL?</H4><P>
We have:
<H2><CENTER>Administrative Questions</CENTER></H2><P>
-<H4><A NAME="3.1">3.1</A>) Why does initdb fail?</H4><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
</UL><P>
-<H4><A NAME="3.2">3.2</A>) How do I install PostgreSQL somewhere
+<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.
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
+<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
kernel support for shared memory and semaphores.<P>
-<H4><A NAME="3.4">3.4</A>) When I try to start the postmaster, I
+<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
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
+<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
support configured in your kernel at all.<P>
-<H4><A NAME="3.6">3.6</A>) How do I prevent other hosts from
+<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
<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
+<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
<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>
+<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
database engine.<P>
-<H4><A NAME="3.9">3.9</A>) All my servers crash under concurrent
+<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
+<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
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
+<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
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
+<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
crashes during a sort. If you have no transactions running at the time,
it is safe to delete the pg_tempNNN.NN files.<P>
-<H4><A NAME="3.14">3.14</A>) How do I set up a pg_group?</H4><P>
-
-Currently, there is no easy interface to set up user groups. You have to
-explicitly insert/update the pg_group table. For example:
-
-<PRE>
- 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=>
-</PRE><P>
-
- The fields in pg_group are:
-<UL>
-<LI>groname: the group name. This a name and should
-be purely alphanumeric. Do not include underscores
-or other punctuation.
-<LI>grosysid: the group id. This is an int4.
-This should be unique for each group.
-<LI>grolist: the list of pg_user id's that belong in the group.
-This is an int4[].
-</UL><P>
-
-
<HR>
<H2><CENTER>Operational Questions</CENTER></H2><P>
-<H4><A NAME="4.1">4.1</A>) The system seems to be confused about
+<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
your operating environment.<P>
-<H4><A NAME="4.2">4.2</A>) What is the exact difference between
+<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
+<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>
to execute the commands you give.<P>
-<H4><A NAME="4.5">4.5</A>) How do you remove a column from a
+<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
-<H4><A NAME="4.6">4.6</A>) What is the maximum size for a
+<H4><A NAME="4.6">4.6</A>) What is the maximum size for a
row, table, database?</H4><P>
Rows are limited to 8K bytes, but this can be changed by editing
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
+<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
the database system tables.<P>
-<H4><A NAME="4.9">4.9</A>) My queries are slow or don't make
+<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
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
+<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>
+<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
documentation on how to do it.<P>
-<H4><A NAME="4.12">4.12</A>) What is Genetic Query
+<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
-<H4><A NAME="4.13">4.13</A>) How do I do regular expression searches and
+<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>
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
+<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
+<H4><A NAME="4.15">4.15</A>) What is the difference between the
various character types?</H4>
<PRE>
first column of this type.<P>
-<H4><A NAME="4.16.1">4.16.1</A>) How do I create a
+<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
For more details, see Bruce Momjian's chapter on
<A HREF="http://www.postgresql.org/docs/aw_pgsql_book/node74.html">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>
+<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');
</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>) Wouldn't use of currval() and nextval() lead to a race condition with other concurrent backend processes?</H4><P>
+<H4><A NAME="4.16.3">4.16.3</A>) Wouldn't use of 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>
+<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
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
+<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
<H2><CENTER>Extending PostgreSQL</CENTER></H2><P>
-<H4><A NAME="5.1">5.1</A>) I wrote a user-defined function. When
+<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:
+<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
+<H4><A NAME="5.3">5.3</A>) How can I contribute some nifty new types and
functions for PostgreSQL?</H4><P>
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
+<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
+<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