mirror of
https://github.com/postgres/postgres.git
synced 2025-06-04 00:02:37 -04:00
Remove unused TODO.detail files.
This commit is contained in:
parent
c229f7d2ab
commit
e799f19f0c
@ -1,317 +0,0 @@
|
|||||||
From owner-pgsql-hackers@hub.org Fri May 14 16:00:46 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 QAA02173
|
|
||||||
for <maillist@candle.pha.pa.us>; Fri, 14 May 1999 16:00:44 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [209.167.229.1]) by renoir.op.net (o1/$ Revision: 1.18 $) with ESMTP id QAA02824 for <maillist@candle.pha.pa.us>; Fri, 14 May 1999 16:00:45 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [209.167.229.1])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id PAA47798;
|
|
||||||
Fri, 14 May 1999 15:57:54 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-hackers@hub.org)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Fri, 14 May 1999 15:54:30 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost)
|
|
||||||
by hub.org (8.9.3/8.9.3) id PAA47191
|
|
||||||
for pgsql-hackers-outgoing; Fri, 14 May 1999 15:54:28 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-hackers@postgreSQL.org)
|
|
||||||
Received: from thelab.hub.org (nat194.147.mpoweredpc.net [142.177.194.147])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id PAA46457
|
|
||||||
for <pgsql-hackers@postgresql.org>; Fri, 14 May 1999 15:49:35 -0400 (EDT)
|
|
||||||
(envelope-from scrappy@hub.org)
|
|
||||||
Received: from localhost (scrappy@localhost)
|
|
||||||
by thelab.hub.org (8.9.3/8.9.1) with ESMTP id QAA16128;
|
|
||||||
Fri, 14 May 1999 16:49:44 -0300 (ADT)
|
|
||||||
(envelope-from scrappy@hub.org)
|
|
||||||
X-Authentication-Warning: thelab.hub.org: scrappy owned process doing -bs
|
|
||||||
Date: Fri, 14 May 1999 16:49:44 -0300 (ADT)
|
|
||||||
From: The Hermit Hacker <scrappy@hub.org>
|
|
||||||
To: pgsql-hackers@postgreSQL.org
|
|
||||||
cc: Jack Howarth <howarth@nitro.med.uc.edu>
|
|
||||||
Subject: [HACKERS] postgresql bug report (fwd)
|
|
||||||
Message-ID: <Pine.BSF.4.05.9905141649150.47191-100000@thelab.hub.org>
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: TEXT/PLAIN; charset=US-ASCII
|
|
||||||
Sender: owner-pgsql-hackers@postgreSQL.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: ROr
|
|
||||||
|
|
||||||
|
|
||||||
Marc G. Fournier ICQ#7615664 IRC Nick: Scrappy
|
|
||||||
Systems Administrator @ hub.org
|
|
||||||
primary: scrappy@hub.org secondary: scrappy@{freebsd|postgresql}.org
|
|
||||||
|
|
||||||
---------- Forwarded message ----------
|
|
||||||
Date: Fri, 14 May 1999 14:50:58 -0400
|
|
||||||
From: Jack Howarth <howarth@nitro.med.uc.edu>
|
|
||||||
To: scrappy@hub.org
|
|
||||||
Subject: postgresql bug report
|
|
||||||
|
|
||||||
Marc,
|
|
||||||
In porting the RedHat 6.0 srpm set for a linuxppc release we
|
|
||||||
believe a bug has been identified in
|
|
||||||
the postgresql source for 6.5-0.beta1. Our development tools are as
|
|
||||||
follows...
|
|
||||||
|
|
||||||
glibc 2.1.1 pre 2
|
|
||||||
linux 2.2.6
|
|
||||||
egcs 1.1.2
|
|
||||||
the latest binutils snapshot
|
|
||||||
|
|
||||||
The bug that we see is that when egcs compiles postgresql at -O1 or
|
|
||||||
higher (-O0 is fine),
|
|
||||||
postgresql creates incorrectly formed databases such that when the user
|
|
||||||
does a destroydb
|
|
||||||
the database can not be destroyed. Franz Sirl has identified the problem
|
|
||||||
as follows...
|
|
||||||
|
|
||||||
it seems that this problem is a type casting/promotion bug in the
|
|
||||||
source. The
|
|
||||||
routine _bt_checkkeys() in backend/access/nbtree/nbtutils.c calls
|
|
||||||
int2eq() in
|
|
||||||
backend/utils/adt/int.c via a function pointer
|
|
||||||
*fmgr_faddr(&key[0].sk_func). As
|
|
||||||
the type information for int2eq is lost via the function pointer,
|
|
||||||
the compiler
|
|
||||||
passes 2 ints, but int2eq expects 2 (preformatted in a 32bit reg)
|
|
||||||
int16's.
|
|
||||||
This particular bug goes away, if I for example change int2eq to:
|
|
||||||
|
|
||||||
bool
|
|
||||||
int2eq(int32 arg1, int32 arg2)
|
|
||||||
{
|
|
||||||
return (int16)arg1 == (int16)arg2;
|
|
||||||
}
|
|
||||||
|
|
||||||
This moves away the type casting/promotion "work" from caller to the
|
|
||||||
callee and
|
|
||||||
is probably the right thing to do for functions used via function
|
|
||||||
pointers.
|
|
||||||
|
|
||||||
...because of the large number of changes required to do this, Franz
|
|
||||||
thought we should
|
|
||||||
pass this on to the postgresql maintainers for correction. Please feel
|
|
||||||
free to contact
|
|
||||||
Franz Sirl (Franz.Sirl-kernel@lauterbach.com) if you have any questions
|
|
||||||
on this bug
|
|
||||||
report.
|
|
||||||
|
|
||||||
--
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
Jack W. Howarth, Ph.D. 231 Bethesda Avenue
|
|
||||||
NMR Facility Director Cincinnati, Ohio 45267-0524
|
|
||||||
Dept. of Molecular Genetics phone: (513) 558-4420
|
|
||||||
Univ. of Cincinnati College of Medicine fax: (513) 558-8474
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
From gatgul@voicenet.com Thu Jul 22 21:58:42 1999
|
|
||||||
Received: from voicenet.com (mail12.voicenet.com [207.103.0.6])
|
|
||||||
by candle.pha.pa.us (8.9.0/8.9.0) with SMTP id VAA20482
|
|
||||||
for <maillist@candle.pha.pa.us>; Thu, 22 Jul 1999 21:58:39 -0400 (EDT)
|
|
||||||
Received: (qmail 17312 invoked from network); 23 Jul 1999 01:58:33 -0000
|
|
||||||
Received: from dialpool1745.voicenet.com (HELO voicenet.com) (209.71.57.45)
|
|
||||||
by mail12.voicenet.com with SMTP; 23 Jul 1999 01:58:33 -0000
|
|
||||||
Sender: gat
|
|
||||||
Message-ID: <3797CB70.7554322B@voicenet.com>
|
|
||||||
Date: Thu, 22 Jul 1999 21:54:56 -0400
|
|
||||||
From: Uncle George <gatgul@voicenet.com>
|
|
||||||
Organization: Big Endian
|
|
||||||
X-Mailer: Mozilla 4.07 [en] (X11; I; Linux 2.0.36 i686)
|
|
||||||
MIME-Version: 1.0
|
|
||||||
To: Bruce Momjian <maillist@candle.pha.pa.us>
|
|
||||||
Subject: Re: [PORTS] RedHat6.0 & Alpha
|
|
||||||
References: <199907221830.OAA06403@candle.pha.pa.us>
|
|
||||||
Content-Type: multipart/mixed; boundary="------------8DF2D5BA86BB12328C66DD16"
|
|
||||||
Status: ROr
|
|
||||||
|
|
||||||
This is a multi-part message in MIME format.
|
|
||||||
--------------8DF2D5BA86BB12328C66DD16
|
|
||||||
Content-Type: text/plain; charset=us-ascii
|
|
||||||
Content-Transfer-Encoding: 7bit
|
|
||||||
|
|
||||||
Bruce Momjian wrote:
|
|
||||||
|
|
||||||
>
|
|
||||||
> Can I now put back optimization to -O2 on alpha? Please send me your
|
|
||||||
> other diffs.
|
|
||||||
>
|
|
||||||
|
|
||||||
--------------8DF2D5BA86BB12328C66DD16
|
|
||||||
Content-Type: application/octet-stream; name="g.gz"
|
|
||||||
Content-Transfer-Encoding: base64
|
|
||||||
Content-Disposition: attachment; filename="g.gz"
|
|
||||||
|
|
||||||
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
|
|
||||||
/wOU7Ogc2/cAAA==
|
|
||||||
--------------8DF2D5BA86BB12328C66DD16--
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,59 +0,0 @@
|
|||||||
From tgl@sss.pgh.pa.us Sun May 23 18:59:22 1999
|
|
||||||
Received: from sss.sss.pgh.pa.us (sss.pgh.pa.us [206.210.65.6])
|
|
||||||
by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id SAA08491
|
|
||||||
for <maillist@candle.pha.pa.us>; Sun, 23 May 1999 18:59:21 -0400 (EDT)
|
|
||||||
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 SAA27952;
|
|
||||||
Sun, 23 May 1999 18:58:53 -0400 (EDT)
|
|
||||||
To: Bruce Momjian <maillist@candle.pha.pa.us>
|
|
||||||
cc: PostgreSQL-development <pgsql-hackers@postgreSQL.org>
|
|
||||||
Subject: Re: [HACKERS] DEFAULT fixed
|
|
||||||
In-reply-to: Your message of Sat, 22 May 1999 21:12:19 -0400 (EDT)
|
|
||||||
<199905230112.VAA13489@candle.pha.pa.us>
|
|
||||||
Date: Sun, 23 May 1999 18:58:52 -0400
|
|
||||||
Message-ID: <27950.927500332@sss.pgh.pa.us>
|
|
||||||
From: Tom Lane <tgl@sss.pgh.pa.us>
|
|
||||||
Status: ROr
|
|
||||||
|
|
||||||
Actually, it's not as fixed as all that...
|
|
||||||
|
|
||||||
create table foo1 (a char(5) default '', b int4);
|
|
||||||
insert into foo1 (b) values (334);
|
|
||||||
select * from foo1;
|
|
||||||
a | b
|
|
||||||
-----+---
|
|
||||||
|334
|
|
||||||
(1 row)
|
|
||||||
|
|
||||||
Good, the basic case is fixed, but:
|
|
||||||
|
|
||||||
create table foo2 (a char(5) default text '', b int4);
|
|
||||||
insert into foo2 (b) values (334);
|
|
||||||
select * from foo2;
|
|
||||||
a| b
|
|
||||||
-+--
|
|
||||||
|16
|
|
||||||
(1 row)
|
|
||||||
|
|
||||||
Ooops.
|
|
||||||
|
|
||||||
What you seem to have done is twiddle the handling of DEFAULT clauses
|
|
||||||
so that the value stored for the default expression is pre-coerced to the
|
|
||||||
column type. That's good as far as it goes, but it fails in cases where
|
|
||||||
the stored value has to be of a different type.
|
|
||||||
|
|
||||||
My guess is that what *really* ought to happen here is that
|
|
||||||
transformInsertStmt should check the type of the value it's gotten from
|
|
||||||
the default clause and apply coerce_type if necessary.
|
|
||||||
|
|
||||||
Unless someone can come up with a less artificial example than the one
|
|
||||||
above, I'm inclined to leave it alone for 6.5. This is the same code
|
|
||||||
area that will have to be redone to fix the INSERT ... SELECT problem
|
|
||||||
I was chasing earlier today: coercion of the values produced by SELECT
|
|
||||||
will have to wait until the tail end of transformInsertStmt, and we
|
|
||||||
might as well make wrong-type default constants get fixed in the same
|
|
||||||
place. So I'm not eager to write some throwaway code to patch a problem
|
|
||||||
that no one is likely to see in practice. What's your feeling about it?
|
|
||||||
|
|
||||||
regards, tom lane
|
|
||||||
|
|
@ -1,483 +0,0 @@
|
|||||||
From owner-pgsql-sql@hub.org Sat Jul 10 16:31:14 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 QAA03701
|
|
||||||
for <maillist@candle.pha.pa.us>; Sat, 10 Jul 1999 16:31:13 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [209.167.229.1]) by renoir.op.net (o1/$ Revision: 1.18 $) with ESMTP id QAA10295 for <maillist@candle.pha.pa.us>; Sat, 10 Jul 1999 16:29:57 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [209.167.229.1])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id QAA13874;
|
|
||||||
Sat, 10 Jul 1999 16:23:11 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-sql@hub.org)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Sat, 10 Jul 1999 16:21:15 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost)
|
|
||||||
by hub.org (8.9.3/8.9.3) id QAA13331
|
|
||||||
for pgsql-sql-outgoing; Sat, 10 Jul 1999 16:21:14 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-sql@postgreSQL.org)
|
|
||||||
X-Authentication-Warning: hub.org: majordom set sender to owner-pgsql-sql@postgreSQL.org using -f
|
|
||||||
Received: from ra.sai.msu.su (ra.sai.msu.su [158.250.29.2])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id QAA13055;
|
|
||||||
Sat, 10 Jul 1999 16:16:42 -0400 (EDT)
|
|
||||||
(envelope-from oleg@sai.msu.su)
|
|
||||||
Received: from ra (ra [158.250.29.2])
|
|
||||||
by ra.sai.msu.su (8.9.1/8.9.1) with SMTP id AAA06017;
|
|
||||||
Sun, 11 Jul 1999 00:16:40 +0400 (MSD)
|
|
||||||
Date: Sun, 11 Jul 1999 00:16:39 +0400 (MSD)
|
|
||||||
From: Oleg Bartunov <oleg@sai.msu.su>
|
|
||||||
X-Sender: megera@ra
|
|
||||||
Reply-To: Oleg Bartunov <oleg@sai.msu.su>
|
|
||||||
To: hackers@postgreSQL.org
|
|
||||||
cc: pgsql-sql@postgreSQL.org
|
|
||||||
Subject: [SQL] SELECT DISTINCT question
|
|
||||||
Message-ID: <Pine.GSO.3.96.SK.990711000908.2043R-100000@ra>
|
|
||||||
Organization: Sternberg Astronomical Institute (Moscow University)
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: TEXT/PLAIN; charset=US-ASCII
|
|
||||||
Sender: owner-pgsql-sql@postgreSQL.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
I got a problem with query:
|
|
||||||
|
|
||||||
select distinct (date), bytes from access_log;
|
|
||||||
|
|
||||||
which works but not as I expect. I thought this query will select
|
|
||||||
all rows with distinct values of 'date' column, but it get
|
|
||||||
distinct pairs 'date, bytes' . From documnetation I see
|
|
||||||
|
|
||||||
"DISTINCT will eliminate all duplicate rows from the selection.
|
|
||||||
DISTINCT ON column will eliminate all duplicates in the specified column;
|
|
||||||
this is equivalent to using GROUP BY column.
|
|
||||||
ALL will return all candidate rows, including duplicates."
|
|
||||||
|
|
||||||
discovery=> select distinct on date,bytes from access_log;
|
|
||||||
ERROR: parser: parse error at or near ","
|
|
||||||
|
|
||||||
Regards,
|
|
||||||
|
|
||||||
Oleg
|
|
||||||
_____________________________________________________________
|
|
||||||
Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
|
|
||||||
Sternberg Astronomical Institute, Moscow University (Russia)
|
|
||||||
Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
|
|
||||||
phone: +007(095)939-16-83, +007(095)939-23-83
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
From owner-pgsql-sql@hub.org Sat Jul 10 18:01:17 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 SAA04878
|
|
||||||
for <maillist@candle.pha.pa.us>; Sat, 10 Jul 1999 18:01:16 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [209.167.229.1]) by renoir.op.net (o1/$ Revision: 1.18 $) with ESMTP id RAA12755 for <maillist@candle.pha.pa.us>; Sat, 10 Jul 1999 17:35:02 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [209.167.229.1])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id RAA24997;
|
|
||||||
Sat, 10 Jul 1999 17:28:17 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-sql@hub.org)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Sat, 10 Jul 1999 17:23:39 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost)
|
|
||||||
by hub.org (8.9.3/8.9.3) id RAA24524
|
|
||||||
for pgsql-sql-outgoing; Sat, 10 Jul 1999 17:23:38 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-sql@postgreSQL.org)
|
|
||||||
X-Authentication-Warning: hub.org: majordom set sender to owner-pgsql-sql@postgreSQL.org using -f
|
|
||||||
Received: from sss.sss.pgh.pa.us (sss.pgh.pa.us [209.114.166.2] (may be forged))
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id RAA24227;
|
|
||||||
Sat, 10 Jul 1999 17:19:43 -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 RAA05709;
|
|
||||||
Sat, 10 Jul 1999 17:18:28 -0400 (EDT)
|
|
||||||
To: Oleg Bartunov <oleg@sai.msu.su>
|
|
||||||
cc: hackers@postgreSQL.org, pgsql-sql@postgreSQL.org
|
|
||||||
Subject: [SQL] Re: [HACKERS] SELECT DISTINCT question
|
|
||||||
In-reply-to: Your message of Sun, 11 Jul 1999 00:16:39 +0400 (MSD)
|
|
||||||
<Pine.GSO.3.96.SK.990711000908.2043R-100000@ra>
|
|
||||||
Date: Sat, 10 Jul 1999 17:18:28 -0400
|
|
||||||
Message-ID: <5707.931641508@sss.pgh.pa.us>
|
|
||||||
From: Tom Lane <tgl@sss.pgh.pa.us>
|
|
||||||
Sender: owner-pgsql-sql@postgreSQL.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
Oleg Bartunov <oleg@sai.msu.su> writes:
|
|
||||||
> discovery=> select distinct on date,bytes from access_log;
|
|
||||||
> ERROR: parser: parse error at or near ","
|
|
||||||
|
|
||||||
The syntax for SELECT DISTINCT ON is just as brain-damaged as the
|
|
||||||
functionality itself: there's no comma after the column name.
|
|
||||||
You want
|
|
||||||
|
|
||||||
select distinct on date date,bytes from access_log;
|
|
||||||
|
|
||||||
The reason the functionality is brain-damaged is that there's no way to
|
|
||||||
know which tuple out of the set of tuples with a given "date" value will
|
|
||||||
be the one returned.
|
|
||||||
|
|
||||||
SELECT DISTINCT ON is not in SQL92, and I think it shouldn't be in
|
|
||||||
Postgres either...
|
|
||||||
|
|
||||||
regards, tom lane
|
|
||||||
|
|
||||||
|
|
||||||
From owner-pgsql-sql@hub.org Sun Jul 11 12:01:23 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 MAA26263
|
|
||||||
for <maillist@candle.pha.pa.us>; Sun, 11 Jul 1999 12:01:22 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [209.167.229.1]) by renoir.op.net (o1/$ Revision: 1.18 $) with ESMTP id LAA14891 for <maillist@candle.pha.pa.us>; Sun, 11 Jul 1999 11:56:47 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [209.167.229.1])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id LAA09165;
|
|
||||||
Sun, 11 Jul 1999 11:51:27 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-sql@hub.org)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Sun, 11 Jul 1999 11:49:46 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost)
|
|
||||||
by hub.org (8.9.3/8.9.3) id LAA08263
|
|
||||||
for pgsql-sql-outgoing; Sun, 11 Jul 1999 11:49:45 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-sql@postgreSQL.org)
|
|
||||||
X-Authentication-Warning: hub.org: majordom set sender to owner-pgsql-sql@postgreSQL.org using -f
|
|
||||||
Received: from trends.net (root@clio.trends.ca [209.47.148.2])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id LAA05079;
|
|
||||||
Sun, 11 Jul 1999 11:41:38 -0400 (EDT)
|
|
||||||
(envelope-from oleg@sai.msu.su)
|
|
||||||
Received: from ra.sai.msu.su (ra.sai.msu.su [158.250.29.2])
|
|
||||||
by trends.net (8.8.8/8.8.8) with ESMTP id CAA21557;
|
|
||||||
Sun, 11 Jul 1999 02:23:01 -0400 (EDT)
|
|
||||||
Received: from ra (ra [158.250.29.2])
|
|
||||||
by ra.sai.msu.su (8.9.1/8.9.1) with SMTP id KAA18412;
|
|
||||||
Sun, 11 Jul 1999 10:09:24 +0400 (MSD)
|
|
||||||
Date: Sun, 11 Jul 1999 10:09:24 +0400 (MSD)
|
|
||||||
From: Oleg Bartunov <oleg@sai.msu.su>
|
|
||||||
X-Sender: megera@ra
|
|
||||||
To: Tom Lane <tgl@sss.pgh.pa.us>
|
|
||||||
cc: hackers@postgreSQL.org, pgsql-sql@postgreSQL.org
|
|
||||||
Subject: Re: [SQL] Re: [HACKERS] SELECT DISTINCT question
|
|
||||||
In-Reply-To: <5707.931641508@sss.pgh.pa.us>
|
|
||||||
Message-ID: <Pine.GSO.3.96.SK.990711100405.2043V-100000@ra>
|
|
||||||
Organization: Sternberg Astronomical Institute (Moscow University)
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: TEXT/PLAIN; charset=US-ASCII
|
|
||||||
Sender: owner-pgsql-sql@postgreSQL.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
On Sat, 10 Jul 1999, Tom Lane wrote:
|
|
||||||
|
|
||||||
> Date: Sat, 10 Jul 1999 17:18:28 -0400
|
|
||||||
> From: Tom Lane <tgl@sss.pgh.pa.us>
|
|
||||||
> To: Oleg Bartunov <oleg@sai.msu.su>
|
|
||||||
> Cc: hackers@postgreSQL.org, pgsql-sql@postgreSQL.org
|
|
||||||
> Subject: [SQL] Re: [HACKERS] SELECT DISTINCT question
|
|
||||||
>
|
|
||||||
> Oleg Bartunov <oleg@sai.msu.su> writes:
|
|
||||||
> > discovery=> select distinct on date,bytes from access_log;
|
|
||||||
> > ERROR: parser: parse error at or near ","
|
|
||||||
>
|
|
||||||
> The syntax for SELECT DISTINCT ON is just as brain-damaged as the
|
|
||||||
> functionality itself: there's no comma after the column name.
|
|
||||||
> You want
|
|
||||||
>
|
|
||||||
> select distinct on date date,bytes from access_log;
|
|
||||||
>
|
|
||||||
|
|
||||||
thanks, this works. But why parser complains about such query:
|
|
||||||
|
|
||||||
discovery=> select distinct on a.date a.date, a.bytes from access_log a;
|
|
||||||
ERROR: parser: parse error at or near "."
|
|
||||||
|
|
||||||
In this query I could just omit '.', but in more complex query
|
|
||||||
I probably could need one.
|
|
||||||
|
|
||||||
> The reason the functionality is brain-damaged is that there's no way to
|
|
||||||
> know which tuple out of the set of tuples with a given "date" value will
|
|
||||||
> be the one returned.
|
|
||||||
>
|
|
||||||
> SELECT DISTINCT ON is not in SQL92, and I think it shouldn't be in
|
|
||||||
> Postgres either...
|
|
||||||
|
|
||||||
|
|
||||||
I'm not an SQL expert, but if it works and this feature is in standard
|
|
||||||
but only syntax is diffrent, why just not to use standard
|
|
||||||
|
|
||||||
select distinct(date), bytes from access_log;
|
|
||||||
|
|
||||||
Or I'm missing here ?
|
|
||||||
|
|
||||||
|
|
||||||
Regards,
|
|
||||||
Oleg
|
|
||||||
>
|
|
||||||
> regards, tom lane
|
|
||||||
>
|
|
||||||
|
|
||||||
_____________________________________________________________
|
|
||||||
Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
|
|
||||||
Sternberg Astronomical Institute, Moscow University (Russia)
|
|
||||||
Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
|
|
||||||
phone: +007(095)939-16-83, +007(095)939-23-83
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
From owner-pgsql-hackers@hub.org Sun Jul 11 12:01:26 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 MAA26269
|
|
||||||
for <maillist@candle.pha.pa.us>; Sun, 11 Jul 1999 12:01:25 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [209.167.229.1]) by renoir.op.net (o1/$ Revision: 1.18 $) with ESMTP id LAA15017 for <maillist@candle.pha.pa.us>; Sun, 11 Jul 1999 11:59:07 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [209.167.229.1])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id LAA09118;
|
|
||||||
Sun, 11 Jul 1999 11:51:21 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-hackers@hub.org)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Sun, 11 Jul 1999 11:49:44 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost)
|
|
||||||
by hub.org (8.9.3/8.9.3) id LAA06345
|
|
||||||
for pgsql-hackers-outgoing; Sun, 11 Jul 1999 11:46:14 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-hackers@postgreSQL.org)
|
|
||||||
X-Authentication-Warning: hub.org: majordom set sender to owner-pgsql-hackers@postgreSQL.org using -f
|
|
||||||
Received: from trends.net (root@clio.trends.ca [209.47.148.2])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id LAA05079;
|
|
||||||
Sun, 11 Jul 1999 11:41:38 -0400 (EDT)
|
|
||||||
(envelope-from oleg@sai.msu.su)
|
|
||||||
Received: from ra.sai.msu.su (ra.sai.msu.su [158.250.29.2])
|
|
||||||
by trends.net (8.8.8/8.8.8) with ESMTP id CAA21557;
|
|
||||||
Sun, 11 Jul 1999 02:23:01 -0400 (EDT)
|
|
||||||
Received: from ra (ra [158.250.29.2])
|
|
||||||
by ra.sai.msu.su (8.9.1/8.9.1) with SMTP id KAA18412;
|
|
||||||
Sun, 11 Jul 1999 10:09:24 +0400 (MSD)
|
|
||||||
Date: Sun, 11 Jul 1999 10:09:24 +0400 (MSD)
|
|
||||||
From: Oleg Bartunov <oleg@sai.msu.su>
|
|
||||||
X-Sender: megera@ra
|
|
||||||
To: Tom Lane <tgl@sss.pgh.pa.us>
|
|
||||||
cc: hackers@postgreSQL.org, pgsql-sql@postgreSQL.org
|
|
||||||
Subject: Re: [SQL] Re: [HACKERS] SELECT DISTINCT question
|
|
||||||
In-Reply-To: <5707.931641508@sss.pgh.pa.us>
|
|
||||||
Message-ID: <Pine.GSO.3.96.SK.990711100405.2043V-100000@ra>
|
|
||||||
Organization: Sternberg Astronomical Institute (Moscow University)
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: TEXT/PLAIN; charset=US-ASCII
|
|
||||||
Sender: owner-pgsql-hackers@postgreSQL.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
On Sat, 10 Jul 1999, Tom Lane wrote:
|
|
||||||
|
|
||||||
> Date: Sat, 10 Jul 1999 17:18:28 -0400
|
|
||||||
> From: Tom Lane <tgl@sss.pgh.pa.us>
|
|
||||||
> To: Oleg Bartunov <oleg@sai.msu.su>
|
|
||||||
> Cc: hackers@postgreSQL.org, pgsql-sql@postgreSQL.org
|
|
||||||
> Subject: [SQL] Re: [HACKERS] SELECT DISTINCT question
|
|
||||||
>
|
|
||||||
> Oleg Bartunov <oleg@sai.msu.su> writes:
|
|
||||||
> > discovery=> select distinct on date,bytes from access_log;
|
|
||||||
> > ERROR: parser: parse error at or near ","
|
|
||||||
>
|
|
||||||
> The syntax for SELECT DISTINCT ON is just as brain-damaged as the
|
|
||||||
> functionality itself: there's no comma after the column name.
|
|
||||||
> You want
|
|
||||||
>
|
|
||||||
> select distinct on date date,bytes from access_log;
|
|
||||||
>
|
|
||||||
|
|
||||||
thanks, this works. But why parser complains about such query:
|
|
||||||
|
|
||||||
discovery=> select distinct on a.date a.date, a.bytes from access_log a;
|
|
||||||
ERROR: parser: parse error at or near "."
|
|
||||||
|
|
||||||
In this query I could just omit '.', but in more complex query
|
|
||||||
I probably could need one.
|
|
||||||
|
|
||||||
> The reason the functionality is brain-damaged is that there's no way to
|
|
||||||
> know which tuple out of the set of tuples with a given "date" value will
|
|
||||||
> be the one returned.
|
|
||||||
>
|
|
||||||
> SELECT DISTINCT ON is not in SQL92, and I think it shouldn't be in
|
|
||||||
> Postgres either...
|
|
||||||
|
|
||||||
|
|
||||||
I'm not an SQL expert, but if it works and this feature is in standard
|
|
||||||
but only syntax is diffrent, why just not to use standard
|
|
||||||
|
|
||||||
select distinct(date), bytes from access_log;
|
|
||||||
|
|
||||||
Or I'm missing here ?
|
|
||||||
|
|
||||||
|
|
||||||
Regards,
|
|
||||||
Oleg
|
|
||||||
>
|
|
||||||
> regards, tom lane
|
|
||||||
>
|
|
||||||
|
|
||||||
_____________________________________________________________
|
|
||||||
Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
|
|
||||||
Sternberg Astronomical Institute, Moscow University (Russia)
|
|
||||||
Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
|
|
||||||
phone: +007(095)939-16-83, +007(095)939-23-83
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
From owner-pgsql-sql@hub.org Sun Jul 11 12:01:16 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 MAA26248
|
|
||||||
for <maillist@candle.pha.pa.us>; Sun, 11 Jul 1999 12:01:15 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [209.167.229.1]) by renoir.op.net (o1/$ Revision: 1.18 $) with ESMTP id LAA14635 for <maillist@candle.pha.pa.us>; Sun, 11 Jul 1999 11:52:26 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [209.167.229.1])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id LAA07748;
|
|
||||||
Sun, 11 Jul 1999 11:47:08 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-sql@hub.org)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Sun, 11 Jul 1999 11:44:34 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost)
|
|
||||||
by hub.org (8.9.3/8.9.3) id LAA05445
|
|
||||||
for pgsql-sql-outgoing; Sun, 11 Jul 1999 11:44:33 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-sql@postgreSQL.org)
|
|
||||||
X-Authentication-Warning: hub.org: majordom set sender to owner-pgsql-sql@postgreSQL.org using -f
|
|
||||||
Received: from sss.sss.pgh.pa.us (sss.pgh.pa.us [209.114.166.2] (may be forged))
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id LAA04477;
|
|
||||||
Sun, 11 Jul 1999 11:40:31 -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 LAA15131;
|
|
||||||
Sun, 11 Jul 1999 11:38:44 -0400 (EDT)
|
|
||||||
To: Oleg Bartunov <oleg@sai.msu.su>
|
|
||||||
cc: hackers@postgreSQL.org, pgsql-sql@postgreSQL.org
|
|
||||||
Subject: Re: [SQL] Re: [HACKERS] SELECT DISTINCT question
|
|
||||||
In-reply-to: Your message of Sun, 11 Jul 1999 10:09:24 +0400 (MSD)
|
|
||||||
<Pine.GSO.3.96.SK.990711100405.2043V-100000@ra>
|
|
||||||
Date: Sun, 11 Jul 1999 11:38:43 -0400
|
|
||||||
Message-ID: <15129.931707523@sss.pgh.pa.us>
|
|
||||||
From: Tom Lane <tgl@sss.pgh.pa.us>
|
|
||||||
Sender: owner-pgsql-sql@postgreSQL.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
Oleg Bartunov <oleg@sai.msu.su> writes:
|
|
||||||
> thanks, this works. But why parser complains about such query:
|
|
||||||
|
|
||||||
> discovery=> select distinct on a.date a.date, a.bytes from access_log a;
|
|
||||||
> ERROR: parser: parse error at or near "."
|
|
||||||
|
|
||||||
Probably the grammar specifies just <column name> and not anything
|
|
||||||
more complex after DISTINCT ON. It'd be risky to try to accept a
|
|
||||||
general expression after ON, due to the silly decision to leave out
|
|
||||||
any terminating punctuation.
|
|
||||||
|
|
||||||
>> SELECT DISTINCT ON is not in SQL92, and I think it shouldn't be in
|
|
||||||
>> Postgres either...
|
|
||||||
|
|
||||||
> I'm not an SQL expert, but if it works and this feature is in standard
|
|
||||||
> but only syntax is diffrent,
|
|
||||||
|
|
||||||
No, there is no feature in SQL that allows DISTINCT on a subset of
|
|
||||||
columns, period. This is not merely a matter of syntax, it's a
|
|
||||||
fundamental semantic issue.
|
|
||||||
|
|
||||||
> why just not to use standard
|
|
||||||
>
|
|
||||||
> select distinct(date), bytes from access_log;
|
|
||||||
>
|
|
||||||
> Or I'm missing here ?
|
|
||||||
|
|
||||||
I don't think that does what you expect it to (hint: the
|
|
||||||
parentheses are redundant).
|
|
||||||
|
|
||||||
regards, tom lane
|
|
||||||
|
|
||||||
|
|
||||||
From owner-pgsql-sql@hub.org Tue Jul 13 18:02:01 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 SAA07953
|
|
||||||
for <maillist@candle.pha.pa.us>; Tue, 13 Jul 1999 18:02:00 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [209.167.229.1]) by renoir.op.net (o1/$ Revision: 1.18 $) with ESMTP id RAA14528 for <maillist@candle.pha.pa.us>; Tue, 13 Jul 1999 17:46:12 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [209.167.229.1])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id RAA96029;
|
|
||||||
Tue, 13 Jul 1999 17:42:37 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-sql@hub.org)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Tue, 13 Jul 1999 17:33:35 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost)
|
|
||||||
by hub.org (8.9.3/8.9.3) id RAA94598
|
|
||||||
for pgsql-sql-outgoing; Tue, 13 Jul 1999 17:33:33 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-sql@postgreSQL.org)
|
|
||||||
X-Authentication-Warning: hub.org: majordom set sender to owner-pgsql-sql@postgreSQL.org using -f
|
|
||||||
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 RAA94565;
|
|
||||||
Tue, 13 Jul 1999 17:33:19 -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 RAA24415;
|
|
||||||
Tue, 13 Jul 1999 17:31:49 -0400 (EDT)
|
|
||||||
To: Hannu Krosing <hannu@trust.ee>
|
|
||||||
cc: hackers@postgreSQL.org, pgsql-sql@postgreSQL.org
|
|
||||||
Subject: [SQL] Re: [HACKERS] SELECT DISTINCT question
|
|
||||||
In-reply-to: Your message of Tue, 13 Jul 1999 23:50:57 +0300
|
|
||||||
<378BA6B1.2B226DDB@trust.ee>
|
|
||||||
Date: Tue, 13 Jul 1999 17:31:48 -0400
|
|
||||||
Message-ID: <24413.931901508@sss.pgh.pa.us>
|
|
||||||
From: Tom Lane <tgl@sss.pgh.pa.us>
|
|
||||||
Sender: owner-pgsql-sql@postgreSQL.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: ROr
|
|
||||||
|
|
||||||
Hannu Krosing <hannu@trust.ee> writes:
|
|
||||||
>> "DISTINCT will eliminate all duplicate rows from the selection.
|
|
||||||
>> DISTINCT ON column will eliminate all duplicates in the specified column;
|
|
||||||
>> this is equivalent to using GROUP BY column."
|
|
||||||
|
|
||||||
> If it is equivalent to GROUP BY then it should allow only aggregates
|
|
||||||
> in non-distinct columns, like:
|
|
||||||
> select distinct on date date, sum(bytes) from access_log;
|
|
||||||
> If it does not, then it should be files as a bug imho.
|
|
||||||
|
|
||||||
It does not. Whether that is a bug is hard to say, since there is no
|
|
||||||
standard I know of that says what it *is* supposed to do.
|
|
||||||
|
|
||||||
If you look at the select_distinct_on regress test outputs, I bet you
|
|
||||||
will be even less happy:
|
|
||||||
|
|
||||||
QUERY: SELECT DISTINCT ON string4 two, string4, ten
|
|
||||||
FROM tmp
|
|
||||||
ORDER BY two using <, string4 using <, ten using <;
|
|
||||||
two|string4|ten
|
|
||||||
---+-------+---
|
|
||||||
0|AAAAxx | 0
|
|
||||||
0|HHHHxx | 0
|
|
||||||
0|OOOOxx | 0
|
|
||||||
0|VVVVxx | 0
|
|
||||||
1|AAAAxx | 1
|
|
||||||
1|HHHHxx | 1
|
|
||||||
1|OOOOxx | 1
|
|
||||||
1|VVVVxx | 1
|
|
||||||
(8 rows)
|
|
||||||
|
|
||||||
That's not exactly my idea of "distinct" values of string4 ---
|
|
||||||
but apparently whoever made up the regress test thought it was OK!
|
|
||||||
|
|
||||||
Can anyone defend this feature or provide a coherent definition
|
|
||||||
of what it's supposed to be doing? My urge to rip it out is
|
|
||||||
growing stronger and stronger...
|
|
||||||
|
|
||||||
regards, tom lane
|
|
||||||
|
|
||||||
|
|
||||||
From tgl@sss.pgh.pa.us Thu Sep 23 17:27:49 1999
|
|
||||||
Received: from sss.sss.pgh.pa.us (sss.pgh.pa.us [209.114.166.2])
|
|
||||||
by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id RAA25975
|
|
||||||
for <maillist@candle.pha.pa.us>; Thu, 23 Sep 1999 17:27:48 -0400 (EDT)
|
|
||||||
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 RAA15769;
|
|
||||||
Thu, 23 Sep 1999 17:27:38 -0400 (EDT)
|
|
||||||
To: Bruce Momjian <maillist@candle.pha.pa.us>
|
|
||||||
cc: Hannu Krosing <hannu@trust.ee>, hackers@postgreSQL.org,
|
|
||||||
pgsql-sql@postgreSQL.org
|
|
||||||
Subject: Re: [SQL] Re: [HACKERS] SELECT DISTINCT question
|
|
||||||
In-reply-to: Your message of Thu, 23 Sep 1999 13:18:18 -0400 (EDT)
|
|
||||||
<199909231718.NAA19629@candle.pha.pa.us>
|
|
||||||
Date: Thu, 23 Sep 1999 17:27:37 -0400
|
|
||||||
Message-ID: <15767.938122057@sss.pgh.pa.us>
|
|
||||||
From: Tom Lane <tgl@sss.pgh.pa.us>
|
|
||||||
Status: ROr
|
|
||||||
|
|
||||||
Bruce Momjian <maillist@candle.pha.pa.us> writes:
|
|
||||||
> Tom, any status on this DISTINCT ON ripout?
|
|
||||||
|
|
||||||
I haven't done anything about it, if that's what you mean.
|
|
||||||
|
|
||||||
I didn't get any indication of whether anyone else agreed with me
|
|
||||||
(maybe the lack of loud complaints should be taken as consent?)
|
|
||||||
|
|
||||||
regards, tom lane
|
|
||||||
|
|
@ -1,351 +0,0 @@
|
|||||||
From tgl@sss.pgh.pa.us Sun Aug 30 11:25:23 1998
|
|
||||||
Received: from sss.sss.pgh.pa.us (sss.pgh.pa.us [206.210.65.6])
|
|
||||||
by candle.pha.pa.us (8.8.5/8.8.5) with ESMTP id LAA12607
|
|
||||||
for <maillist@candle.pha.pa.us>; Sun, 30 Aug 1998 11:25:20 -0400 (EDT)
|
|
||||||
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 LAA15788;
|
|
||||||
Sun, 30 Aug 1998 11:23:38 -0400 (EDT)
|
|
||||||
To: Bruce Momjian <maillist@candle.pha.pa.us>
|
|
||||||
cc: dz@cs.unitn.it (Massimo Dal Zotto), hackers@postgreSQL.org
|
|
||||||
Subject: Re: [HACKERS] flock patch breaks things here
|
|
||||||
In-reply-to: Your message of Sun, 30 Aug 1998 08:19:52 -0400 (EDT)
|
|
||||||
<199808301219.IAA08821@candle.pha.pa.us>
|
|
||||||
Date: Sun, 30 Aug 1998 11:23:38 -0400
|
|
||||||
Message-ID: <15786.904490618@sss.pgh.pa.us>
|
|
||||||
From: Tom Lane <tgl@sss.pgh.pa.us>
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
Bruce Momjian <maillist@candle.pha.pa.us> writes:
|
|
||||||
> Can't we just have configure check for flock(). Another idea is to
|
|
||||||
> create a 'pid' file in the pgsql/data/base directory, and do a kill -0
|
|
||||||
> to see if it is stil running before removing the lock.
|
|
||||||
|
|
||||||
The latter approach is what I was going to suggest. Writing a pid file
|
|
||||||
would be a fine idea anyway --- for one thing, it makes it a lot easier
|
|
||||||
to write a "kill the postmaster" script. Given that the postmaster
|
|
||||||
should write a pid file, a new postmaster should look for an existing
|
|
||||||
pid file, and try to do a kill(pid, 0) on the number contained therein.
|
|
||||||
If this doesn't return an error, then you figure there is already a
|
|
||||||
postmaster running, complain, and exit. Otherwise you figure you is it,
|
|
||||||
(re)write the pid file and away you go. Then pqcomm.c can just
|
|
||||||
unconditionally delete any old file that's in the way of making the
|
|
||||||
pipe.
|
|
||||||
|
|
||||||
The pidfile checking and creation probably ought to go in postmaster.c,
|
|
||||||
not down inside pqcomm.c. I never liked the fact that a critical
|
|
||||||
interlock function was being done by a low-level library that one might
|
|
||||||
not even want to invoke (if all your clients are using TCP, opening up
|
|
||||||
the Unix-domain socket is a waste of time, no?).
|
|
||||||
|
|
||||||
BTW, there is another problem with relying on flock on the socket file
|
|
||||||
for this purpose: it opens up a hole for a denial-of-service attack.
|
|
||||||
Anyone who can write the file can flock it. (We already had a problem
|
|
||||||
with DOS via creating a dummy file at /tmp/.s.PGSQL.5432, but it would
|
|
||||||
be harder to spot the culprit with an flock-based interference.)
|
|
||||||
|
|
||||||
regards, tom lane
|
|
||||||
|
|
||||||
From owner-pgsql-hackers@hub.org Sun Aug 30 12:27:41 1998
|
|
||||||
Received: from hub.org (hub.org [209.47.148.200])
|
|
||||||
by candle.pha.pa.us (8.8.5/8.8.5) with ESMTP id MAA12976
|
|
||||||
for <maillist@candle.pha.pa.us>; Sun, 30 Aug 1998 12:27:37 -0400 (EDT)
|
|
||||||
Received: from localhost (majordom@localhost) by hub.org (8.8.8/8.7.5) with SMTP id MAA09234; Sun, 30 Aug 1998 12:24:51 -0400 (EDT)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Sun, 30 Aug 1998 12:23:26 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost) by hub.org (8.8.8/8.7.5) id MAA09167 for pgsql-hackers-outgoing; Sun, 30 Aug 1998 12:23:25 -0400 (EDT)
|
|
||||||
Received: from mambo.cs.unitn.it (mambo.cs.unitn.it [193.205.199.204]) by hub.org (8.8.8/8.7.5) with SMTP id MAA09150 for <hackers@postgreSQL.org>; Sun, 30 Aug 1998 12:23:08 -0400 (EDT)
|
|
||||||
Received: from boogie.cs.unitn.it (dz@boogie [193.205.199.79]) by mambo.cs.unitn.it (8.6.12/8.6.12) with ESMTP id SAA29572; Sun, 30 Aug 1998 18:21:42 +0200
|
|
||||||
Received: (from dz@localhost) by boogie.cs.unitn.it (8.8.5/8.6.9) id SAA05993; Sun, 30 Aug 1998 18:21:41 +0200
|
|
||||||
From: Massimo Dal Zotto <dz@cs.unitn.it>
|
|
||||||
Message-Id: <199808301621.SAA05993@boogie.cs.unitn.it>
|
|
||||||
Subject: Re: [HACKERS] flock patch breaks things here
|
|
||||||
To: hackers@postgreSQL.org (PostgreSQL Hackers)
|
|
||||||
Date: Sun, 30 Aug 1998 18:21:41 +0200 (MET DST)
|
|
||||||
Cc: tgl@sss.pgh.pa.us (Tom Lane)
|
|
||||||
In-Reply-To: <15786.904490618@sss.pgh.pa.us> from "Tom Lane" at Aug 30, 98 11:23:38 am
|
|
||||||
X-Mailer: ELM [version 2.4 PL24 ME4]
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=iso-8859-1
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
Sender: owner-pgsql-hackers@hub.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: ROr
|
|
||||||
|
|
||||||
>
|
|
||||||
> Bruce Momjian <maillist@candle.pha.pa.us> writes:
|
|
||||||
> > Can't we just have configure check for flock(). Another idea is to
|
|
||||||
> > create a 'pid' file in the pgsql/data/base directory, and do a kill -0
|
|
||||||
> > to see if it is stil running before removing the lock.
|
|
||||||
>
|
|
||||||
> The latter approach is what I was going to suggest. Writing a pid file
|
|
||||||
> would be a fine idea anyway --- for one thing, it makes it a lot easier
|
|
||||||
> to write a "kill the postmaster" script. Given that the postmaster
|
|
||||||
> should write a pid file, a new postmaster should look for an existing
|
|
||||||
> pid file, and try to do a kill(pid, 0) on the number contained therein.
|
|
||||||
> If this doesn't return an error, then you figure there is already a
|
|
||||||
> postmaster running, complain, and exit. Otherwise you figure you is it,
|
|
||||||
> (re)write the pid file and away you go. Then pqcomm.c can just
|
|
||||||
> unconditionally delete any old file that's in the way of making the
|
|
||||||
> pipe.
|
|
||||||
>
|
|
||||||
> The pidfile checking and creation probably ought to go in postmaster.c,
|
|
||||||
> not down inside pqcomm.c. I never liked the fact that a critical
|
|
||||||
> interlock function was being done by a low-level library that one might
|
|
||||||
> not even want to invoke (if all your clients are using TCP, opening up
|
|
||||||
> the Unix-domain socket is a waste of time, no?).
|
|
||||||
>
|
|
||||||
> BTW, there is another problem with relying on flock on the socket file
|
|
||||||
> for this purpose: it opens up a hole for a denial-of-service attack.
|
|
||||||
> Anyone who can write the file can flock it. (We already had a problem
|
|
||||||
> with DOS via creating a dummy file at /tmp/.s.PGSQL.5432, but it would
|
|
||||||
> be harder to spot the culprit with an flock-based interference.)
|
|
||||||
|
|
||||||
This came to my mind, but I didn't think this would have happened so
|
|
||||||
quickly. In my opinion the socket and the pidfile should be created in a
|
|
||||||
directory owned by postgres, for example /tmp/.Pgsql-unix, like does X.
|
|
||||||
|
|
||||||
--
|
|
||||||
Massimo Dal Zotto
|
|
||||||
|
|
||||||
+----------------------------------------------------------------------+
|
|
||||||
| Massimo Dal Zotto email: dz@cs.unitn.it |
|
|
||||||
| Via Marconi, 141 phone: ++39-461-534251 |
|
|
||||||
| 38057 Pergine Valsugana (TN) www: http://www.cs.unitn.it/~dz/ |
|
|
||||||
| Italy pgp: finger dz@tango.cs.unitn.it |
|
|
||||||
+----------------------------------------------------------------------+
|
|
||||||
|
|
||||||
|
|
||||||
From owner-pgsql-hackers@hub.org Sun Aug 30 13:01:10 1998
|
|
||||||
Received: from renoir.op.net (root@renoir.op.net [209.152.193.4])
|
|
||||||
by candle.pha.pa.us (8.8.5/8.8.5) with ESMTP id NAA13785
|
|
||||||
for <maillist@candle.pha.pa.us>; Sun, 30 Aug 1998 13:01:09 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [209.47.148.200]) by renoir.op.net (o1/$ Revision: 1.18 $) with ESMTP id MAA29386 for <maillist@candle.pha.pa.us>; Sun, 30 Aug 1998 12:58:24 -0400 (EDT)
|
|
||||||
Received: from localhost (majordom@localhost) by hub.org (8.8.8/8.7.5) with SMTP id MAA11406; Sun, 30 Aug 1998 12:54:48 -0400 (EDT)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Sun, 30 Aug 1998 12:52:22 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost) by hub.org (8.8.8/8.7.5) id MAA11310 for pgsql-hackers-outgoing; Sun, 30 Aug 1998 12:52:20 -0400 (EDT)
|
|
||||||
Received: from sss.sss.pgh.pa.us (sss.pgh.pa.us [206.210.65.6]) by hub.org (8.8.8/8.7.5) with ESMTP id MAA11296 for <hackers@postgreSQL.org>; Sun, 30 Aug 1998 12:52:13 -0400 (EDT)
|
|
||||||
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 MAA16094;
|
|
||||||
Sun, 30 Aug 1998 12:50:55 -0400 (EDT)
|
|
||||||
To: Massimo Dal Zotto <dz@cs.unitn.it>
|
|
||||||
cc: hackers@postgreSQL.org (PostgreSQL Hackers)
|
|
||||||
Subject: Re: [HACKERS] flock patch breaks things here
|
|
||||||
In-reply-to: Your message of Sun, 30 Aug 1998 18:21:41 +0200 (MET DST)
|
|
||||||
<199808301621.SAA05993@boogie.cs.unitn.it>
|
|
||||||
Date: Sun, 30 Aug 1998 12:50:55 -0400
|
|
||||||
Message-ID: <16092.904495855@sss.pgh.pa.us>
|
|
||||||
From: Tom Lane <tgl@sss.pgh.pa.us>
|
|
||||||
Sender: owner-pgsql-hackers@hub.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
Massimo Dal Zotto <dz@cs.unitn.it> writes:
|
|
||||||
> In my opinion the socket and the pidfile should be created in a
|
|
||||||
> directory owned by postgres, for example /tmp/.Pgsql-unix, like does X.
|
|
||||||
|
|
||||||
The pidfile belongs at the top level of the database directory (eg,
|
|
||||||
/usr/local/pgsql/data/postmaster.pid), because what it actually
|
|
||||||
represents is that there is a postmaster running *for that database
|
|
||||||
group*.
|
|
||||||
|
|
||||||
If you want to support multiple database sets on one machine (which I
|
|
||||||
do), then the interlock has to be per database directory. Putting the
|
|
||||||
pidfile into a common directory would mean we'd have to invent some
|
|
||||||
kind of pidfile naming convention to keep multiple postmasters from
|
|
||||||
tromping on each other. This is unnecessarily complex.
|
|
||||||
|
|
||||||
I agree with you that putting the socket file into a less easily munged
|
|
||||||
directory than /tmp would be a good idea for security. But that's a
|
|
||||||
separate issue. On machines that understand stickybits for directories,
|
|
||||||
the security hole is not really very big.
|
|
||||||
|
|
||||||
At this point, the fact that /tmp/.s.PGSQL.port# is the socket path is
|
|
||||||
effectively a version-independent aspect of the FE/BE protocol, and so
|
|
||||||
we can't change it without breaking old applications. I'm not sure that
|
|
||||||
that's worth the security improvement.
|
|
||||||
|
|
||||||
What I'd like to see someday is a postmaster command line switch to tell
|
|
||||||
it to use *only* TCP connections and not create a Unix socket at all.
|
|
||||||
That hasn't been possible so far, because we were relying on the socket
|
|
||||||
file to provide a safety interlock against starting multiple
|
|
||||||
postmasters. But an interlock using a pidfile would be much better.
|
|
||||||
(Look around; *every* other Unix daemon I know of that wants to ensure
|
|
||||||
that there's only one of it uses a pidfile interlock. Not file locking.
|
|
||||||
There's a reason why that's the well-trodden path.)
|
|
||||||
|
|
||||||
regards, tom lane
|
|
||||||
|
|
||||||
|
|
||||||
From owner-pgsql-hackers@hub.org Sun Aug 30 15:31:13 1998
|
|
||||||
Received: from hub.org (hub.org [209.47.148.200])
|
|
||||||
by candle.pha.pa.us (8.8.5/8.8.5) with ESMTP id PAA15275
|
|
||||||
for <maillist@candle.pha.pa.us>; Sun, 30 Aug 1998 15:31:11 -0400 (EDT)
|
|
||||||
Received: from localhost (majordom@localhost) by hub.org (8.8.8/8.7.5) with SMTP id PAA22194; Sun, 30 Aug 1998 15:27:20 -0400 (EDT)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Sun, 30 Aug 1998 15:23:58 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost) by hub.org (8.8.8/8.7.5) id PAA21800 for pgsql-hackers-outgoing; Sun, 30 Aug 1998 15:23:57 -0400 (EDT)
|
|
||||||
Received: from thelab.hub.org (nat0118.mpoweredpc.net [142.177.188.118]) by hub.org (8.8.8/8.7.5) with ESMTP id PAA21696 for <hackers@postgreSQL.org>; Sun, 30 Aug 1998 15:22:51 -0400 (EDT)
|
|
||||||
Received: from localhost (scrappy@localhost)
|
|
||||||
by thelab.hub.org (8.9.1/8.8.8) with SMTP id QAA18542;
|
|
||||||
Sun, 30 Aug 1998 16:21:29 -0300 (ADT)
|
|
||||||
(envelope-from scrappy@hub.org)
|
|
||||||
X-Authentication-Warning: thelab.hub.org: scrappy owned process doing -bs
|
|
||||||
Date: Sun, 30 Aug 1998 16:21:28 -0300 (ADT)
|
|
||||||
From: The Hermit Hacker <scrappy@hub.org>
|
|
||||||
To: Tom Lane <tgl@sss.pgh.pa.us>
|
|
||||||
cc: Massimo Dal Zotto <dz@cs.unitn.it>,
|
|
||||||
PostgreSQL Hackers <hackers@postgreSQL.org>
|
|
||||||
Subject: Re: [HACKERS] flock patch breaks things here
|
|
||||||
In-Reply-To: <16092.904495855@sss.pgh.pa.us>
|
|
||||||
Message-ID: <Pine.BSF.4.02.9808301618350.343-100000@thelab.hub.org>
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: TEXT/PLAIN; charset=US-ASCII
|
|
||||||
Sender: owner-pgsql-hackers@hub.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
On Sun, 30 Aug 1998, Tom Lane wrote:
|
|
||||||
|
|
||||||
> Massimo Dal Zotto <dz@cs.unitn.it> writes:
|
|
||||||
> > In my opinion the socket and the pidfile should be created in a
|
|
||||||
> > directory owned by postgres, for example /tmp/.Pgsql-unix, like does X.
|
|
||||||
>
|
|
||||||
> The pidfile belongs at the top level of the database directory (eg,
|
|
||||||
> /usr/local/pgsql/data/postmaster.pid), because what it actually
|
|
||||||
> represents is that there is a postmaster running *for that database
|
|
||||||
> group*.
|
|
||||||
|
|
||||||
I have to agree with this one...but then it also negates the
|
|
||||||
argument about the flock() DoS...*grin*
|
|
||||||
|
|
||||||
BTW...I like the kill(pid,0) solution myself, primarily because it
|
|
||||||
is, i think, the most portable solution.
|
|
||||||
|
|
||||||
I would not consider a patch to remove the flock() solution and
|
|
||||||
replace it with the kill(pid,0) solution a new feature, just an
|
|
||||||
improvement of an existing one...either way, moving the pid file (or
|
|
||||||
socket, for that matter) from /tmp should be listed as a security related
|
|
||||||
requirement for v6.4 :)
|
|
||||||
|
|
||||||
Marc G. Fournier
|
|
||||||
Systems Administrator @ hub.org
|
|
||||||
primary: scrappy@hub.org secondary: scrappy@{freebsd|postgresql}.org
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
From owner-pgsql-hackers@hub.org Sun Aug 30 22:41:10 1998
|
|
||||||
Received: from hub.org (hub.org [209.47.148.200])
|
|
||||||
by candle.pha.pa.us (8.8.5/8.8.5) with ESMTP id WAA01526
|
|
||||||
for <maillist@candle.pha.pa.us>; Sun, 30 Aug 1998 22:41:08 -0400 (EDT)
|
|
||||||
Received: from localhost (majordom@localhost) by hub.org (8.8.8/8.7.5) with SMTP id WAA29298; Sun, 30 Aug 1998 22:38:18 -0400 (EDT)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Sun, 30 Aug 1998 22:35:05 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost) by hub.org (8.8.8/8.7.5) id WAA29203 for pgsql-hackers-outgoing; Sun, 30 Aug 1998 22:35:03 -0400 (EDT)
|
|
||||||
Received: from sss.sss.pgh.pa.us (sss.pgh.pa.us [206.210.65.6]) by hub.org (8.8.8/8.7.5) with ESMTP id WAA29017 for <hackers@postgreSQL.org>; Sun, 30 Aug 1998 22:34:55 -0400 (EDT)
|
|
||||||
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 WAA20075;
|
|
||||||
Sun, 30 Aug 1998 22:34:41 -0400 (EDT)
|
|
||||||
To: The Hermit Hacker <scrappy@hub.org>
|
|
||||||
cc: PostgreSQL Hackers <hackers@postgreSQL.org>
|
|
||||||
Subject: Re: [HACKERS] flock patch breaks things here
|
|
||||||
In-reply-to: Your message of Sun, 30 Aug 1998 16:21:28 -0300 (ADT)
|
|
||||||
<Pine.BSF.4.02.9808301618350.343-100000@thelab.hub.org>
|
|
||||||
Date: Sun, 30 Aug 1998 22:34:40 -0400
|
|
||||||
Message-ID: <20073.904530880@sss.pgh.pa.us>
|
|
||||||
From: Tom Lane <tgl@sss.pgh.pa.us>
|
|
||||||
Sender: owner-pgsql-hackers@hub.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: ROr
|
|
||||||
|
|
||||||
The Hermit Hacker <scrappy@hub.org> writes:
|
|
||||||
> either way, moving the pid file (or
|
|
||||||
> socket, for that matter) from /tmp should be listed as a security related
|
|
||||||
> requirement for v6.4 :)
|
|
||||||
|
|
||||||
Huh? There is no pid file being generated in /tmp (or anywhere else)
|
|
||||||
at the moment. If we do add one, it should not go into /tmp for the
|
|
||||||
reasons I gave before.
|
|
||||||
|
|
||||||
Where the Unix-domain socket file lives is an entirely separate issue.
|
|
||||||
|
|
||||||
If we move the socket out of /tmp then we have just kicked away all the
|
|
||||||
work we did to preserve backwards compatibility of the FE/BE protocol
|
|
||||||
with existing clients. Being able to talk to a 1.0 client isn't much
|
|
||||||
good if you aren't listening where he's going to try to contact you.
|
|
||||||
So I think I have to vote in favor of leaving the socket where it is.
|
|
||||||
|
|
||||||
regards, tom lane
|
|
||||||
|
|
||||||
|
|
||||||
From owner-pgsql-hackers@hub.org Mon Aug 31 11:31:19 1998
|
|
||||||
Received: from renoir.op.net (root@renoir.op.net [209.152.193.4])
|
|
||||||
by candle.pha.pa.us (8.8.5/8.8.5) with ESMTP id LAA21195
|
|
||||||
for <maillist@candle.pha.pa.us>; Mon, 31 Aug 1998 11:31:13 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [209.47.148.200]) by renoir.op.net (o1/$ Revision: 1.18 $) with ESMTP id LAA06827 for <maillist@candle.pha.pa.us>; Mon, 31 Aug 1998 11:17:41 -0400 (EDT)
|
|
||||||
Received: from localhost (majordom@localhost) by hub.org (8.8.8/8.7.5) with SMTP id LAA24792; Mon, 31 Aug 1998 11:12:18 -0400 (EDT)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Mon, 31 Aug 1998 11:10:31 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost) by hub.org (8.8.8/8.7.5) id LAA24742 for pgsql-hackers-outgoing; Mon, 31 Aug 1998 11:10:29 -0400 (EDT)
|
|
||||||
Received: from trillium.nmsu.edu (trillium.NMSU.Edu [128.123.5.15]) by hub.org (8.8.8/8.7.5) with ESMTP id LAA24725 for <hackers@postgreSQL.org>; Mon, 31 Aug 1998 11:10:22 -0400 (EDT)
|
|
||||||
Received: (from brook@localhost)
|
|
||||||
by trillium.nmsu.edu (8.8.8/8.8.8) id JAA03282;
|
|
||||||
Mon, 31 Aug 1998 09:09:01 -0600 (MDT)
|
|
||||||
Date: Mon, 31 Aug 1998 09:09:01 -0600 (MDT)
|
|
||||||
Message-Id: <199808311509.JAA03282@trillium.nmsu.edu>
|
|
||||||
From: Brook Milligan <brook@trillium.NMSU.Edu>
|
|
||||||
To: tgl@sss.pgh.pa.us
|
|
||||||
CC: dg@informix.com, hackers@postgreSQL.org
|
|
||||||
In-reply-to: <23042.904573041@sss.pgh.pa.us> (message from Tom Lane on Mon, 31
|
|
||||||
Aug 1998 10:17:21 -0400)
|
|
||||||
Subject: Re: [HACKERS] flock patch breaks things here
|
|
||||||
References: <23042.904573041@sss.pgh.pa.us>
|
|
||||||
Sender: owner-pgsql-hackers@hub.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: ROr
|
|
||||||
|
|
||||||
I just came up with an idea that might help alleviate the /tmp security
|
|
||||||
exposure without creating a backwards-compatibility problem. It works
|
|
||||||
like this:
|
|
||||||
|
|
||||||
1. During installation, create a subdirectory of /tmp to hold Postgres'
|
|
||||||
socket files and associated pid lockfiles. This subdirectory should be
|
|
||||||
owned by the Postgres superuser and have permissions 755
|
|
||||||
(world-readable, writable only by Postgres superuser). Maybe call it
|
|
||||||
/tmp/.pgsql --- the name should start with a dot to keep it out of the
|
|
||||||
way. (Bruce points out that some systems clear /tmp during reboot, so
|
|
||||||
it might be that a postmaster will have to be prepared to recreate this
|
|
||||||
directory at startup --- anyone know if subdirectories of /tmp are
|
|
||||||
zapped too? My system doesn't do that...)
|
|
||||||
|
|
||||||
...
|
|
||||||
|
|
||||||
I notice that on my system, the X11 socket files in /tmp/.X11-unix are
|
|
||||||
actually symlinks to socket files in /usr/spool/sockets/X11. I dunno if
|
|
||||||
it's worth our trouble to get into putting our sockets under /usr/spool
|
|
||||||
or /var/spool or whatever --- seems like another configuration choice to
|
|
||||||
mess up. It'd be nice if the socket directory lived somewhere where the
|
|
||||||
parent dirs weren't world-writable, but this would mean one more thing
|
|
||||||
that you have to have root permissions for in order to install pgsql.
|
|
||||||
|
|
||||||
It seems like we need a directory for locks (= pid files) and one for
|
|
||||||
sockets (perhaps the same one). I strongly suggest that the location
|
|
||||||
for these be configurable. By default, it might make sense to put
|
|
||||||
them in ~pgsql/locks and ~pgsql/sockets. It is easy (i.e., I'll be
|
|
||||||
glad to do it) to modify configure.in to take options like
|
|
||||||
|
|
||||||
--lock-dir=/var/spool/lock
|
|
||||||
--socket-dir=/var/spool/sockets
|
|
||||||
|
|
||||||
that set cc defines and have the code respond accordingly. This way,
|
|
||||||
those who don't care (or don't have root access) can use the defaults,
|
|
||||||
whereas those with root access who like to keep locks and sockets in a
|
|
||||||
common place can do so easily. Either way, multiple postmasters (all
|
|
||||||
compiled with the same options of course) can check the appropriate
|
|
||||||
locks in the well-known places. Finally, drop the link into /tmp for
|
|
||||||
the old socket and document that it will be disappearing at some
|
|
||||||
point, and all is fine.
|
|
||||||
|
|
||||||
If someone wants to give me some guidance on what preprocessor
|
|
||||||
variables should be set in response to the above options (or something
|
|
||||||
like them), I'll do the configure stuff.
|
|
||||||
|
|
||||||
Cheers,
|
|
||||||
Brook
|
|
||||||
|
|
||||||
|
|
@ -1,69 +0,0 @@
|
|||||||
From owner-pgsql-general@hub.org Fri Dec 18 06:31:23 1998
|
|
||||||
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 GAA05554
|
|
||||||
for <maillist@candle.pha.pa.us>; Fri, 18 Dec 1998 06:31:21 -0500 (EST)
|
|
||||||
Received: from hub.org (majordom@hub.org [209.47.145.100]) by renoir.op.net (o1/$ Revision: 1.18 $) with ESMTP id EAA21127 for <maillist@candle.pha.pa.us>; Fri, 18 Dec 1998 04:46:38 -0500 (EST)
|
|
||||||
Received: from localhost (majordom@localhost)
|
|
||||||
by hub.org (8.9.1/8.9.1) with SMTP id EAA01409;
|
|
||||||
Fri, 18 Dec 1998 04:44:19 -0500 (EST)
|
|
||||||
(envelope-from owner-pgsql-general@hub.org)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Fri, 18 Dec 1998 04:43:22 +0000 (EST)
|
|
||||||
Received: (from majordom@localhost)
|
|
||||||
by hub.org (8.9.1/8.9.1) id EAA01093
|
|
||||||
for pgsql-general-outgoing; Fri, 18 Dec 1998 04:43:18 -0500 (EST)
|
|
||||||
(envelope-from owner-pgsql-general@postgreSQL.org)
|
|
||||||
Received: from dune.krs.ru (dune.krs.ru [195.161.16.38])
|
|
||||||
by hub.org (8.9.1/8.9.1) with ESMTP id EAA01067
|
|
||||||
for <pgsql-general@postgreSQL.org>; Fri, 18 Dec 1998 04:43:09 -0500 (EST)
|
|
||||||
(envelope-from vadim@krs.ru)
|
|
||||||
Received: from krs.ru (localhost.krs.ru [127.0.0.1])
|
|
||||||
by dune.krs.ru (8.8.8/8.8.7) with ESMTP id QAA16201;
|
|
||||||
Fri, 18 Dec 1998 16:41:44 +0700 (KRS)
|
|
||||||
(envelope-from vadim@krs.ru)
|
|
||||||
Message-ID: <367A2354.E998763@krs.ru>
|
|
||||||
Date: Fri, 18 Dec 1998 16:41:40 +0700
|
|
||||||
From: Vadim Mikheev <vadim@krs.ru>
|
|
||||||
Organization: OJSC Rostelecom (Krasnoyarsk)
|
|
||||||
X-Mailer: Mozilla 4.5 [en] (X11; I; FreeBSD 2.2.6-RELEASE i386)
|
|
||||||
X-Accept-Language: ru, en
|
|
||||||
MIME-Version: 1.0
|
|
||||||
To: Anton de Wet <adw@obsidian.co.za>
|
|
||||||
CC: pgsql-general@postgreSQL.org
|
|
||||||
Subject: Re: [GENERAL] Why PostgreSQL is better than other commerial softwares?
|
|
||||||
References: <Pine.LNX.4.04.9812181046030.9458-100000@ra.obsidian.co.za>
|
|
||||||
Content-Type: text/plain; charset=us-ascii
|
|
||||||
Content-Transfer-Encoding: 7bit
|
|
||||||
Sender: owner-pgsql-general@postgreSQL.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
Anton de Wet wrote:
|
|
||||||
>
|
|
||||||
> >
|
|
||||||
> > Often quick mailing list support?
|
|
||||||
>
|
|
||||||
> :-)
|
|
||||||
>
|
|
||||||
> While on the subject I finally found the solution to a problem I (and one
|
|
||||||
> or two other people) posted about without answer. (So sometimes it's slow
|
|
||||||
> mailing list support).
|
|
||||||
>
|
|
||||||
> In importing about 5 million records (which I copy in blocks of 10000) the
|
|
||||||
> copy became linearly slower. After a friend RTFM and refered me, I used
|
|
||||||
> the -F switch (passed by the postmaster to the backend processes) and the
|
|
||||||
> time became linear and a LOT shorter. Import time for the 5000000 records
|
|
||||||
> now the same (or maybe even slightly faster, I didn't accurately time
|
|
||||||
> them) as importing the data into oracle on the same machine.
|
|
||||||
|
|
||||||
"While on the subject..." -:)
|
|
||||||
|
|
||||||
This is the problem of buffer manager, known for very long time:
|
|
||||||
when copy eats all buffers, manager begins write/fsync each
|
|
||||||
durty buffer to free buffer for new data. All updated relations
|
|
||||||
should be fsynced _once_ @ transaction commit. You would get
|
|
||||||
the same results without -F...
|
|
||||||
I still have no time to implement this -:(
|
|
||||||
|
|
||||||
Vadim
|
|
||||||
|
|
||||||
|
|
@ -1,616 +0,0 @@
|
|||||||
From tgl@sss.pgh.pa.us Mon Jun 14 20:50:41 1999
|
|
||||||
Received: from sss.sss.pgh.pa.us (sss.pgh.pa.us [206.210.65.6])
|
|
||||||
by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id UAA19110
|
|
||||||
for <maillist@candle.pha.pa.us>; Mon, 14 Jun 1999 20:50:39 -0400 (EDT)
|
|
||||||
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 UAA21506;
|
|
||||||
Mon, 14 Jun 1999 20:51:07 -0400 (EDT)
|
|
||||||
To: Bruce Momjian <maillist@candle.pha.pa.us>
|
|
||||||
cc: Roman.Hodek@informatik.uni-erlangen.de, olly@lfix.co.uk,
|
|
||||||
PostgreSQL-development <pgsql-hackers@postgreSQL.org>
|
|
||||||
Subject: Cleaning up function interface (was Re: Patch for m68k architecture)
|
|
||||||
In-reply-to: Your message of Mon, 14 Jun 1999 17:53:25 -0400 (EDT)
|
|
||||||
<199906142153.RAA16276@candle.pha.pa.us>
|
|
||||||
Date: Mon, 14 Jun 1999 20:51:06 -0400
|
|
||||||
Message-ID: <21504.929407866@sss.pgh.pa.us>
|
|
||||||
From: Tom Lane <tgl@sss.pgh.pa.us>
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
Bruce Momjian <maillist@candle.pha.pa.us> writes:
|
|
||||||
>> ANSI C says results are undefined if you call a function via pointer
|
|
||||||
>> and the pointer is declared to return another type than the function
|
|
||||||
>> actually returns. So m68k compilers conform to the standard here.
|
|
||||||
|
|
||||||
> Yes, we admit that we break the standard with fmgr_ptr, because we
|
|
||||||
> return a variety of values depending on what function they call. It
|
|
||||||
> appears the egcs optimization on the powerpc or alpha cause a problem
|
|
||||||
> when optimization is -O2, but not -O. We may see more platforms with
|
|
||||||
> problems as optimizers get smarter.
|
|
||||||
|
|
||||||
Seeing as how we also know that the function-call interface ought to be
|
|
||||||
redesigned to handle NULLs better, maybe we should just bite the bullet
|
|
||||||
and fix all of these problems at once by adopting a new standard
|
|
||||||
interface for everything that can be called via fmgr. It'd uglify the
|
|
||||||
code, no doubt, but I think we are starting to see an accumulation of
|
|
||||||
problems that justify doing something.
|
|
||||||
|
|
||||||
Here is a straw-man proposal:
|
|
||||||
|
|
||||||
Datum function (bool *resultnull,
|
|
||||||
Datum *args,
|
|
||||||
bool *argnull,
|
|
||||||
int nargs)
|
|
||||||
|
|
||||||
args[i] is the i'th parameter, or undefined (perhaps always 0?)
|
|
||||||
when argnull[i] is true. The function is responsible for setting
|
|
||||||
*resultnull, and returns a Datum value if *resultnull is false.
|
|
||||||
Most standard functions could ignore nargs since they'd know what it
|
|
||||||
should be, but we ought to pass it for flexibility.
|
|
||||||
|
|
||||||
A useful addition to this scheme would be for fmgr to preset *resultnull
|
|
||||||
to the OR of the input argnull[] array just before calling the function.
|
|
||||||
In the typical case where the function is "strict" (ie, result is NULL
|
|
||||||
if any input is NULL), this would save the function from having to look
|
|
||||||
at argnull[] at all; it'd just check *resultnull and immediately return
|
|
||||||
if true.
|
|
||||||
|
|
||||||
As an example, int4 addition goes from
|
|
||||||
|
|
||||||
int32
|
|
||||||
int4pl(int32 arg1, int32 arg2)
|
|
||||||
{
|
|
||||||
return arg1 + arg2;
|
|
||||||
}
|
|
||||||
|
|
||||||
to
|
|
||||||
|
|
||||||
Datum
|
|
||||||
int4pl (bool *resultnull, Datum *args, bool *argnull, int nargs)
|
|
||||||
{
|
|
||||||
if (*resultnull)
|
|
||||||
return (Datum) 0; /* value doesn't really matter ... */
|
|
||||||
/* we can ignore argnull and nargs */
|
|
||||||
|
|
||||||
return Int32GetDatum(DatumGetInt32(args[0]) + DatumGetInt32(args[1]));
|
|
||||||
}
|
|
||||||
|
|
||||||
This is, of course, much uglier than the existing code, but we might be
|
|
||||||
able to improve matters with some well-chosen macros for the boilerplate
|
|
||||||
parts. What we actually end up writing might look something like
|
|
||||||
|
|
||||||
Datum
|
|
||||||
int4pl (PG_FUNCTION_ARGS)
|
|
||||||
{
|
|
||||||
PG_STRICT_FUNCTION( /* encapsulates null check */
|
|
||||||
PG_ARG0_INT32;
|
|
||||||
PG_ARG1_INT32;
|
|
||||||
|
|
||||||
PG_RESULT_INT32( arg0 + arg1 );
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
where the macros expand to things like "int32 arg0 = DatumGetInt32(args[0])"
|
|
||||||
and "return Int32GetDatum( x )". It'd be worth a little thought to
|
|
||||||
try to set up a group of macros like that, I think.
|
|
||||||
|
|
||||||
regards, tom lane
|
|
||||||
|
|
||||||
From owner-pgsql-hackers@hub.org Wed Sep 22 20:31:02 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 UAA15611
|
|
||||||
for <maillist@candle.pha.pa.us>; Wed, 22 Sep 1999 20:31:01 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [216.126.84.1]) by renoir.op.net (o1/$ Revision: 1.18 $) with ESMTP id UAA02926 for <maillist@candle.pha.pa.us>; Wed, 22 Sep 1999 20:21:24 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [216.126.84.1])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id UAA75413;
|
|
||||||
Wed, 22 Sep 1999 20:09:35 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-hackers@hub.org)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Wed, 22 Sep 1999 20:08:50 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost)
|
|
||||||
by hub.org (8.9.3/8.9.3) id UAA75058
|
|
||||||
for pgsql-hackers-outgoing; Wed, 22 Sep 1999 20:06:58 -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 UAA74982
|
|
||||||
for <pgsql-hackers@postgreSQL.org>; Wed, 22 Sep 1999 20:06:25 -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 UAA06411
|
|
||||||
for <pgsql-hackers@postgreSQL.org>; Wed, 22 Sep 1999 20:05:40 -0400 (EDT)
|
|
||||||
To: pgsql-hackers@postgreSQL.org
|
|
||||||
Subject: [HACKERS] Progress report: buffer refcount bugs and SQL functions
|
|
||||||
Date: Wed, 22 Sep 1999 20:05:39 -0400
|
|
||||||
Message-ID: <6408.938045139@sss.pgh.pa.us>
|
|
||||||
From: Tom Lane <tgl@sss.pgh.pa.us>
|
|
||||||
Sender: owner-pgsql-hackers@postgreSQL.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
I have been finding a lot of interesting stuff while looking into
|
|
||||||
the buffer reference count/leakage issue.
|
|
||||||
|
|
||||||
It turns out that there were two specific things that were camouflaging
|
|
||||||
the existence of bugs in this area:
|
|
||||||
|
|
||||||
1. The BufferLeakCheck routine that's run at transaction commit was
|
|
||||||
only looking for nonzero PrivateRefCount to indicate a missing unpin.
|
|
||||||
It failed to notice nonzero LastRefCount --- which meant that an
|
|
||||||
error in refcount save/restore usage could leave a buffer pinned,
|
|
||||||
and BufferLeakCheck wouldn't notice.
|
|
||||||
|
|
||||||
2. The BufferIsValid macro, which you'd think just checks whether
|
|
||||||
it's handed a valid buffer identifier or not, actually did more:
|
|
||||||
it only returned true if the buffer ID was valid *and* the buffer
|
|
||||||
had positive PrivateRefCount. That meant that the common pattern
|
|
||||||
if (BufferIsValid(buf))
|
|
||||||
ReleaseBuffer(buf);
|
|
||||||
wouldn't complain if it were handed a valid but already unpinned buffer.
|
|
||||||
And that behavior masks bugs that result in buffers being unpinned too
|
|
||||||
early. For example, consider a sequence like
|
|
||||||
|
|
||||||
1. LockBuffer (buffer now has refcount 1). Store reference to
|
|
||||||
a tuple on that buffer page in a tuple table slot.
|
|
||||||
2. Copy buffer reference to a second tuple-table slot, but forget to
|
|
||||||
increment buffer's refcount.
|
|
||||||
3. Release second tuple table slot. Buffer refcount drops to 0,
|
|
||||||
so it's unpinned.
|
|
||||||
4. Release original tuple slot. Because of BufferIsValid behavior,
|
|
||||||
no assert happens here; in fact nothing at all happens.
|
|
||||||
|
|
||||||
This is, of course, buggy code: during the interval from 3 to 4 you
|
|
||||||
still have an apparently valid tuple reference in the original slot,
|
|
||||||
which someone might try to use; but the buffer it points to is unpinned
|
|
||||||
and could be replaced at any time by another backend.
|
|
||||||
|
|
||||||
In short, we had errors that would mask both missing-pin bugs and
|
|
||||||
missing-unpin bugs. And naturally there were a few such bugs lurking
|
|
||||||
behind them...
|
|
||||||
|
|
||||||
3. The buffer refcount save/restore stuff, which I had suspected
|
|
||||||
was useless, is not only useless but also buggy. The reason it's
|
|
||||||
buggy is that it only works if used in a nested fashion. You could
|
|
||||||
save state A, pin some buffers, save state B, pin some more
|
|
||||||
buffers, restore state B (thereby unpinning what you pinned since
|
|
||||||
the save), and finally restore state A (unpinning the earlier stuff).
|
|
||||||
What you could not do is save state A, pin, save B, pin more, then
|
|
||||||
restore state A --- that might unpin some of A's buffers, or some
|
|
||||||
of B's buffers, or some unforeseen combination thereof. If you
|
|
||||||
restore A and then restore B, you do not necessarily return to a zero-
|
|
||||||
pins state, either. And it turns out the actual usage pattern was a
|
|
||||||
nearly random sequence of saves and restores, compounded by a failure to
|
|
||||||
do all of the restores reliably (which was masked by the oversight in
|
|
||||||
BufferLeakCheck).
|
|
||||||
|
|
||||||
|
|
||||||
What I have done so far is to rip out the buffer refcount save/restore
|
|
||||||
support (including LastRefCount), change BufferIsValid to a simple
|
|
||||||
validity check (so that you get an assert if you unpin something that
|
|
||||||
was pinned), change ExecStoreTuple so that it increments the refcount
|
|
||||||
when it is handed a buffer reference (for symmetry with ExecClearTuple's
|
|
||||||
decrement of the refcount), and fix about a dozen bugs exposed by these
|
|
||||||
changes.
|
|
||||||
|
|
||||||
I am still getting Buffer Leak notices in the "misc" regression test,
|
|
||||||
specifically in the queries that invoke more than one SQL function.
|
|
||||||
What I find there is that SQL functions are not always run to
|
|
||||||
completion. Apparently, when a function can return multiple tuples,
|
|
||||||
it won't necessarily be asked to produce them all. And when it isn't,
|
|
||||||
postquel_end() isn't invoked for the function's current query, so its
|
|
||||||
tuple table isn't cleared, so we have dangling refcounts if any of the
|
|
||||||
tuples involved are in disk buffers.
|
|
||||||
|
|
||||||
It may be that the save/restore code was a misguided attempt to fix
|
|
||||||
this problem. I can't tell. But I think what we really need to do is
|
|
||||||
find some way of ensuring that Postquel function execution contexts
|
|
||||||
always get shut down by the end of the query, so that they don't leak
|
|
||||||
resources.
|
|
||||||
|
|
||||||
I suppose a straightforward approach would be to keep a list of open
|
|
||||||
function contexts somewhere (attached to the outer execution context,
|
|
||||||
perhaps), and clean them up at outer-plan shutdown.
|
|
||||||
|
|
||||||
What I am wondering, though, is whether this addition is actually
|
|
||||||
necessary, or is it a bug that the functions aren't run to completion
|
|
||||||
in the first place? I don't really understand the semantics of this
|
|
||||||
"nested dot notation". I suppose it is a Berkeleyism; I can't find
|
|
||||||
anything about it in the SQL92 document. The test cases shown in the
|
|
||||||
misc regress test seem peculiar, not to say wrong. For example:
|
|
||||||
|
|
||||||
regression=> SELECT p.hobbies.equipment.name, p.hobbies.name, p.name FROM person p;
|
|
||||||
name |name |name
|
|
||||||
-------------+-----------+-----
|
|
||||||
advil |posthacking|mike
|
|
||||||
peet's coffee|basketball |joe
|
|
||||||
hightops |basketball |sally
|
|
||||||
(3 rows)
|
|
||||||
|
|
||||||
which doesn't appear to agree with the contents of the underlying
|
|
||||||
relations:
|
|
||||||
|
|
||||||
regression=> SELECT * FROM hobbies_r;
|
|
||||||
name |person
|
|
||||||
-----------+------
|
|
||||||
posthacking|mike
|
|
||||||
posthacking|jeff
|
|
||||||
basketball |joe
|
|
||||||
basketball |sally
|
|
||||||
skywalking |
|
|
||||||
(5 rows)
|
|
||||||
|
|
||||||
regression=> SELECT * FROM equipment_r;
|
|
||||||
name |hobby
|
|
||||||
-------------+-----------
|
|
||||||
advil |posthacking
|
|
||||||
peet's coffee|posthacking
|
|
||||||
hightops |basketball
|
|
||||||
guts |skywalking
|
|
||||||
(4 rows)
|
|
||||||
|
|
||||||
I'd have expected an output along the lines of
|
|
||||||
|
|
||||||
advil |posthacking|mike
|
|
||||||
peet's coffee|posthacking|mike
|
|
||||||
hightops |basketball |joe
|
|
||||||
hightops |basketball |sally
|
|
||||||
|
|
||||||
Is the regression test's expected output wrong, or am I misunderstanding
|
|
||||||
what this query is supposed to do? Is there any documentation anywhere
|
|
||||||
about how SQL functions returning multiple tuples are supposed to
|
|
||||||
behave?
|
|
||||||
|
|
||||||
regards, tom lane
|
|
||||||
|
|
||||||
************
|
|
||||||
|
|
||||||
|
|
||||||
From owner-pgsql-hackers@hub.org Thu Sep 23 11:03:19 1999
|
|
||||||
Received: from hub.org (hub.org [216.126.84.1])
|
|
||||||
by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id LAA16211
|
|
||||||
for <maillist@candle.pha.pa.us>; Thu, 23 Sep 1999 11:03:17 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [216.126.84.1])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id KAA58151;
|
|
||||||
Thu, 23 Sep 1999 10:53:46 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-hackers@hub.org)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Thu, 23 Sep 1999 10:53:05 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost)
|
|
||||||
by hub.org (8.9.3/8.9.3) id KAA57948
|
|
||||||
for pgsql-hackers-outgoing; Thu, 23 Sep 1999 10:52:23 -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 KAA57841
|
|
||||||
for <hackers@postgreSQL.org>; Thu, 23 Sep 1999 10:51:50 -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 KAA14211;
|
|
||||||
Thu, 23 Sep 1999 10:51:10 -0400 (EDT)
|
|
||||||
To: Andreas Zeugswetter <andreas.zeugswetter@telecom.at>
|
|
||||||
cc: hackers@postgreSQL.org
|
|
||||||
Subject: Re: [HACKERS] Progress report: buffer refcount bugs and SQL functions
|
|
||||||
In-reply-to: Your message of Thu, 23 Sep 1999 10:07:24 +0200
|
|
||||||
<37E9DFBC.5C0978F@telecom.at>
|
|
||||||
Date: Thu, 23 Sep 1999 10:51:10 -0400
|
|
||||||
Message-ID: <14209.938098270@sss.pgh.pa.us>
|
|
||||||
From: Tom Lane <tgl@sss.pgh.pa.us>
|
|
||||||
Sender: owner-pgsql-hackers@postgreSQL.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
Andreas Zeugswetter <andreas.zeugswetter@telecom.at> writes:
|
|
||||||
> That is what I use it for. I have never used it with a
|
|
||||||
> returns setof function, but reading the comments in the regression test,
|
|
||||||
> -- mike needs advil and peet's coffee,
|
|
||||||
> -- joe and sally need hightops, and
|
|
||||||
> -- everyone else is fine.
|
|
||||||
> it looks like the results you expected are correct, and currently the
|
|
||||||
> wrong result is given.
|
|
||||||
|
|
||||||
Yes, I have concluded the same (and partially fixed it, per my previous
|
|
||||||
message).
|
|
||||||
|
|
||||||
> Those that don't have a hobbie should return name|NULL|NULL. A hobbie
|
|
||||||
> that does'nt need equipment name|hobbie|NULL.
|
|
||||||
|
|
||||||
That's a good point. Currently (both with and without my uncommitted
|
|
||||||
fix) you get *no* rows out from ExecTargetList if there are any Iters
|
|
||||||
that return empty result sets. It might be more reasonable to treat an
|
|
||||||
empty result set as if it were NULL, which would give the behavior you
|
|
||||||
suggest.
|
|
||||||
|
|
||||||
This would be an easy change to my current patch, and I'm prepared to
|
|
||||||
make it before committing what I have, if people agree that that's a
|
|
||||||
more reasonable definition. Comments?
|
|
||||||
|
|
||||||
regards, tom lane
|
|
||||||
|
|
||||||
************
|
|
||||||
|
|
||||||
|
|
||||||
From owner-pgsql-hackers@hub.org Thu Sep 23 04:31:15 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 EAA11344
|
|
||||||
for <maillist@candle.pha.pa.us>; Thu, 23 Sep 1999 04:31:15 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [216.126.84.1]) by renoir.op.net (o1/$ Revision: 1.18 $) with ESMTP id EAA05350 for <maillist@candle.pha.pa.us>; Thu, 23 Sep 1999 04:24:29 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [216.126.84.1])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id EAA85679;
|
|
||||||
Thu, 23 Sep 1999 04:16:26 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-hackers@hub.org)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Thu, 23 Sep 1999 04:09:52 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost)
|
|
||||||
by hub.org (8.9.3/8.9.3) id EAA84708
|
|
||||||
for pgsql-hackers-outgoing; Thu, 23 Sep 1999 04:08:57 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-hackers@postgreSQL.org)
|
|
||||||
Received: from gandalf.telecom.at (gandalf.telecom.at [194.118.26.84])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id EAA84632
|
|
||||||
for <hackers@postgresql.org>; Thu, 23 Sep 1999 04:08:03 -0400 (EDT)
|
|
||||||
(envelope-from andreas.zeugswetter@telecom.at)
|
|
||||||
Received: from telecom.at (w0188000580.f000.d0188.sd.spardat.at [172.18.65.249])
|
|
||||||
by gandalf.telecom.at (xxx/xxx) with ESMTP id KAA195294
|
|
||||||
for <hackers@postgresql.org>; Thu, 23 Sep 1999 10:07:27 +0200
|
|
||||||
Message-ID: <37E9DFBC.5C0978F@telecom.at>
|
|
||||||
Date: Thu, 23 Sep 1999 10:07:24 +0200
|
|
||||||
From: Andreas Zeugswetter <andreas.zeugswetter@telecom.at>
|
|
||||||
X-Mailer: Mozilla 4.61 [en] (Win95; I)
|
|
||||||
X-Accept-Language: en
|
|
||||||
MIME-Version: 1.0
|
|
||||||
To: hackers@postgreSQL.org
|
|
||||||
Subject: Re: [HACKERS] Progress report: buffer refcount bugs and SQL functions
|
|
||||||
Content-Type: text/plain; charset=us-ascii
|
|
||||||
Content-Transfer-Encoding: 7bit
|
|
||||||
Sender: owner-pgsql-hackers@postgreSQL.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
> Is the regression test's expected output wrong, or am I
|
|
||||||
> misunderstanding
|
|
||||||
> what this query is supposed to do? Is there any
|
|
||||||
> documentation anywhere
|
|
||||||
> about how SQL functions returning multiple tuples are supposed to
|
|
||||||
> behave?
|
|
||||||
|
|
||||||
They are supposed to behave somewhat like a view.
|
|
||||||
Not all rows are necessarily fetched.
|
|
||||||
If used in a context that needs a single row answer,
|
|
||||||
and the answer has multiple rows it is supposed to
|
|
||||||
runtime elog. Like in:
|
|
||||||
|
|
||||||
select * from tbl where col=funcreturningmultipleresults();
|
|
||||||
-- this must elog
|
|
||||||
|
|
||||||
while this is ok:
|
|
||||||
select * from tbl where col in (select funcreturningmultipleresults());
|
|
||||||
|
|
||||||
But the caller could only fetch the first row if he wanted.
|
|
||||||
|
|
||||||
The nested notation is supposed to call the function passing it the tuple
|
|
||||||
as the first argument. This is what can be used to "fake" a column
|
|
||||||
onto a table (computed column).
|
|
||||||
That is what I use it for. I have never used it with a
|
|
||||||
returns setof function, but reading the comments in the regression test,
|
|
||||||
-- mike needs advil and peet's coffee,
|
|
||||||
-- joe and sally need hightops, and
|
|
||||||
-- everyone else is fine.
|
|
||||||
it looks like the results you expected are correct, and currently the
|
|
||||||
wrong result is given.
|
|
||||||
|
|
||||||
But I think this query could also elog whithout removing substantial
|
|
||||||
functionality.
|
|
||||||
|
|
||||||
SELECT p.name, p.hobbies.name, p.hobbies.equipment.name FROM person p;
|
|
||||||
|
|
||||||
Actually for me it would be intuitive, that this query return one row per
|
|
||||||
person, but elog on those that have more than one hobbie or a hobbie that
|
|
||||||
needs more than one equipment. Those that don't have a hobbie should
|
|
||||||
return name|NULL|NULL. A hobbie that does'nt need equipment name|hobbie|NULL.
|
|
||||||
|
|
||||||
Andreas
|
|
||||||
|
|
||||||
************
|
|
||||||
|
|
||||||
|
|
||||||
From owner-pgsql-hackers@hub.org Wed Sep 22 22:01:07 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 WAA16360
|
|
||||||
for <maillist@candle.pha.pa.us>; Wed, 22 Sep 1999 22:01:05 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [216.126.84.1]) by renoir.op.net (o1/$ Revision: 1.18 $) with ESMTP id VAA08386 for <maillist@candle.pha.pa.us>; Wed, 22 Sep 1999 21:37:24 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [216.126.84.1])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id VAA88083;
|
|
||||||
Wed, 22 Sep 1999 21:28:11 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-hackers@hub.org)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Wed, 22 Sep 1999 21:27:48 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost)
|
|
||||||
by hub.org (8.9.3/8.9.3) id VAA87938
|
|
||||||
for pgsql-hackers-outgoing; Wed, 22 Sep 1999 21:26:52 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-hackers@postgreSQL.org)
|
|
||||||
Received: from orion.SAPserv.Hamburg.dsh.de (Tpolaris2.sapham.debis.de [53.2.131.8])
|
|
||||||
by hub.org (8.9.3/8.9.3) with SMTP id VAA87909
|
|
||||||
for <pgsql-hackers@postgresql.org>; Wed, 22 Sep 1999 21:26:36 -0400 (EDT)
|
|
||||||
(envelope-from wieck@debis.com)
|
|
||||||
Received: by orion.SAPserv.Hamburg.dsh.de
|
|
||||||
for pgsql-hackers@postgresql.org
|
|
||||||
id m11TxXw-0003kLC; Thu, 23 Sep 99 03:19 MET DST
|
|
||||||
Message-Id: <m11TxXw-0003kLC@orion.SAPserv.Hamburg.dsh.de>
|
|
||||||
From: wieck@debis.com (Jan Wieck)
|
|
||||||
Subject: Re: [HACKERS] Progress report: buffer refcount bugs and SQL functions
|
|
||||||
To: tgl@sss.pgh.pa.us (Tom Lane)
|
|
||||||
Date: Thu, 23 Sep 1999 03:19:39 +0200 (MET DST)
|
|
||||||
Cc: pgsql-hackers@postgreSQL.org
|
|
||||||
Reply-To: wieck@debis.com (Jan Wieck)
|
|
||||||
In-Reply-To: <6408.938045139@sss.pgh.pa.us> from "Tom Lane" at Sep 22, 99 08:05:39 pm
|
|
||||||
X-Mailer: ELM [version 2.4 PL25]
|
|
||||||
Content-Type: text
|
|
||||||
Sender: owner-pgsql-hackers@postgreSQL.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
Tom Lane wrote:
|
|
||||||
|
|
||||||
> [...]
|
|
||||||
>
|
|
||||||
> What I am wondering, though, is whether this addition is actually
|
|
||||||
> necessary, or is it a bug that the functions aren't run to completion
|
|
||||||
> in the first place? I don't really understand the semantics of this
|
|
||||||
> "nested dot notation". I suppose it is a Berkeleyism; I can't find
|
|
||||||
> anything about it in the SQL92 document. The test cases shown in the
|
|
||||||
> misc regress test seem peculiar, not to say wrong. For example:
|
|
||||||
>
|
|
||||||
> [...]
|
|
||||||
>
|
|
||||||
> Is the regression test's expected output wrong, or am I misunderstanding
|
|
||||||
> what this query is supposed to do? Is there any documentation anywhere
|
|
||||||
> about how SQL functions returning multiple tuples are supposed to
|
|
||||||
> behave?
|
|
||||||
|
|
||||||
I've said some time (maybe too long) ago, that SQL functions
|
|
||||||
returning tuple sets are broken in general. This nested dot
|
|
||||||
notation (which I think is an artefact from the postquel
|
|
||||||
querylanguage) is implemented via set functions.
|
|
||||||
|
|
||||||
Set functions have total different semantics from all other
|
|
||||||
functions. First they don't really return a tuple set as
|
|
||||||
someone might think - all that screwed up code instead
|
|
||||||
simulates that they return something you could consider a
|
|
||||||
scan of the last SQL statement in the function. Then, on
|
|
||||||
each subsequent call inside of the same command, they return
|
|
||||||
a "tupletable slot" containing the next found tuple (that's
|
|
||||||
why their Func node is mangled up after the first call).
|
|
||||||
|
|
||||||
Second they have a targetlist what I think was originally
|
|
||||||
intended to extract attributes out of the tuples returned
|
|
||||||
when the above scan is asked to get the next tuple. But as I
|
|
||||||
read the code it invokes the function again and this might
|
|
||||||
cause the resource leakage you see.
|
|
||||||
|
|
||||||
Third, all this seems to never have been implemented
|
|
||||||
(thought?) to the end. A targetlist doesn't make sense at
|
|
||||||
this place because it could at max contain a single attribute
|
|
||||||
- so a single attno would have the same power. And if set
|
|
||||||
functions could appear in the rangetable (FROM clause), than
|
|
||||||
they would be treated as that and regular Var nodes in the
|
|
||||||
query would do it.
|
|
||||||
|
|
||||||
I think you shouldn't really care for that regression test
|
|
||||||
and maybe we should disable set functions until we really
|
|
||||||
implement stored procedures returning sets in the rangetable.
|
|
||||||
|
|
||||||
Set functions where planned by Stonebraker's team as
|
|
||||||
something that today is called stored procedures. But AFAIK
|
|
||||||
they never reached the useful state because even in Postgres
|
|
||||||
4.2 you haven't been able to get more than one attribute out
|
|
||||||
of a set function. It was a feature of the postquel
|
|
||||||
querylanguage that you could get one attribute from a set
|
|
||||||
function via
|
|
||||||
|
|
||||||
RETRIEVE (attributename(setfuncname()))
|
|
||||||
|
|
||||||
While working on the constraint triggers I've came across
|
|
||||||
another regression test (triggers :-) that's errorneous too.
|
|
||||||
The funny_dup17 trigger proc executes an INSERT into the same
|
|
||||||
relation where it get fired for by a previous INSERT. And it
|
|
||||||
stops this recursion only if it reaches a nesting level of
|
|
||||||
17, which could only occur if it is fired DURING the
|
|
||||||
execution of it's own SPI_exec(). After Vadim quouted some
|
|
||||||
SQL92 definitions about when constraint checks and triggers
|
|
||||||
are to be executed, I decided to fire regular triggers at the
|
|
||||||
end of a query too. Thus, there is absolutely no nesting
|
|
||||||
possible for AFTER triggers resulting in an endless loop.
|
|
||||||
|
|
||||||
|
|
||||||
Jan
|
|
||||||
|
|
||||||
--
|
|
||||||
|
|
||||||
#======================================================================#
|
|
||||||
# It's easier to get forgiveness for being wrong than for being right. #
|
|
||||||
# Let's break this rule - forgive me. #
|
|
||||||
#========================================= wieck@debis.com (Jan Wieck) #
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
************
|
|
||||||
|
|
||||||
|
|
||||||
From owner-pgsql-hackers@hub.org Thu Sep 23 11:01:06 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 LAA16162
|
|
||||||
for <maillist@candle.pha.pa.us>; Thu, 23 Sep 1999 11:01:04 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [216.126.84.1]) by renoir.op.net (o1/$ Revision: 1.18 $) with ESMTP id KAA28544 for <maillist@candle.pha.pa.us>; Thu, 23 Sep 1999 10:45:54 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [216.126.84.1])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id KAA52943;
|
|
||||||
Thu, 23 Sep 1999 10:20:51 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-hackers@hub.org)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Thu, 23 Sep 1999 10:19:58 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost)
|
|
||||||
by hub.org (8.9.3/8.9.3) id KAA52472
|
|
||||||
for pgsql-hackers-outgoing; Thu, 23 Sep 1999 10:19:03 -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 KAA52431
|
|
||||||
for <pgsql-hackers@postgresql.org>; Thu, 23 Sep 1999 10:18:47 -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 KAA13253;
|
|
||||||
Thu, 23 Sep 1999 10:18:02 -0400 (EDT)
|
|
||||||
To: wieck@debis.com (Jan Wieck)
|
|
||||||
cc: pgsql-hackers@postgreSQL.org
|
|
||||||
Subject: Re: [HACKERS] Progress report: buffer refcount bugs and SQL functions
|
|
||||||
In-reply-to: Your message of Thu, 23 Sep 1999 03:19:39 +0200 (MET DST)
|
|
||||||
<m11TxXw-0003kLC@orion.SAPserv.Hamburg.dsh.de>
|
|
||||||
Date: Thu, 23 Sep 1999 10:18:01 -0400
|
|
||||||
Message-ID: <13251.938096281@sss.pgh.pa.us>
|
|
||||||
From: Tom Lane <tgl@sss.pgh.pa.us>
|
|
||||||
Sender: owner-pgsql-hackers@postgreSQL.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
wieck@debis.com (Jan Wieck) writes:
|
|
||||||
> Tom Lane wrote:
|
|
||||||
>> What I am wondering, though, is whether this addition is actually
|
|
||||||
>> necessary, or is it a bug that the functions aren't run to completion
|
|
||||||
>> in the first place?
|
|
||||||
|
|
||||||
> I've said some time (maybe too long) ago, that SQL functions
|
|
||||||
> returning tuple sets are broken in general.
|
|
||||||
|
|
||||||
Indeed they are. Try this on for size (using the regression database):
|
|
||||||
|
|
||||||
SELECT p.name, p.hobbies.equipment.name FROM person p;
|
|
||||||
SELECT p.hobbies.equipment.name, p.name FROM person p;
|
|
||||||
|
|
||||||
You get different result sets!?
|
|
||||||
|
|
||||||
The problem in this example is that ExecTargetList returns the isDone
|
|
||||||
flag from the last targetlist entry, regardless of whether there are
|
|
||||||
incomplete iterations in previous entries. More generally, the buffer
|
|
||||||
leak problem that I started with only occurs if some Iter nodes are not
|
|
||||||
run to completion --- but execQual.c has no mechanism to make sure that
|
|
||||||
they have all reached completion simultaneously.
|
|
||||||
|
|
||||||
What we really need to make functions-returning-sets work properly is
|
|
||||||
an implementation somewhat like aggregate functions. We need to make
|
|
||||||
a list of all the Iter nodes present in a targetlist and cycle through
|
|
||||||
the values returned by each in a methodical fashion (run the rightmost
|
|
||||||
through its full cycle, then advance the next-to-rightmost one value,
|
|
||||||
run the rightmost through its cycle again, etc etc). Also there needs
|
|
||||||
to be an understanding of the hierarchy when an Iter appears in the
|
|
||||||
arguments of another Iter's function. (You cycle the upper one for
|
|
||||||
*each* set of arguments created by cycling its sub-Iters.)
|
|
||||||
|
|
||||||
I am not particularly interested in working on this feature right now,
|
|
||||||
since AFAIK it's a Berkeleyism not found in SQL92. What I've done
|
|
||||||
is to hack ExecTargetList so that it behaves semi-sanely when there's
|
|
||||||
more than one Iter at the top level of the target list --- it still
|
|
||||||
doesn't really give the right answer, but at least it will keep
|
|
||||||
generating tuples until all the Iters are done at the same time.
|
|
||||||
It happens that that's enough to give correct answers for the examples
|
|
||||||
shown in the misc regress test. Even when it fails to generate all
|
|
||||||
the possible combinations, there will be no buffer leaks.
|
|
||||||
|
|
||||||
So, I'm going to declare victory and go home ;-). We ought to add a
|
|
||||||
TODO item along the lines of
|
|
||||||
* Functions returning sets don't really work right
|
|
||||||
in hopes that someone will feel like tackling this someday.
|
|
||||||
|
|
||||||
regards, tom lane
|
|
||||||
|
|
||||||
************
|
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -1,119 +0,0 @@
|
|||||||
From owner-pgsql-general@hub.org Fri Oct 9 18:22:09 1998
|
|
||||||
Received: from hub.org (majordom@hub.org [209.47.148.200])
|
|
||||||
by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id SAA04220
|
|
||||||
for <maillist@candle.pha.pa.us>; Fri, 9 Oct 1998 18:22:08 -0400 (EDT)
|
|
||||||
Received: from localhost (majordom@localhost)
|
|
||||||
by hub.org (8.8.8/8.8.8) with SMTP id SAA26960;
|
|
||||||
Fri, 9 Oct 1998 18:18:29 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-general@hub.org)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Fri, 09 Oct 1998 18:18:07 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost)
|
|
||||||
by hub.org (8.8.8/8.8.8) id SAA26917
|
|
||||||
for pgsql-general-outgoing; Fri, 9 Oct 1998 18:18:04 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-general@postgreSQL.org)
|
|
||||||
X-Authentication-Warning: hub.org: majordom set sender to owner-pgsql-general@postgreSQL.org using -f
|
|
||||||
Received: from gecko.statsol.com (gecko.statsol.com [198.11.51.133])
|
|
||||||
by hub.org (8.8.8/8.8.8) with ESMTP id SAA26904
|
|
||||||
for <pgsql-general@postgresql.org>; Fri, 9 Oct 1998 18:17:46 -0400 (EDT)
|
|
||||||
(envelope-from statsol@statsol.com)
|
|
||||||
Received: from gecko (gecko [198.11.51.133])
|
|
||||||
by gecko.statsol.com (8.9.0/8.9.0) with SMTP id SAA00557
|
|
||||||
for <pgsql-general@postgresql.org>; Fri, 9 Oct 1998 18:18:00 -0400 (EDT)
|
|
||||||
Date: Fri, 9 Oct 1998 18:18:00 -0400 (EDT)
|
|
||||||
From: Steve Doliov <statsol@statsol.com>
|
|
||||||
X-Sender: statsol@gecko
|
|
||||||
To: pgsql-general@postgreSQL.org
|
|
||||||
Subject: Re: [GENERAL] Making NULLs visible.
|
|
||||||
Message-ID: <Pine.GSO.3.96.981009181716.545B-100000@gecko>
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: TEXT/PLAIN; charset=US-ASCII
|
|
||||||
Sender: owner-pgsql-general@postgreSQL.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
On Fri, 9 Oct 1998, Bruce Momjian wrote:
|
|
||||||
|
|
||||||
> [Charset iso-8859-1 unsupported, filtering to ASCII...]
|
|
||||||
> > > Yes, \ always outputs as \\, excepts someone changed it last week, and I
|
|
||||||
> > > am requesting a reversal. Do you like the \N if it is unique?
|
|
||||||
> >
|
|
||||||
> > Well, it's certainly clear, but could be confused with \n (newline). Can we
|
|
||||||
> > have \0 instead?
|
|
||||||
>
|
|
||||||
> Yes, but it is uppercase. \0 looks like an octal number to me, and I
|
|
||||||
> think we even output octals sometimes, don't we?
|
|
||||||
>
|
|
||||||
|
|
||||||
my first suggestion may have been hare-brained, but why not just make the
|
|
||||||
specifics of the output user-configurable. So if the user chooses \0, so
|
|
||||||
be it, if the user chooses \N so be it, if the user likes NULL so be it.
|
|
||||||
but the option would only have one value per database at any given point
|
|
||||||
in time. so database x could use \N on tuesday and NULL on wednesday, but
|
|
||||||
database x could never have two references to the characters(s) used to
|
|
||||||
represent a null value.
|
|
||||||
|
|
||||||
steve
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
From owner-pgsql-general@hub.org Sun Oct 11 17:31:08 1998
|
|
||||||
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 RAA20043
|
|
||||||
for <maillist@candle.pha.pa.us>; Sun, 11 Oct 1998 17:31:02 -0400 (EDT)
|
|
||||||
Received: from hub.org (majordom@hub.org [209.47.148.200]) by renoir.op.net (o1/$ Revision: 1.18 $) with ESMTP id RAA03069 for <maillist@candle.pha.pa.us>; Sun, 11 Oct 1998 17:10:34 -0400 (EDT)
|
|
||||||
Received: from localhost (majordom@localhost)
|
|
||||||
by hub.org (8.8.8/8.8.8) with SMTP id QAA10856;
|
|
||||||
Sun, 11 Oct 1998 16:57:34 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-general@hub.org)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Sun, 11 Oct 1998 16:53:35 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost)
|
|
||||||
by hub.org (8.8.8/8.8.8) id QAA10393
|
|
||||||
for pgsql-general-outgoing; Sun, 11 Oct 1998 16:53:34 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-general@postgreSQL.org)
|
|
||||||
X-Authentication-Warning: hub.org: majordom set sender to owner-pgsql-general@postgreSQL.org using -f
|
|
||||||
Received: from mail1.panix.com (mail1.panix.com [166.84.0.212])
|
|
||||||
by hub.org (8.8.8/8.8.8) with ESMTP id QAA10378
|
|
||||||
for <pgsql-general@postgreSQL.org>; Sun, 11 Oct 1998 16:53:28 -0400 (EDT)
|
|
||||||
(envelope-from tomg@admin.nrnet.org)
|
|
||||||
Received: from mailhost.nrnet.org (root@mailhost.nrnet.org [166.84.192.39])
|
|
||||||
by mail1.panix.com (8.8.8/8.8.8/PanixM1.3) with ESMTP id QAA16311
|
|
||||||
for <pgsql-general@postgreSQL.org>; Sun, 11 Oct 1998 16:53:24 -0400 (EDT)
|
|
||||||
Received: from admin.nrnet.org (uucp@localhost)
|
|
||||||
by mailhost.nrnet.org (8.8.7/8.8.4) with UUCP
|
|
||||||
id QAA16345 for pgsql-general@postgreSQL.org; Sun, 11 Oct 1998 16:28:47 -0400
|
|
||||||
Received: from localhost (tomg@localhost)
|
|
||||||
by admin.nrnet.org (8.8.7/8.8.7) with SMTP id QAA11569
|
|
||||||
for <pgsql-general@postgreSQL.org>; Sun, 11 Oct 1998 16:28:41 -0400
|
|
||||||
Date: Sun, 11 Oct 1998 16:28:41 -0400 (EDT)
|
|
||||||
From: Thomas Good <tomg@admin.nrnet.org>
|
|
||||||
To: pgsql-general@postgreSQL.org
|
|
||||||
Subject: Re: [GENERAL] Making NULLs visible.
|
|
||||||
In-Reply-To: <Pine.GSO.3.96.981009181716.545B-100000@gecko>
|
|
||||||
Message-ID: <Pine.LNX.3.96.981011161908.11556A-100000@admin.nrnet.org>
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: TEXT/PLAIN; charset=US-ASCII
|
|
||||||
Sender: owner-pgsql-general@postgreSQL.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
Watching all this go by...as a guy who has to move alot of data
|
|
||||||
from legacy dbs to postgres, I've gotten used to \N being a null.
|
|
||||||
|
|
||||||
My vote, if I were allowed to cast one, would be to have one null
|
|
||||||
and that would be the COPY command null. I have no difficulty
|
|
||||||
distinguishing a null from a newline...
|
|
||||||
|
|
||||||
At the pgsql command prompt I would find seeing \N rather reassuring.
|
|
||||||
I've seen alot of these little guys.
|
|
||||||
|
|
||||||
---------- Sisters of Charity Medical Center ----------
|
|
||||||
Department of Psychiatry
|
|
||||||
----
|
|
||||||
Thomas Good <tomg@q8.nrnet.org>
|
|
||||||
Coordinator, North Richmond C.M.H.C. Information Systems
|
|
||||||
75 Vanderbilt Ave, Quarters 8 Phone: 718-354-5528
|
|
||||||
Staten Island, NY 10304 Fax: 718-354-5056
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,55 +0,0 @@
|
|||||||
From owner-pgsql-hackers@hub.org Sun Aug 2 20:01:13 1998
|
|
||||||
Received: from renoir.op.net (root@renoir.op.net [209.152.193.4])
|
|
||||||
by candle.pha.pa.us (8.8.5/8.8.5) with ESMTP id UAA15937
|
|
||||||
for <maillist@candle.pha.pa.us>; Sun, 2 Aug 1998 20:01:11 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [209.47.148.200]) by renoir.op.net (o1/$ Revision: 1.18 $) with ESMTP id TAA01026 for <maillist@candle.pha.pa.us>; Sun, 2 Aug 1998 19:33:53 -0400 (EDT)
|
|
||||||
Received: from localhost (majordom@localhost) by hub.org (8.8.8/8.7.5) with SMTP id TAA19878; Sun, 2 Aug 1998 19:30:59 -0400 (EDT)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Sun, 02 Aug 1998 19:28:23 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost) by hub.org (8.8.8/8.7.5) id TAA19534 for pgsql-hackers-outgoing; Sun, 2 Aug 1998 19:28:22 -0400 (EDT)
|
|
||||||
Received: from sss.sss.pgh.pa.us (sss.pgh.pa.us [206.210.65.6]) by hub.org (8.8.8/8.7.5) with ESMTP id TAA19521 for <pgsql-hackers@postgreSQL.org>; Sun, 2 Aug 1998 19:28:15 -0400 (EDT)
|
|
||||||
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 TAA22594
|
|
||||||
for <pgsql-hackers@postgreSQL.org>; Sun, 2 Aug 1998 19:28:13 -0400 (EDT)
|
|
||||||
To: pgsql-hackers@postgreSQL.org
|
|
||||||
Subject: [HACKERS] TODO item: make pg_shadow updates more robust
|
|
||||||
Date: Sun, 02 Aug 1998 19:28:13 -0400
|
|
||||||
Message-ID: <22591.902100493@sss.pgh.pa.us>
|
|
||||||
From: Tom Lane <tgl@sss.pgh.pa.us>
|
|
||||||
Sender: owner-pgsql-hackers@hub.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: ROr
|
|
||||||
|
|
||||||
I learned the hard way last night that the postmaster's password
|
|
||||||
authentication routines don't look at the pg_shadow table. They
|
|
||||||
look at a separate file named pg_pwd, which certain backend operations
|
|
||||||
will update from pg_shadow. (This is not documented in any user
|
|
||||||
documentation that I could find; I had to burrow into
|
|
||||||
src/backend/commands/user.c to discover it.)
|
|
||||||
|
|
||||||
Unfortunately, if a clueless dbadmin (like me ;-)) tries to update
|
|
||||||
password data with the obvious thing,
|
|
||||||
update pg_shadow set passwd = 'xxxxx' where usename = 'yyyy';
|
|
||||||
pg_pwd doesn't get fixed.
|
|
||||||
|
|
||||||
A more drastic problem is that pg_dump believes it can save and
|
|
||||||
restore pg_shadow data using "copy". Following an initdb and restore
|
|
||||||
from a pg_dump -z script, pg_shadow will look just fine, but only
|
|
||||||
the database admin will be listed in pg_pwd. This is likely to provoke
|
|
||||||
some confusion, IMHO.
|
|
||||||
|
|
||||||
As a short-term thing, the fact that you *must* set passwords with
|
|
||||||
ALTER USER ought to be documented, preferably someplace where a
|
|
||||||
dbadmin who's never heard of ALTER USER is likely to find it.
|
|
||||||
|
|
||||||
As a longer-term thing, I think it would be far better if ordinary
|
|
||||||
SQL operations on pg_shadow just did the right thing. Wouldn't it
|
|
||||||
be possible to implement copying to pg_pwd by means of a trigger on
|
|
||||||
pg_shadow updates, or something like that?
|
|
||||||
|
|
||||||
(I'm afraid that pg_dump -z is pretty well broken for operations on
|
|
||||||
a password-protected database, btw. Has anyone used it successfully
|
|
||||||
in that situation?)
|
|
||||||
|
|
||||||
regards, tom lane
|
|
||||||
|
|
||||||
|
|
@ -1,805 +0,0 @@
|
|||||||
From owner-pgsql-hackers@hub.org Fri Sep 4 00:47:06 1998
|
|
||||||
Received: from renoir.op.net (root@renoir.op.net [209.152.193.4])
|
|
||||||
by candle.pha.pa.us (8.8.5/8.8.5) with ESMTP id AAA01047
|
|
||||||
for <maillist@candle.pha.pa.us>; Fri, 4 Sep 1998 00:47:05 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [209.47.148.200]) by renoir.op.net (o1/$ Revision: 1.18 $) with ESMTP id XAA02044 for <maillist@candle.pha.pa.us>; Thu, 3 Sep 1998 23:11:07 -0400 (EDT)
|
|
||||||
Received: from localhost (majordom@localhost) by hub.org (8.8.8/8.7.5) with SMTP id XAA27418; Thu, 3 Sep 1998 23:06:16 -0400 (EDT)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Thu, 03 Sep 1998 23:04:11 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost) by hub.org (8.8.8/8.7.5) id XAA27185 for pgsql-hackers-outgoing; Thu, 3 Sep 1998 23:04:09 -0400 (EDT)
|
|
||||||
Received: from dune.krs.ru (dune.krs.ru [195.161.16.38]) by hub.org (8.8.8/8.7.5) with ESMTP id XAA27169 for <hackers@postgreSQL.org>; Thu, 3 Sep 1998 23:03:59 -0400 (EDT)
|
|
||||||
Received: from krs.ru (localhost.krs.ru [127.0.0.1])
|
|
||||||
by dune.krs.ru (8.8.8/8.8.8) with ESMTP id LAA10059;
|
|
||||||
Fri, 4 Sep 1998 11:03:00 +0800 (KRSS)
|
|
||||||
(envelope-from vadim@krs.ru)
|
|
||||||
Message-ID: <35EF5864.E5142D35@krs.ru>
|
|
||||||
Date: Fri, 04 Sep 1998 11:03:00 +0800
|
|
||||||
From: Vadim Mikheev <vadim@krs.ru>
|
|
||||||
Organization: OJSC Rostelecom (Krasnoyarsk)
|
|
||||||
X-Mailer: Mozilla 4.05 [en] (X11; I; FreeBSD 2.2.6-RELEASE i386)
|
|
||||||
MIME-Version: 1.0
|
|
||||||
To: "D'Arcy J.M. Cain" <darcy@druid.net>
|
|
||||||
CC: "Thomas G. Lockhart" <lockhart@alumni.caltech.edu>, hackers@postgreSQL.org
|
|
||||||
Subject: Re: [HACKERS] Adding PRIMARY KEY info
|
|
||||||
References: <m0zEaoV-00006JC@druid.net>
|
|
||||||
Content-Type: text/plain; charset=us-ascii
|
|
||||||
Content-Transfer-Encoding: 7bit
|
|
||||||
Sender: owner-pgsql-hackers@hub.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
D'Arcy J.M. Cain wrote:
|
|
||||||
>
|
|
||||||
> Thus spake Vadim Mikheev
|
|
||||||
> > Imho, indices should be used/created for FOREIGN keys and so pg_index
|
|
||||||
> > is good place for both PRIMARY and FOREIGN keys infos.
|
|
||||||
>
|
|
||||||
> Are you sure? I don't know about implementing it but it seems more
|
|
||||||
> like an attribute thing rather than an index thing. Certainly from a
|
|
||||||
> database design viewpoint you want to refer to the fields, not the
|
|
||||||
> index on them. If you put it into the index then you have to do
|
|
||||||
> an extra join to get the information.
|
|
||||||
>
|
|
||||||
> Perhaps you have to do the extra join anyway for other purposes so it
|
|
||||||
> may not matter. All I want is to be able to be able to extract the
|
|
||||||
> field that the designer specified as the key. As long as I can design
|
|
||||||
> a select statement that gives me that I don't much care how it is
|
|
||||||
> implemented. I'll cache the information anyway so it won't have a
|
|
||||||
> huge impact on my programs.
|
|
||||||
|
|
||||||
First, let me note that you have to add int28 field to pg_class,
|
|
||||||
not just oid field, to know what attributeS are in primary key
|
|
||||||
(we support multi-attribute primary keys).
|
|
||||||
This could be done...
|
|
||||||
But what about foreign and unique (!) keys ?
|
|
||||||
There may be _many_ foreign/unique keys defined for one table!
|
|
||||||
And so foreign/unique keys info have to be stored somewhere else,
|
|
||||||
not in pg_class.
|
|
||||||
|
|
||||||
pg_index is good place for all _3_ key types because of:
|
|
||||||
|
|
||||||
1. index should be created for each foreign key -
|
|
||||||
just for performance.
|
|
||||||
2. pg_index already has int28 field for key attributes.
|
|
||||||
3. pg_index already has indisunique (note that foreign keys
|
|
||||||
may reference unique keys, not just primary ones).
|
|
||||||
|
|
||||||
- so we have just add two fields to pg_index:
|
|
||||||
|
|
||||||
bool indisprimary;
|
|
||||||
oid indreferenced;
|
|
||||||
^^^^^^^^^^^^^^^^^^
|
|
||||||
this is for foreign keys: oid of referenced relation'
|
|
||||||
primary/unique key index.
|
|
||||||
|
|
||||||
I agreed that indices are just implementation...
|
|
||||||
If you don't like to store key infos in pg_index then
|
|
||||||
new pg_key relation have to be added...
|
|
||||||
|
|
||||||
Comments ?
|
|
||||||
|
|
||||||
Vadim
|
|
||||||
|
|
||||||
|
|
||||||
From owner-pgsql-hackers@hub.org Sat Sep 5 02:01:13 1998
|
|
||||||
Received: from renoir.op.net (root@renoir.op.net [209.152.193.4])
|
|
||||||
by candle.pha.pa.us (8.8.5/8.8.5) with ESMTP id CAA14437
|
|
||||||
for <maillist@candle.pha.pa.us>; Sat, 5 Sep 1998 02:01:11 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [209.47.148.200]) by renoir.op.net (o1/$ Revision: 1.18 $) with ESMTP id BAA09928 for <maillist@candle.pha.pa.us>; Sat, 5 Sep 1998 01:48:32 -0400 (EDT)
|
|
||||||
Received: from localhost (majordom@localhost) by hub.org (8.8.8/8.7.5) with SMTP id BAA18282; Sat, 5 Sep 1998 01:43:16 -0400 (EDT)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Sat, 05 Sep 1998 01:41:40 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost) by hub.org (8.8.8/8.7.5) id BAA18241 for pgsql-hackers-outgoing; Sat, 5 Sep 1998 01:41:38 -0400 (EDT)
|
|
||||||
Received: from dune.krs.ru (dune.krs.ru [195.161.16.38]) by hub.org (8.8.8/8.7.5) with ESMTP id BAA18211; Sat, 5 Sep 1998 01:41:21 -0400 (EDT)
|
|
||||||
Received: from krs.ru (localhost.krs.ru [127.0.0.1])
|
|
||||||
by dune.krs.ru (8.8.8/8.8.8) with ESMTP id NAA20555;
|
|
||||||
Sat, 5 Sep 1998 13:40:44 +0800 (KRSS)
|
|
||||||
(envelope-from vadim@krs.ru)
|
|
||||||
Message-ID: <35F0CEDB.AD721090@krs.ru>
|
|
||||||
Date: Sat, 05 Sep 1998 13:40:43 +0800
|
|
||||||
From: Vadim Mikheev <vadim@krs.ru>
|
|
||||||
Organization: OJSC Rostelecom (Krasnoyarsk)
|
|
||||||
X-Mailer: Mozilla 4.05 [en] (X11; I; FreeBSD 2.2.6-RELEASE i386)
|
|
||||||
MIME-Version: 1.0
|
|
||||||
To: "D'Arcy J.M. Cain" <darcy@druid.net>
|
|
||||||
CC: hackers@postgreSQL.org, pgsql-core@postgreSQL.org
|
|
||||||
Subject: Re: [HACKERS] Adding PRIMARY KEY info
|
|
||||||
References: <m0zEvLK-00006FC@druid.net>
|
|
||||||
Content-Type: text/plain; charset=us-ascii
|
|
||||||
Content-Transfer-Encoding: 7bit
|
|
||||||
Sender: owner-pgsql-hackers@hub.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: ROr
|
|
||||||
|
|
||||||
D'Arcy J.M. Cain wrote:
|
|
||||||
>
|
|
||||||
> >
|
|
||||||
> > pg_index is good place for all _3_ key types because of:
|
|
||||||
> >
|
|
||||||
> > 1. index should be created for each foreign key -
|
|
||||||
> > just for performance.
|
|
||||||
> > 2. pg_index already has int28 field for key attributes.
|
|
||||||
> > 3. pg_index already has indisunique (note that foreign keys
|
|
||||||
> > may reference unique keys, not just primary ones).
|
|
||||||
> >
|
|
||||||
> > - so we have just add two fields to pg_index:
|
|
||||||
> >
|
|
||||||
> > bool indisprimary;
|
|
||||||
> > oid indreferenced;
|
|
||||||
> > ^^^^^^^^^^^^^^^^^^
|
|
||||||
> > this is for foreign keys: oid of referenced relation'
|
|
||||||
> > primary/unique key index.
|
|
||||||
>
|
|
||||||
> Sounds fine to me. Any chance of seeing this in 6.4?
|
|
||||||
|
|
||||||
I could add this (and FOREIGN key implementation) before
|
|
||||||
11-13 Sep... But not the ALTER TABLE ADD/DROP CONSTRAINT
|
|
||||||
stuff (ok for Entry SQL).
|
|
||||||
But we are in beta...
|
|
||||||
|
|
||||||
Comments?
|
|
||||||
|
|
||||||
> Nope, pg_index is fine by me. Now, once we have this, how do we find
|
|
||||||
> the index for a particular attribute? I can't seem to figure out the
|
|
||||||
> relationship between pg_attribute and pg_index. The chart in the docs
|
|
||||||
> suggests that indkey is the relation but I can't see any useful info
|
|
||||||
> there for joining the tables.
|
|
||||||
|
|
||||||
pg_index:
|
|
||||||
indrelid - oid of indexed relation
|
|
||||||
indkey - up to the 8 attnums
|
|
||||||
|
|
||||||
pg_attribute:
|
|
||||||
attrelid - oid of relation
|
|
||||||
attnum - ...
|
|
||||||
|
|
||||||
Without outer join you have to query pg_attribute for each
|
|
||||||
valid attnum from pg_index->indkey -:(
|
|
||||||
|
|
||||||
Vadim
|
|
||||||
|
|
||||||
|
|
||||||
From owner-pgsql-hackers@hub.org Tue Sep 21 05:31:11 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 FAA07543
|
|
||||||
for <maillist@candle.pha.pa.us>; Tue, 21 Sep 1999 05:31:09 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [216.126.84.1]) by renoir.op.net (o1/$ Revision: 1.18 $) with ESMTP id FAA19587 for <maillist@candle.pha.pa.us>; Tue, 21 Sep 1999 05:12:03 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [216.126.84.1])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id EAA55119;
|
|
||||||
Tue, 21 Sep 1999 04:48:48 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-hackers@hub.org)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Tue, 21 Sep 1999 04:45:33 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost)
|
|
||||||
by hub.org (8.9.3/8.9.3) id EAA54532
|
|
||||||
for pgsql-hackers-outgoing; Tue, 21 Sep 1999 04:44:35 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-hackers@postgreSQL.org)
|
|
||||||
Received: from orion.SAPserv.Hamburg.dsh.de (Tpolaris2.sapham.debis.de [53.2.131.8])
|
|
||||||
by hub.org (8.9.3/8.9.3) with SMTP id EAA54496
|
|
||||||
for <pgsql-hackers@postgreSQL.org>; Tue, 21 Sep 1999 04:44:13 -0400 (EDT)
|
|
||||||
(envelope-from wieck@debis.com)
|
|
||||||
Received: by orion.SAPserv.Hamburg.dsh.de
|
|
||||||
for pgsql-hackers@postgreSQL.org
|
|
||||||
id m11TLQP-0003kLC; Tue, 21 Sep 99 10:37 MET DST
|
|
||||||
Message-Id: <m11TLQP-0003kLC@orion.SAPserv.Hamburg.dsh.de>
|
|
||||||
From: wieck@debis.com (Jan Wieck)
|
|
||||||
Subject: [HACKERS] Re: Referential Integrity In PostgreSQL
|
|
||||||
To: pgsql-hackers@postgreSQL.org (PostgreSQL HACKERS)
|
|
||||||
Date: Tue, 21 Sep 1999 10:37:21 +0200 (MET DST)
|
|
||||||
Reply-To: wieck@debis.com (Jan Wieck)
|
|
||||||
X-Mailer: ELM [version 2.4 PL25]
|
|
||||||
Content-Type: text
|
|
||||||
Sender: owner-pgsql-hackers@postgreSQL.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
>
|
|
||||||
> Hi , Jan
|
|
||||||
>
|
|
||||||
> my name is Max .
|
|
||||||
|
|
||||||
Hi Max,
|
|
||||||
|
|
||||||
>
|
|
||||||
> I have contributed to SPI interface ,
|
|
||||||
> that with external Trigger try to make
|
|
||||||
> a referential integrity.
|
|
||||||
>
|
|
||||||
> If I can Help , in something ,
|
|
||||||
> I'm here .
|
|
||||||
>
|
|
||||||
|
|
||||||
You're welcome.
|
|
||||||
|
|
||||||
I've CC'd the hackers list because we might get some ideas
|
|
||||||
from there too (and to surface once in a while - Bruce
|
|
||||||
already missed me).
|
|
||||||
|
|
||||||
Currently I'm very busy for serious work so I don't find
|
|
||||||
enough spare time to start on such a big change to
|
|
||||||
PostgreSQL. But I'd like to give you an overview of what I
|
|
||||||
have in mind so far so you can decide if you're able to help.
|
|
||||||
|
|
||||||
Referential integrity (RI) is based on constraints defined in
|
|
||||||
the schema of a database. There are some different types of
|
|
||||||
constraints:
|
|
||||||
|
|
||||||
1. Uniqueness constraints.
|
|
||||||
|
|
||||||
2. Foreign key constraints that ensure that a key value used
|
|
||||||
in an attribute exists in another relation. One
|
|
||||||
constraint must ensure you're unable to INSERT/UPDATE to
|
|
||||||
a value that doesn't exist, another one must prevent
|
|
||||||
DELETE on a referenced key item or that it is changed
|
|
||||||
during UPDATE.
|
|
||||||
|
|
||||||
3. Cascading deletes that let rows referring to a key follow
|
|
||||||
on DELETE silently.
|
|
||||||
|
|
||||||
Even if not defined in the standard (AFAIK) there could be
|
|
||||||
others like letting references automatically follow on UPDATE
|
|
||||||
to a key value.
|
|
||||||
|
|
||||||
All constraints can be enabled and/or default to be deferred.
|
|
||||||
That means, that the RI checks aren't performed when they are
|
|
||||||
triggerd. Instead, they're checked at transaction end or if
|
|
||||||
explicitly invoked by some special statement. This is really
|
|
||||||
important because someone must be able to setup cyclic RI
|
|
||||||
checks that could never be satisfied if the checks would be
|
|
||||||
performed immediately. The major problem on this is the
|
|
||||||
amount of data affected until the checks must be performed.
|
|
||||||
The number of statements executed, that trigger such deferred
|
|
||||||
constraints, shouldn't be limited. And one single
|
|
||||||
INSERT/UPDATE/DELETE could affect thousands of rows.
|
|
||||||
|
|
||||||
Due to these problems I thought, it might not be such a good
|
|
||||||
idea to remember CTID's or the like to get back OLD/NEW rows
|
|
||||||
at the time the constraints are checked. Instead I planned to
|
|
||||||
misuse the rule system for it. Unfortunately, the rule system
|
|
||||||
has damned tricky problems itself when it comes to having-,
|
|
||||||
distinct and other clauses and extremely on aggregates and
|
|
||||||
subselects. These problems would have to get fixed first. So
|
|
||||||
it's a solution that cannot be implemented right now.
|
|
||||||
|
|
||||||
Fallback to CTID remembering though. There are problems too
|
|
||||||
:-(. Let's enhance the trigger mechanism with a deferred
|
|
||||||
feature. First this requires two additional bool attributes
|
|
||||||
in the pg_trigger relation that tell if this trigger is
|
|
||||||
deferrable and if it is deferred by default. While at it we
|
|
||||||
should add another bool that tells if the trigger is enabled
|
|
||||||
(ALTER TRIGGER {ENABLE|DISABLE} trigger).
|
|
||||||
|
|
||||||
Second we need an internal list of triggers, that are
|
|
||||||
currently DEFINED AS DEFERRED. Either because they default to
|
|
||||||
it, or the user explicitly asked to deferr it.
|
|
||||||
|
|
||||||
Third we need an internal list of triggers that must be
|
|
||||||
invoked later because at the time an event occured where they
|
|
||||||
should have been triggered, they appeared in the other list
|
|
||||||
and their execution is delayed until transaction end or
|
|
||||||
explicit execution. This list must remember the OID of the
|
|
||||||
trigger to invoke (to identify the procedure and the
|
|
||||||
arguments), the relation that caused the trigger and the
|
|
||||||
CTID's of the OLD and NEW row.
|
|
||||||
|
|
||||||
That last list could grow extremely! Think of a trigger
|
|
||||||
that's executing commands over SPI which in turn activate
|
|
||||||
deferred triggers. Since the order of trigger execution is
|
|
||||||
very important for RI, I can't see any chance to
|
|
||||||
simplify/condense this information. Thus it is 16 bytes at
|
|
||||||
least per deferred trigger call (2 OID's plus 2 CTID's). I
|
|
||||||
think one or more temp files would fit best for this.
|
|
||||||
|
|
||||||
A last tricky point is if one of a bunch of deferred triggers
|
|
||||||
is explicitly called for execution. At this time, the entries
|
|
||||||
for it in the temp file(s) must get processed and marked
|
|
||||||
executed (maybe by overwriting the triggers OID with the
|
|
||||||
invalid OID) while other trigger events still have to get
|
|
||||||
recorded.
|
|
||||||
|
|
||||||
Needless to say that reading thousands of those entries just
|
|
||||||
to find a few isn't good on performance. But better have this
|
|
||||||
special case slow that dealing with hundreds of temp files or
|
|
||||||
other overhead slowing down the usual case where ALL deferred
|
|
||||||
triggers get called at transaction end.
|
|
||||||
|
|
||||||
Trigger invocation is simple now - fetch the OLD and NEW rows
|
|
||||||
by CTID and execute the trigger as done by the trigger
|
|
||||||
manager. Oh - well - vacuum shouldn't touch relations where
|
|
||||||
deferred triggers are outstanding. Might require some
|
|
||||||
special lock entry - Vadim?
|
|
||||||
|
|
||||||
Did I miss something?
|
|
||||||
|
|
||||||
|
|
||||||
Jan
|
|
||||||
|
|
||||||
--
|
|
||||||
|
|
||||||
#======================================================================#
|
|
||||||
# It's easier to get forgiveness for being wrong than for being right. #
|
|
||||||
# Let's break this rule - forgive me. #
|
|
||||||
#========================================= wieck@debis.com (Jan Wieck) #
|
|
||||||
|
|
||||||
************
|
|
||||||
|
|
||||||
|
|
||||||
From owner-pgsql-hackers@hub.org Tue Sep 21 08:31:03 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 IAA09071
|
|
||||||
for <maillist@candle.pha.pa.us>; Tue, 21 Sep 1999 08:31:02 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [216.126.84.1]) by renoir.op.net (o1/$ Revision: 1.18 $) with ESMTP id IAA25991 for <maillist@candle.pha.pa.us>; Tue, 21 Sep 1999 08:04:59 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [216.126.84.1])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id HAA82019;
|
|
||||||
Tue, 21 Sep 1999 07:48:14 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-hackers@hub.org)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Tue, 21 Sep 1999 07:47:30 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost)
|
|
||||||
by hub.org (8.9.3/8.9.3) id HAA81906
|
|
||||||
for pgsql-hackers-outgoing; Tue, 21 Sep 1999 07:46:38 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-hackers@postgreSQL.org)
|
|
||||||
Received: from orion.SAPserv.Hamburg.dsh.de (Tpolaris2.sapham.debis.de [53.2.131.8])
|
|
||||||
by hub.org (8.9.3/8.9.3) with SMTP id HAA81888
|
|
||||||
for <hackers@postgreSQL.org>; Tue, 21 Sep 1999 07:46:26 -0400 (EDT)
|
|
||||||
(envelope-from wieck@debis.com)
|
|
||||||
Received: by orion.SAPserv.Hamburg.dsh.de
|
|
||||||
for hackers@postgreSQL.org
|
|
||||||
id m11TOGd-0003kwC; Tue, 21 Sep 99 13:39 MET DST
|
|
||||||
Message-Id: <m11TOGd-0003kwC@orion.SAPserv.Hamburg.dsh.de>
|
|
||||||
From: wieck@debis.com (Jan Wieck)
|
|
||||||
Subject: Re: [HACKERS] Re: Referential Integrity In PostgreSQL
|
|
||||||
To: andreas.zeugswetter@telecom.at (Andreas Zeugswetter)
|
|
||||||
Date: Tue, 21 Sep 1999 13:39:27 +0200 (MET DST)
|
|
||||||
Cc: hackers@postgresql.org
|
|
||||||
Reply-To: wieck@debis.com (Jan Wieck)
|
|
||||||
In-Reply-To: <37E74EB9.44F9766E@telecom.at> from "Andreas Zeugswetter" at Sep 21, 99 11:24:09 am
|
|
||||||
X-Mailer: ELM [version 2.4 PL25]
|
|
||||||
Content-Type: text
|
|
||||||
Sender: owner-pgsql-hackers@postgresql.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
>
|
|
||||||
> > Oh - well - vacuum shouldn't touch relations where
|
|
||||||
> > deferred triggers are outstanding. Might require some
|
|
||||||
> > special lock entry - Vadim?
|
|
||||||
>
|
|
||||||
> All modified data will be in this same still open transaction.
|
|
||||||
> Therefore no relevant data can be removed by vacuum anyway.
|
|
||||||
|
|
||||||
I expect this, but I really need to be sure that not even the
|
|
||||||
location of the tuple in the heap will change. I need to find
|
|
||||||
the tuples at the time the deferred triggers must be executed
|
|
||||||
via heap_fetch() by their CTID!
|
|
||||||
|
|
||||||
>
|
|
||||||
> It is my understanding, that the RI check is performed on the newest
|
|
||||||
> available (committed) data (+ modified data from my own tx).
|
|
||||||
> E.g. a primary key that has been removed by another transaction after
|
|
||||||
> my begin work will lead to an RI violation if referenced as foreign key.
|
|
||||||
|
|
||||||
Absolutely right. The function that will fire the deferred
|
|
||||||
triggers must switch to READ COMMITTED isolevel while doing
|
|
||||||
so.
|
|
||||||
|
|
||||||
What I'm not sure about is which snapshot to use to get the
|
|
||||||
OLD tuples (outdated in this transaction by a previous
|
|
||||||
command). Vadim?
|
|
||||||
|
|
||||||
|
|
||||||
Jan
|
|
||||||
|
|
||||||
--
|
|
||||||
|
|
||||||
#======================================================================#
|
|
||||||
# It's easier to get forgiveness for being wrong than for being right. #
|
|
||||||
# Let's break this rule - forgive me. #
|
|
||||||
#========================================= wieck@debis.com (Jan Wieck) #
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
************
|
|
||||||
|
|
||||||
|
|
||||||
From owner-pgsql-hackers@hub.org Tue Sep 21 10:45:40 1999
|
|
||||||
Received: from hub.org (hub.org [216.126.84.1])
|
|
||||||
by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id KAA10993
|
|
||||||
for <maillist@candle.pha.pa.us>; Tue, 21 Sep 1999 10:45:39 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [216.126.84.1])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id KAA22590;
|
|
||||||
Tue, 21 Sep 1999 10:36:16 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-hackers@hub.org)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Tue, 21 Sep 1999 10:35:37 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost)
|
|
||||||
by hub.org (8.9.3/8.9.3) id KAA22200
|
|
||||||
for pgsql-hackers-outgoing; Tue, 21 Sep 1999 10:34:47 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-hackers@postgreSQL.org)
|
|
||||||
Received: from sunpine.krs.ru (SunPine.krs.ru [195.161.16.37])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id KAA22048
|
|
||||||
for <hackers@postgreSQL.org>; Tue, 21 Sep 1999 10:33:38 -0400 (EDT)
|
|
||||||
(envelope-from vadim@krs.ru)
|
|
||||||
Received: from krs.ru (dune.krs.ru [195.161.16.38])
|
|
||||||
by sunpine.krs.ru (8.8.8/8.8.8) with ESMTP id WAA27122;
|
|
||||||
Tue, 21 Sep 1999 22:33:22 +0800 (KRSS)
|
|
||||||
Message-ID: <37E79730.CC415030@krs.ru>
|
|
||||||
Date: Tue, 21 Sep 1999 22:33:20 +0800
|
|
||||||
From: Vadim Mikheev <vadim@krs.ru>
|
|
||||||
Organization: OJSC Rostelecom (Krasnoyarsk)
|
|
||||||
X-Mailer: Mozilla 4.5 [en] (X11; I; FreeBSD 3.0-RELEASE i386)
|
|
||||||
X-Accept-Language: ru, en
|
|
||||||
MIME-Version: 1.0
|
|
||||||
To: Jan Wieck <wieck@debis.com>
|
|
||||||
CC: Andreas Zeugswetter <andreas.zeugswetter@telecom.at>,
|
|
||||||
hackers@postgreSQL.org
|
|
||||||
Subject: Re: [HACKERS] Re: Referential Integrity In PostgreSQL
|
|
||||||
References: <m11TOGd-0003kwC@orion.SAPserv.Hamburg.dsh.de>
|
|
||||||
Content-Type: text/plain; charset=us-ascii
|
|
||||||
Content-Transfer-Encoding: 7bit
|
|
||||||
Sender: owner-pgsql-hackers@postgreSQL.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
Jan Wieck wrote:
|
|
||||||
>
|
|
||||||
> > It is my understanding, that the RI check is performed on the newest
|
|
||||||
> > available (committed) data (+ modified data from my own tx).
|
|
||||||
> > E.g. a primary key that has been removed by another transaction after
|
|
||||||
> > my begin work will lead to an RI violation if referenced as foreign key.
|
|
||||||
>
|
|
||||||
> Absolutely right. The function that will fire the deferred
|
|
||||||
> triggers must switch to READ COMMITTED isolevel while doing
|
|
||||||
^^^^^^^^^^^^^^
|
|
||||||
> so.
|
|
||||||
|
|
||||||
NO!
|
|
||||||
What if one transaction deleted PK, another one inserted FK
|
|
||||||
and now both performe RI check? Both transactions _must_
|
|
||||||
use DIRTY READs to notice that RI violated by another
|
|
||||||
in-progress transaction and wait for concurrent transaction...
|
|
||||||
|
|
||||||
BTW, using triggers to check _each_ modified tuple
|
|
||||||
(i.e. run Executor for each modified tuple) is bad for
|
|
||||||
performance. We could implement direct support for
|
|
||||||
standard RI constraints.
|
|
||||||
|
|
||||||
Using rules (statement level triggers) for INSERT...SELECT,
|
|
||||||
UPDATE and DELETE queries would be nice! Actually, RI constraint
|
|
||||||
checks need in very simple queries (i.e. without distinct etc)
|
|
||||||
and the only we would have to do is
|
|
||||||
|
|
||||||
> What I'm not sure about is which snapshot to use to get the
|
|
||||||
> OLD tuples (outdated in this transaction by a previous
|
|
||||||
> command). Vadim?
|
|
||||||
|
|
||||||
1. Add CommandId to Snapshot.
|
|
||||||
2. Use Snapshot->CommandId instead of global CurrentScanCommandId.
|
|
||||||
3. Use Snapshots with different CommandId-s to get OLD/NEW
|
|
||||||
versions.
|
|
||||||
|
|
||||||
But I agreed that the size of parsetrees may be big and for
|
|
||||||
COPY...FROM/INSERTs we should remember IDs of modified
|
|
||||||
tuples. Well. Please remember that I implement WAL right
|
|
||||||
now, already have 1000 lines of code and hope to run first
|
|
||||||
tests after writing additional ~200 lines -:)
|
|
||||||
We could read modified tuple IDs from WAL...
|
|
||||||
|
|
||||||
Vadim
|
|
||||||
|
|
||||||
************
|
|
||||||
|
|
||||||
|
|
||||||
From owner-pgsql-hackers@hub.org Tue Sep 21 11:18:19 1999
|
|
||||||
Received: from hub.org (hub.org [216.126.84.1])
|
|
||||||
by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id LAA11537
|
|
||||||
for <maillist@candle.pha.pa.us>; Tue, 21 Sep 1999 11:18:18 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [216.126.84.1])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id LAA27395;
|
|
||||||
Tue, 21 Sep 1999 11:04:42 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-hackers@hub.org)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Tue, 21 Sep 1999 11:03:56 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost)
|
|
||||||
by hub.org (8.9.3/8.9.3) id LAA27106
|
|
||||||
for pgsql-hackers-outgoing; Tue, 21 Sep 1999 11:02:50 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-hackers@postgreSQL.org)
|
|
||||||
Received: from orion.SAPserv.Hamburg.dsh.de (Tpolaris2.sapham.debis.de [53.2.131.8])
|
|
||||||
by hub.org (8.9.3/8.9.3) with SMTP id LAA27041
|
|
||||||
for <hackers@postgreSQL.org>; Tue, 21 Sep 1999 11:02:34 -0400 (EDT)
|
|
||||||
(envelope-from wieck@debis.com)
|
|
||||||
Received: by orion.SAPserv.Hamburg.dsh.de
|
|
||||||
for hackers@postgreSQL.org
|
|
||||||
id m11TRKP-0003kLC; Tue, 21 Sep 99 16:55 MET DST
|
|
||||||
Message-Id: <m11TRKP-0003kLC@orion.SAPserv.Hamburg.dsh.de>
|
|
||||||
From: wieck@debis.com (Jan Wieck)
|
|
||||||
Subject: Re: [HACKERS] Re: Referential Integrity In PostgreSQL
|
|
||||||
To: vadim@krs.ru (Vadim Mikheev)
|
|
||||||
Date: Tue, 21 Sep 1999 16:55:33 +0200 (MET DST)
|
|
||||||
Cc: wieck@debis.com, andreas.zeugswetter@telecom.at, hackers@postgreSQL.org
|
|
||||||
Reply-To: wieck@debis.com (Jan Wieck)
|
|
||||||
In-Reply-To: <37E79730.CC415030@krs.ru> from "Vadim Mikheev" at Sep 21, 99 10:33:20 pm
|
|
||||||
X-Mailer: ELM [version 2.4 PL25]
|
|
||||||
Content-Type: text
|
|
||||||
Sender: owner-pgsql-hackers@postgreSQL.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
>
|
|
||||||
> Jan Wieck wrote:
|
|
||||||
> >
|
|
||||||
> > > It is my understanding, that the RI check is performed on the newest
|
|
||||||
> > > available (committed) data (+ modified data from my own tx).
|
|
||||||
> > > E.g. a primary key that has been removed by another transaction after
|
|
||||||
> > > my begin work will lead to an RI violation if referenced as foreign key.
|
|
||||||
> >
|
|
||||||
> > Absolutely right. The function that will fire the deferred
|
|
||||||
> > triggers must switch to READ COMMITTED isolevel while doing
|
|
||||||
> ^^^^^^^^^^^^^^
|
|
||||||
> > so.
|
|
||||||
>
|
|
||||||
> NO!
|
|
||||||
> What if one transaction deleted PK, another one inserted FK
|
|
||||||
> and now both performe RI check? Both transactions _must_
|
|
||||||
> use DIRTY READs to notice that RI violated by another
|
|
||||||
> in-progress transaction and wait for concurrent transaction...
|
|
||||||
|
|
||||||
Oh - I see - yes.
|
|
||||||
|
|
||||||
>
|
|
||||||
> BTW, using triggers to check _each_ modified tuple
|
|
||||||
> (i.e. run Executor for each modified tuple) is bad for
|
|
||||||
> performance. We could implement direct support for
|
|
||||||
> standard RI constraints.
|
|
||||||
|
|
||||||
As I want to implement it, there would be not much difference
|
|
||||||
between a regular trigger invocation and a deferred one. If
|
|
||||||
that causes a performance problem, I think we should speed up
|
|
||||||
the trigger call mechanism in general instead of not using
|
|
||||||
triggers.
|
|
||||||
|
|
||||||
>
|
|
||||||
> Using rules (statement level triggers) for INSERT...SELECT,
|
|
||||||
> UPDATE and DELETE queries would be nice! Actually, RI constraint
|
|
||||||
> checks need in very simple queries (i.e. without distinct etc)
|
|
||||||
> and the only we would have to do is
|
|
||||||
>
|
|
||||||
> > What I'm not sure about is which snapshot to use to get the
|
|
||||||
> > OLD tuples (outdated in this transaction by a previous
|
|
||||||
> > command). Vadim?
|
|
||||||
>
|
|
||||||
> 1. Add CommandId to Snapshot.
|
|
||||||
> 2. Use Snapshot->CommandId instead of global CurrentScanCommandId.
|
|
||||||
> 3. Use Snapshots with different CommandId-s to get OLD/NEW
|
|
||||||
> versions.
|
|
||||||
>
|
|
||||||
> But I agreed that the size of parsetrees may be big and for
|
|
||||||
> COPY...FROM/INSERTs we should remember IDs of modified
|
|
||||||
> tuples. Well. Please remember that I implement WAL right
|
|
||||||
> now, already have 1000 lines of code and hope to run first
|
|
||||||
> tests after writing additional ~200 lines -:)
|
|
||||||
> We could read modified tuple IDs from WAL...
|
|
||||||
|
|
||||||
Not only on COPY. One regular INSERT/UPDATE/DELETE statement
|
|
||||||
can actually fire thousands of trigger calls right now. These
|
|
||||||
triggers normally use SPI to execute their own queries. If
|
|
||||||
such a trigger now uses a query that in turn causes a
|
|
||||||
deferred constraint, we might have to save thousands of
|
|
||||||
deferred querytrees - impossible mission.
|
|
||||||
|
|
||||||
That's IMHO a clear drawback against using rules for
|
|
||||||
deferrable RI.
|
|
||||||
|
|
||||||
What I'm currently doing is clearly encapsulated in some
|
|
||||||
functions in commands/trigger.c (except for some additional
|
|
||||||
attributes in pg_trigger). If it later turns out that we can
|
|
||||||
combine the information required into WAL, I think we have
|
|
||||||
time enough to do so and shouldn't really care if v6.6
|
|
||||||
doesn't have it already combined.
|
|
||||||
|
|
||||||
|
|
||||||
Jan
|
|
||||||
|
|
||||||
--
|
|
||||||
|
|
||||||
#======================================================================#
|
|
||||||
# It's easier to get forgiveness for being wrong than for being right. #
|
|
||||||
# Let's break this rule - forgive me. #
|
|
||||||
#========================================= wieck@debis.com (Jan Wieck) #
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
************
|
|
||||||
|
|
||||||
|
|
||||||
From owner-pgsql-hackers@hub.org Tue Sep 21 15:30:29 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 PAA14590
|
|
||||||
for <maillist@candle.pha.pa.us>; Tue, 21 Sep 1999 15:30:28 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [216.126.84.1]) by renoir.op.net (o1/$ Revision: 1.18 $) with ESMTP id PAA09192 for <maillist@candle.pha.pa.us>; Tue, 21 Sep 1999 15:06:09 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [216.126.84.1])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id OAA73126;
|
|
||||||
Tue, 21 Sep 1999 14:56:15 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-hackers@hub.org)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Tue, 21 Sep 1999 14:54:47 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost)
|
|
||||||
by hub.org (8.9.3/8.9.3) id OAA72607
|
|
||||||
for pgsql-hackers-outgoing; Tue, 21 Sep 1999 14:53:51 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-hackers@postgreSQL.org)
|
|
||||||
Received: from orion.SAPserv.Hamburg.dsh.de (Tpolaris2.sapham.debis.de [53.2.131.8])
|
|
||||||
by hub.org (8.9.3/8.9.3) with SMTP id OAA72516
|
|
||||||
for <pgsql-hackers@postgreSQL.org>; Tue, 21 Sep 1999 14:52:56 -0400 (EDT)
|
|
||||||
(envelope-from wieck@debis.com)
|
|
||||||
Received: by orion.SAPserv.Hamburg.dsh.de
|
|
||||||
for pgsql-hackers@postgreSQL.org
|
|
||||||
id m11TUvX-0003kLC; Tue, 21 Sep 99 20:46 MET DST
|
|
||||||
Message-Id: <m11TUvX-0003kLC@orion.SAPserv.Hamburg.dsh.de>
|
|
||||||
From: wieck@debis.com (Jan Wieck)
|
|
||||||
Subject: [HACKERS] RI question
|
|
||||||
To: pgsql-hackers@postgreSQL.org (PostgreSQL HACKERS)
|
|
||||||
Date: Tue, 21 Sep 1999 20:46:06 +0200 (MET DST)
|
|
||||||
Reply-To: wieck@debis.com (Jan Wieck)
|
|
||||||
X-Mailer: ELM [version 2.4 PL25]
|
|
||||||
Content-Type: text
|
|
||||||
Sender: owner-pgsql-hackers@postgreSQL.org
|
|
||||||
Precedence: bulk
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
Uh oh,
|
|
||||||
|
|
||||||
I think deferred RI constraints must only fire the actions
|
|
||||||
that remain after all commands during the entire transaction
|
|
||||||
are condensed to the total minimum required to get that
|
|
||||||
state, because deferred RI must only check what VISIBLY
|
|
||||||
happened during the transaction.
|
|
||||||
|
|
||||||
Thinking on the tuple level, a sequence of
|
|
||||||
INSERT,UPDATE,UPDATE must fire only one INSERT trigger, but
|
|
||||||
with the values of the last UPDATE. An UPDATE,DELETE sequence
|
|
||||||
is in fact a DELETE of the original tuple and an
|
|
||||||
INSERT,UPDATE,DELETE sequence is nothing.
|
|
||||||
|
|
||||||
That means that the recording mechnism of the trigger events
|
|
||||||
must be very smart on UPDATE and DELETE events, looking at
|
|
||||||
the x_min of the old tuple if that resulted from the current
|
|
||||||
transaction. If so, follow the events backward, disable
|
|
||||||
previous ones and change the new event into what it really
|
|
||||||
has to be.
|
|
||||||
|
|
||||||
But some problems remain unsolvable by this:
|
|
||||||
|
|
||||||
- PK has an ON DELETE CASCADE for FK
|
|
||||||
- BEGIN
|
|
||||||
- DELETE PK
|
|
||||||
- INSERT same PK
|
|
||||||
- COMMIT.
|
|
||||||
|
|
||||||
This really shouldn't invoke the cascading delete, because at
|
|
||||||
COMMIT the PK still is there. Same for a constraint that
|
|
||||||
forbids deletion of a PK while referenced by FK. Therefore
|
|
||||||
the deferred event recorder must check on INSERT any previous
|
|
||||||
DELETES for the same relation if the key does match and drop
|
|
||||||
both deferred triggers if so. Therefore it needs to know
|
|
||||||
which attributes build the PK of that relation
|
|
||||||
(<relname>_pkey guaranteed?).
|
|
||||||
|
|
||||||
Well, I think that's finally the death of RI over rules. The
|
|
||||||
code managing those rules during CREATE/ALTER TABLE would
|
|
||||||
become totally unmaintainable. And (sorry Vadim) it's the
|
|
||||||
death of SLT for this too because this event tracking must be
|
|
||||||
done on the tuple level.
|
|
||||||
|
|
||||||
It complicated the trigger approach too, but IMHO not too
|
|
||||||
bad. Anyway, some co-developer(s) doing the parser- and
|
|
||||||
utility-statement stuff (SET CONSTRAINTS ... etc.) would be
|
|
||||||
great.
|
|
||||||
|
|
||||||
Volunteers?
|
|
||||||
|
|
||||||
|
|
||||||
Jan
|
|
||||||
|
|
||||||
--
|
|
||||||
|
|
||||||
#======================================================================#
|
|
||||||
# It's easier to get forgiveness for being wrong than for being right. #
|
|
||||||
# Let's break this rule - forgive me. #
|
|
||||||
#========================================= wieck@debis.com (Jan Wieck) #
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
************
|
|
||||||
|
|
||||||
|
|
||||||
From owner-pgsql-hackers@hub.org Tue Jul 13 22:30:50 1999
|
|
||||||
Received: from hub.org (hub.org [209.167.229.1])
|
|
||||||
by candle.pha.pa.us (8.9.0/8.9.0) with ESMTP id WAA08452
|
|
||||||
for <maillist@candle.pha.pa.us>; Tue, 13 Jul 1999 22:30:49 -0400 (EDT)
|
|
||||||
Received: from hub.org (hub.org [209.167.229.1])
|
|
||||||
by hub.org (8.9.3/8.9.3) with ESMTP id WAA31614;
|
|
||||||
Tue, 13 Jul 1999 22:25:04 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-hackers@hub.org)
|
|
||||||
Received: by hub.org (TLB v0.10a (1.23 tibbs 1997/01/09 00:29:32)); Tue, 13 Jul 1999 22:22:59 +0000 (EDT)
|
|
||||||
Received: (from majordom@localhost)
|
|
||||||
by hub.org (8.9.3/8.9.3) id WAA31285
|
|
||||||
for pgsql-hackers-outgoing; Tue, 13 Jul 1999 22:22:58 -0400 (EDT)
|
|
||||||
(envelope-from owner-pgsql-hackers@postgreSQL.org)
|
|
||||||
X-Authentication-Warning: hub.org: majordom set sender to owner-pgsql-hackers@postgreSQL.org using -f
|
|
||||||
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 WAA31259
|
|
||||||
for <pgsql-hackers@postgreSQL.org>; Tue, 13 Jul 1999 22:22:47 -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 LAA04296 for <pgsql-hackers@postgreSQL.org>; Wed, 14 Jul 1999 11:22:46 +0900
|
|
||||||
From: "Hiroshi Inoue" <Inoue@tpf.co.jp>
|
|
||||||
To: "pgsql-hackers" <pgsql-hackers@postgreSQL.org>
|
|
||||||
Subject: [HACKERS] 9-key index ?
|
|
||||||
Date: Wed, 14 Jul 1999 11:25:09 +0900
|
|
||||||
Message-ID: <000401becda0$17deee60$2801007e@cadzone.tpf.co.jp>
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain;
|
|
||||||
charset="iso-2022-jp"
|
|
||||||
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
|
|
||||||
Precedence: bulk
|
|
||||||
Status: RO
|
|
||||||
|
|
||||||
Hi all,
|
|
||||||
|
|
||||||
I could create a 9-key index.
|
|
||||||
|
|
||||||
create table ix9 (
|
|
||||||
i1 int4,
|
|
||||||
i2 int4,
|
|
||||||
i3 int4,
|
|
||||||
i4 int4,
|
|
||||||
i5 int4,
|
|
||||||
i6 int4,
|
|
||||||
i7 int4,
|
|
||||||
i8 int4,
|
|
||||||
i9 int4,
|
|
||||||
primary key (i1,i2,i3,i4,i5,i6,i7,i8,i9)
|
|
||||||
);
|
|
||||||
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'ix9_pkey'
|
|
||||||
for table 'ix9'
|
|
||||||
CREATE
|
|
||||||
|
|
||||||
\d ix9_pkey
|
|
||||||
|
|
||||||
Table = ix9_pkey
|
|
||||||
+----------------------------------+----------------------------------+-----
|
|
||||||
--+
|
|
||||||
| Field | Type |
|
|
||||||
Length|
|
|
||||||
+----------------------------------+----------------------------------+-----
|
|
||||||
--+
|
|
||||||
| i1 | int4 |
|
|
||||||
4 |
|
|
||||||
| i2 | int4 |
|
|
||||||
4 |
|
|
||||||
| i3 | int4 |
|
|
||||||
4 |
|
|
||||||
| i4 | int4 |
|
|
||||||
4 |
|
|
||||||
| i5 | int4 |
|
|
||||||
4 |
|
|
||||||
| i6 | int4 |
|
|
||||||
4 |
|
|
||||||
| i7 | int4 |
|
|
||||||
4 |
|
|
||||||
| i8 | int4 |
|
|
||||||
4 |
|
|
||||||
| i9 | int4 |
|
|
||||||
4 |
|
|
||||||
+----------------------------------+----------------------------------+-----
|
|
||||||
--+
|
|
||||||
|
|
||||||
Is it right ?
|
|
||||||
|
|
||||||
Regards.
|
|
||||||
|
|
||||||
Hiroshi Inoue
|
|
||||||
Inoue@tpf.co.jp
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user