mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-08-28 03:17:19 +02:00
* With disabled triggers, allow pg_dump to use ALTER TABLE ADD FOREIGN KEY Add to trigger TODO.detail.
993 lines
41 KiB
Plaintext
993 lines
41 KiB
Plaintext
From pgsql-patches-owner+M4639@postgresql.org Wed Aug 7 12:11:04 2002
|
|
Return-path: <pgsql-patches-owner+M4639@postgresql.org>
|
|
Received: from postgresql.org (postgresql.org [64.49.215.8])
|
|
by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id g77GB3Y20812
|
|
for <pgman@candle.pha.pa.us>; Wed, 7 Aug 2002 12:11:03 -0400 (EDT)
|
|
Received: from localhost (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with ESMTP
|
|
id 8C371475A2C; Wed, 7 Aug 2002 12:10:56 -0400 (EDT)
|
|
Received: from postgresql.org (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with SMTP
|
|
id E46514759AD; Wed, 7 Aug 2002 12:10:54 -0400 (EDT)
|
|
Received: from localhost (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with ESMTP id B54944759AD
|
|
for <pgsql-patches@postgresql.org>; Wed, 7 Aug 2002 12:10:46 -0400 (EDT)
|
|
Received: from klamath.dyndns.org (CPE002078144ae0.cpe.net.cable.rogers.com [24.102.202.35])
|
|
by postgresql.org (Postfix) with ESMTP id 37F70475813
|
|
for <pgsql-patches@postgresql.org>; Wed, 7 Aug 2002 12:10:46 -0400 (EDT)
|
|
Received: from boston.klamath.dyndns.org (unknown [192.168.40.12])
|
|
by klamath.dyndns.org (Postfix) with ESMTP
|
|
id C76C17010; Wed, 7 Aug 2002 12:10:50 -0400 (EDT)
|
|
To: Bruce Momjian <pgman@candle.pha.pa.us>
|
|
cc: Tom Lane <tgl@sss.pgh.pa.us>, Elliot Lee <sopwith@redhat.com>,
|
|
pgsql-patches@postgresql.org
|
|
Subject: Re: [PATCHES] Fix disabled triggers with deferred constraints
|
|
References: <200206140507.g5E57om04338@candle.pha.pa.us>
|
|
From: Neil Conway <nconway@klamath.dyndns.org>
|
|
In-Reply-To: <200206140507.g5E57om04338@candle.pha.pa.us>
|
|
Date: 07 Aug 2002 12:10:10 -0400
|
|
Message-ID: <87it2mfy59.fsf@klamath.dyndns.org>
|
|
Lines: 24
|
|
User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=us-ascii
|
|
X-Virus-Scanned: by AMaViS new-20020517
|
|
Precedence: bulk
|
|
Sender: pgsql-patches-owner@postgresql.org
|
|
X-Virus-Scanned: by AMaViS new-20020517
|
|
Status: OR
|
|
|
|
Bruce Momjian <pgman@candle.pha.pa.us> writes:
|
|
> Tom Lane wrote:
|
|
> > Elliot Lee <sopwith@redhat.com> writes:
|
|
> > > About as obscure a bug as you can get - without the patch, disabled
|
|
> > > triggers for deferred constraints get run anyways. The patch is simple and
|
|
> > > works, but the "right" (and more complicated) fix may involve not adding
|
|
> > > the trigger to event->dte_item to begin with.
|
|
> >
|
|
> > I remember looking at this issue and not doing anything because I
|
|
> > couldn't decide whether the test for enabled status should occur when
|
|
> > the trigger is queued or when it is executed --- or, perhaps, both?
|
|
> > Is there anything in the standard about it?
|
|
>
|
|
> Was there any agreement on this?
|
|
|
|
Any update on this?
|
|
|
|
Cheers,
|
|
|
|
Neil
|
|
|
|
--
|
|
Neil Conway <neilconway@rogers.com>
|
|
PGP Key ID: DB3C29FC
|
|
|
|
|
|
---------------------------(end of broadcast)---------------------------
|
|
TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
|
|
|
|
From pgsql-patches-owner+M4641@postgresql.org Wed Aug 7 12:46:40 2002
|
|
Return-path: <pgsql-patches-owner+M4641@postgresql.org>
|
|
Received: from postgresql.org (postgresql.org [64.49.215.8])
|
|
by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id g77GkeY23704
|
|
for <pgman@candle.pha.pa.us>; Wed, 7 Aug 2002 12:46:40 -0400 (EDT)
|
|
Received: from localhost (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with ESMTP
|
|
id 2162C475C7A; Wed, 7 Aug 2002 12:46:35 -0400 (EDT)
|
|
Received: from postgresql.org (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with SMTP
|
|
id E9A4B475C29; Wed, 7 Aug 2002 12:46:32 -0400 (EDT)
|
|
Received: from localhost (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with ESMTP id 9CACC475C29
|
|
for <pgsql-patches@postgresql.org>; Wed, 7 Aug 2002 12:46:22 -0400 (EDT)
|
|
Received: from sss.pgh.pa.us (unknown [192.204.191.242])
|
|
by postgresql.org (Postfix) with ESMTP id 09669475BB7
|
|
for <pgsql-patches@postgresql.org>; Wed, 7 Aug 2002 12:46:22 -0400 (EDT)
|
|
Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
|
|
by sss.pgh.pa.us (8.12.5/8.12.5) with ESMTP id g77GkNVk016878;
|
|
Wed, 7 Aug 2002 12:46:23 -0400 (EDT)
|
|
To: Neil Conway <nconway@klamath.dyndns.org>
|
|
cc: Bruce Momjian <pgman@candle.pha.pa.us>, Elliot Lee <sopwith@redhat.com>,
|
|
pgsql-patches@postgresql.org
|
|
Subject: Re: [PATCHES] Fix disabled triggers with deferred constraints
|
|
In-Reply-To: <87it2mfy59.fsf@klamath.dyndns.org>
|
|
References: <200206140507.g5E57om04338@candle.pha.pa.us> <87it2mfy59.fsf@klamath.dyndns.org>
|
|
Comments: In-reply-to Neil Conway <nconway@klamath.dyndns.org>
|
|
message dated "07 Aug 2002 12:10:10 -0400"
|
|
Date: Wed, 07 Aug 2002 12:46:23 -0400
|
|
Message-ID: <16877.1028738783@sss.pgh.pa.us>
|
|
From: Tom Lane <tgl@sss.pgh.pa.us>
|
|
X-Virus-Scanned: by AMaViS new-20020517
|
|
Precedence: bulk
|
|
Sender: pgsql-patches-owner@postgresql.org
|
|
X-Virus-Scanned: by AMaViS new-20020517
|
|
Status: OR
|
|
|
|
Neil Conway <nconway@klamath.dyndns.org> writes:
|
|
> Elliot Lee <sopwith@redhat.com> writes:
|
|
> About as obscure a bug as you can get - without the patch, disabled
|
|
> triggers for deferred constraints get run anyways. The patch is simple and
|
|
> works, but the "right" (and more complicated) fix may involve not adding
|
|
> the trigger to event->dte_item to begin with.
|
|
>
|
|
> I remember looking at this issue and not doing anything because I
|
|
> couldn't decide whether the test for enabled status should occur when
|
|
> the trigger is queued or when it is executed --- or, perhaps, both?
|
|
> Is there anything in the standard about it?
|
|
>>
|
|
>> Was there any agreement on this?
|
|
|
|
> Any update on this?
|
|
|
|
I think we're still waiting for someone to figure out what the behavior
|
|
should be per spec.
|
|
|
|
regards, tom lane
|
|
|
|
---------------------------(end of broadcast)---------------------------
|
|
TIP 6: Have you searched our list archives?
|
|
|
|
http://archives.postgresql.org
|
|
|
|
From nconway@klamath.dyndns.org Wed Aug 7 14:10:27 2002
|
|
Return-path: <nconway@klamath.dyndns.org>
|
|
Received: from klamath.dyndns.org (identsucks@CPE002078144ae0.cpe.net.cable.rogers.com [24.102.202.35])
|
|
by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id g77IAQY29959
|
|
for <pgman@candle.pha.pa.us>; Wed, 7 Aug 2002 14:10:26 -0400 (EDT)
|
|
Received: from boston.klamath.dyndns.org (unknown [192.168.40.12])
|
|
by klamath.dyndns.org (Postfix) with ESMTP
|
|
id 284B87010; Wed, 7 Aug 2002 14:10:21 -0400 (EDT)
|
|
To: Tom Lane <tgl@sss.pgh.pa.us>
|
|
cc: Bruce Momjian <pgman@candle.pha.pa.us>, Elliot Lee <sopwith@redhat.com>,
|
|
pgsql-patches@postgresql.org
|
|
Subject: Re: [PATCHES] Fix disabled triggers with deferred constraints
|
|
References: <200206140507.g5E57om04338@candle.pha.pa.us>
|
|
<87it2mfy59.fsf@klamath.dyndns.org> <16877.1028738783@sss.pgh.pa.us>
|
|
From: Neil Conway <nconway@klamath.dyndns.org>
|
|
In-Reply-To: <16877.1028738783@sss.pgh.pa.us>
|
|
Date: 07 Aug 2002 14:09:40 -0400
|
|
Message-ID: <874re6fsm3.fsf@klamath.dyndns.org>
|
|
Lines: 39
|
|
User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=us-ascii
|
|
Status: OR
|
|
|
|
Tom Lane <tgl@sss.pgh.pa.us> writes:
|
|
> Neil Conway <nconway@klamath.dyndns.org> writes:
|
|
> > Elliot Lee <sopwith@redhat.com> writes:
|
|
> > I remember looking at this issue and not doing anything because I
|
|
> > couldn't decide whether the test for enabled status should occur when
|
|
> > the trigger is queued or when it is executed --- or, perhaps, both?
|
|
> > Is there anything in the standard about it?
|
|
|
|
[...]
|
|
|
|
> I think we're still waiting for someone to figure out what the behavior
|
|
> should be per spec.
|
|
|
|
I took a brief look at SQL99, but I couldn't find anything regarding
|
|
this issue (AFAICS it doesn't mention "disabled triggers" at all). But
|
|
given my prior track record for divining information from the
|
|
standards, perhaps someone should double-check :-)
|
|
|
|
I did notice some behavior which we don't implement AFAIK:
|
|
|
|
If the constraint mode is /deferred/, then the constraint is
|
|
effectively checked when the constraint mode is changed to
|
|
/immediate/ either explicitely by execution of a <set
|
|
constraints mode statement>, or implicitely at the end of the
|
|
current SQL-transaction.
|
|
|
|
(SQL99, Section 4.17.1, paragraph 3)
|
|
|
|
We don't recheck any outstanding deferred constraints when the
|
|
constraint mode is explicitly switched back to IMMEDIATE, as the
|
|
standard says we should.
|
|
|
|
Cheers,
|
|
|
|
Neil
|
|
|
|
--
|
|
Neil Conway <neilconway@rogers.com>
|
|
PGP Key ID: DB3C29FC
|
|
|
|
|
|
From pgsql-patches-owner+M4751@postgresql.org Tue Aug 13 00:10:31 2002
|
|
Return-path: <pgsql-patches-owner+M4751@postgresql.org>
|
|
Received: from postgresql.org (postgresql.org [64.49.215.8])
|
|
by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id g7D4AVk26779
|
|
for <pgman@candle.pha.pa.us>; Tue, 13 Aug 2002 00:10:31 -0400 (EDT)
|
|
Received: from localhost (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with ESMTP
|
|
id 321AE475A20; Tue, 13 Aug 2002 00:10:26 -0400 (EDT)
|
|
Received: from postgresql.org (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with SMTP
|
|
id 7BB7E475F42; Tue, 13 Aug 2002 00:10:20 -0400 (EDT)
|
|
Received: from localhost (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with ESMTP id A0519476087
|
|
for <pgsql-patches@postgresql.org>; Tue, 13 Aug 2002 00:10:10 -0400 (EDT)
|
|
Received: from linuxworld.com.au (www.linuxworld.com.au [203.34.46.50])
|
|
by postgresql.org (Postfix) with ESMTP id 70806475806
|
|
for <pgsql-patches@postgresql.org>; Tue, 13 Aug 2002 00:09:57 -0400 (EDT)
|
|
Received: from localhost (swm@localhost)
|
|
by linuxworld.com.au (8.11.4/8.11.4) with ESMTP id g7D4CGI23801;
|
|
Tue, 13 Aug 2002 14:12:16 +1000
|
|
Date: Tue, 13 Aug 2002 14:12:15 +1000 (EST)
|
|
From: Gavin Sherry <swm@linuxworld.com.au>
|
|
To: Neil Conway <nconway@klamath.dyndns.org>
|
|
cc: pgsql-patches@postgresql.org
|
|
Subject: Re: [PATCHES] Fix disabled triggers with deferred constraints
|
|
In-Reply-To: <874re6fsm3.fsf@klamath.dyndns.org>
|
|
Message-ID: <Pine.LNX.4.21.0208131342460.22771-100000@linuxworld.com.au>
|
|
MIME-Version: 1.0
|
|
Content-Type: TEXT/PLAIN; charset=US-ASCII
|
|
X-Virus-Scanned: by AMaViS new-20020517
|
|
Precedence: bulk
|
|
Sender: pgsql-patches-owner@postgresql.org
|
|
X-Virus-Scanned: by AMaViS new-20020517
|
|
Status: OR
|
|
|
|
On 7 Aug 2002, Neil Conway wrote:
|
|
|
|
> Tom Lane <tgl@sss.pgh.pa.us> writes:
|
|
> > Neil Conway <nconway@klamath.dyndns.org> writes:
|
|
> > > Elliot Lee <sopwith@redhat.com> writes:
|
|
> > > I remember looking at this issue and not doing anything because I
|
|
> > > couldn't decide whether the test for enabled status should occur when
|
|
> > > the trigger is queued or when it is executed --- or, perhaps, both?
|
|
> > > Is there anything in the standard about it?
|
|
>
|
|
> [...]
|
|
>
|
|
> > I think we're still waiting for someone to figure out what the behavior
|
|
> > should be per spec.
|
|
>
|
|
> I took a brief look at SQL99, but I couldn't find anything regarding
|
|
> this issue (AFAICS it doesn't mention "disabled triggers" at all). But
|
|
> given my prior track record for divining information from the
|
|
> standards, perhaps someone should double-check :-)
|
|
|
|
I had a pretty hard look around SQL99. It does not appear to say anything
|
|
explicit about disabling triggers. This should be clear from page 90: 4.35
|
|
Triggers. This specifies the trigger descriptor. Those familiar with SQL99
|
|
know that it just about mandates that all state information about any
|
|
object in the system is recorded in its descriptor. The fact that
|
|
enabled/disabled state information is not recorded in the trigger
|
|
descriptor suggests that it is only ever enabled.
|
|
|
|
More over there is no case when a trigger is not executed, according to
|
|
10.12 'Execution of triggers'.
|
|
|
|
I dug deeper, wondering if it may be implicitly disabled given the
|
|
disabling of its 'dependencies', shall we call them. Namely: the base
|
|
table or the procedure used in the trigger action. Tables cannot be
|
|
disabled or made in active. As for the procedure, <SQL procedure
|
|
statement>, this expands to SQL which, itself, cannot be 'disabled'.
|
|
|
|
The spec is a large one and I didn't look at all references to triggers --
|
|
since there are hundreds -- but I don't believe that there is any
|
|
precedent for an implementation of DISABLE TRIGGER.
|
|
|
|
FWIW, i think that in the case of deferred triggers they should all be
|
|
added to the queue and whether they are executed or not should be
|
|
evaluated inside DeferredTriggerExecute() with:
|
|
|
|
if(LocTriggerData.tg_trigger->tgenabled == false)
|
|
return;
|
|
|
|
Gavin
|
|
|
|
|
|
|
|
|
|
---------------------------(end of broadcast)---------------------------
|
|
TIP 2: you can get off all lists at once with the unregister command
|
|
(send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
|
|
|
|
From pgsql-patches-owner+M4752@postgresql.org Tue Aug 13 00:28:42 2002
|
|
Return-path: <pgsql-patches-owner+M4752@postgresql.org>
|
|
Received: from postgresql.org (postgresql.org [64.49.215.8])
|
|
by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id g7D4Sgk27162
|
|
for <pgman@candle.pha.pa.us>; Tue, 13 Aug 2002 00:28:42 -0400 (EDT)
|
|
Received: from localhost (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with ESMTP
|
|
id 94BDB475EFD; Tue, 13 Aug 2002 00:28:37 -0400 (EDT)
|
|
Received: from postgresql.org (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with SMTP
|
|
id C912A475EDF; Tue, 13 Aug 2002 00:28:36 -0400 (EDT)
|
|
Received: from localhost (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with ESMTP id 0026B475924
|
|
for <pgsql-patches@postgresql.org>; Tue, 13 Aug 2002 00:28:30 -0400 (EDT)
|
|
Received: from sss.pgh.pa.us (unknown [192.204.191.242])
|
|
by postgresql.org (Postfix) with ESMTP id 5263B47582B
|
|
for <pgsql-patches@postgresql.org>; Tue, 13 Aug 2002 00:28:30 -0400 (EDT)
|
|
Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
|
|
by sss.pgh.pa.us (8.12.5/8.12.5) with ESMTP id g7D4SJVk022192;
|
|
Tue, 13 Aug 2002 00:28:19 -0400 (EDT)
|
|
To: Gavin Sherry <swm@linuxworld.com.au>
|
|
cc: Neil Conway <nconway@klamath.dyndns.org>, pgsql-patches@postgresql.org
|
|
Subject: Re: [PATCHES] Fix disabled triggers with deferred constraints
|
|
In-Reply-To: <Pine.LNX.4.21.0208131342460.22771-100000@linuxworld.com.au>
|
|
References: <Pine.LNX.4.21.0208131342460.22771-100000@linuxworld.com.au>
|
|
Comments: In-reply-to Gavin Sherry <swm@linuxworld.com.au>
|
|
message dated "Tue, 13 Aug 2002 14:12:15 +1000"
|
|
Date: Tue, 13 Aug 2002 00:28:19 -0400
|
|
Message-ID: <22191.1029212899@sss.pgh.pa.us>
|
|
From: Tom Lane <tgl@sss.pgh.pa.us>
|
|
X-Virus-Scanned: by AMaViS new-20020517
|
|
Precedence: bulk
|
|
Sender: pgsql-patches-owner@postgresql.org
|
|
X-Virus-Scanned: by AMaViS new-20020517
|
|
Status: OR
|
|
|
|
Gavin Sherry <swm@linuxworld.com.au> writes:
|
|
> ...The spec is a large one and I didn't look at all references to triggers --
|
|
> since there are hundreds -- but I don't believe that there is any
|
|
> precedent for an implementation of DISABLE TRIGGER.
|
|
|
|
Thanks for the dig. I was hoping we could get some guidance from the
|
|
spec, but it looks like not. How about other implementations --- does
|
|
Oracle support disabled triggers? DB2? etc?
|
|
|
|
> FWIW, i think that in the case of deferred triggers they should all be
|
|
> added to the queue and whether they are executed or not should be
|
|
> evaluated inside DeferredTriggerExecute() with:
|
|
> if(LocTriggerData.tg_trigger->tgenabled == false)
|
|
> return;
|
|
|
|
So check the state at execution, not when the triggering event occurs.
|
|
I don't have any strong reason to object to that, but I have a gut
|
|
feeling that it still needs to be thought about...
|
|
|
|
Let's see, I guess there are several possible changes of state for a
|
|
deferred trigger between the triggering event and the end of
|
|
transaction:
|
|
|
|
* Trigger deleted. Surely the trigger shouldn't be executed, but should
|
|
we raise an error or just silently ignore it? (I suspect right now we
|
|
crash :-()
|
|
|
|
* Trigger created. In some ideal world we might think that such a
|
|
trigger should be fired, but in reality that ain't gonna happen; we're
|
|
not going to record every possible event on the speculation that some
|
|
trigger for it might be created later in the transaction.
|
|
|
|
* Trigger disabled. Your proposal is to not fire it. Okay, comports
|
|
with the deleted case, if we make that behavior be silently-ignore.
|
|
|
|
* Trigger enabled. Your proposal is to fire it. Seems not to comport
|
|
with the creation case --- does that bother anyone?
|
|
|
|
* Trigger changed from not-deferred to deferred. If we already fired it
|
|
for the event, we surely shouldn't fire it again. I believe the code
|
|
gets this case right.
|
|
|
|
* Trigger changed from deferred to not-deferred. As Neil was pointing
|
|
out recently, this really should cause the trigger to be fired for the
|
|
pending event immediately, but we don't get that right at the moment.
|
|
(I suppose a stricter interpretation would be to raise an error because
|
|
we can't do anything that really comports with the intended behavior
|
|
of either case.)
|
|
|
|
How do these various cases relate? Can we come up with a unified
|
|
rationale?
|
|
|
|
regards, tom lane
|
|
|
|
---------------------------(end of broadcast)---------------------------
|
|
TIP 6: Have you searched our list archives?
|
|
|
|
http://archives.postgresql.org
|
|
|
|
From pgsql-patches-owner+M4753@postgresql.org Tue Aug 13 00:56:55 2002
|
|
Return-path: <pgsql-patches-owner+M4753@postgresql.org>
|
|
Received: from postgresql.org (postgresql.org [64.49.215.8])
|
|
by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id g7D4usk27855
|
|
for <pgman@candle.pha.pa.us>; Tue, 13 Aug 2002 00:56:54 -0400 (EDT)
|
|
Received: from localhost (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with ESMTP
|
|
id F09AE475EFD; Tue, 13 Aug 2002 00:56:49 -0400 (EDT)
|
|
Received: from postgresql.org (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with SMTP
|
|
id 94E4B475DC0; Tue, 13 Aug 2002 00:56:47 -0400 (EDT)
|
|
Received: from localhost (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with ESMTP id 4EB5D475751
|
|
for <pgsql-patches@postgresql.org>; Tue, 13 Aug 2002 00:56:42 -0400 (EDT)
|
|
Received: from joeconway.com (unknown [63.210.180.150])
|
|
by postgresql.org (Postfix) with ESMTP id A5F35475531
|
|
for <pgsql-patches@postgresql.org>; Tue, 13 Aug 2002 00:56:41 -0400 (EDT)
|
|
Received: from [192.168.5.2] (account jconway HELO joeconway.com)
|
|
by joeconway.com (CommuniGate Pro SMTP 3.5.9)
|
|
with ESMTP-TLS id 1246425; Mon, 12 Aug 2002 21:46:29 -0700
|
|
Message-ID: <3D589161.8020903@joeconway.com>
|
|
Date: Mon, 12 Aug 2002 21:56:01 -0700
|
|
From: Joe Conway <mail@joeconway.com>
|
|
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.0.0) Gecko/20020530
|
|
X-Accept-Language: en-us, en
|
|
MIME-Version: 1.0
|
|
To: Tom Lane <tgl@sss.pgh.pa.us>
|
|
cc: Gavin Sherry <swm@linuxworld.com.au>,
|
|
Neil Conway <nconway@klamath.dyndns.org>, pgsql-patches@postgresql.org
|
|
Subject: Re: [PATCHES] Fix disabled triggers with deferred constraints
|
|
References: <Pine.LNX.4.21.0208131342460.22771-100000@linuxworld.com.au> <22191.1029212899@sss.pgh.pa.us>
|
|
Content-Type: text/plain; charset=us-ascii; format=flowed
|
|
Content-Transfer-Encoding: 7bit
|
|
X-Virus-Scanned: by AMaViS new-20020517
|
|
Precedence: bulk
|
|
Sender: pgsql-patches-owner@postgresql.org
|
|
X-Virus-Scanned: by AMaViS new-20020517
|
|
Status: OR
|
|
|
|
Tom Lane wrote:
|
|
> Gavin Sherry <swm@linuxworld.com.au> writes:
|
|
>>...The spec is a large one and I didn't look at all references to triggers --
|
|
>>since there are hundreds -- but I don't believe that there is any
|
|
>>precedent for an implementation of DISABLE TRIGGER.
|
|
>
|
|
> Thanks for the dig. I was hoping we could get some guidance from the
|
|
> spec, but it looks like not. How about other implementations --- does
|
|
> Oracle support disabled triggers? DB2? etc?
|
|
|
|
Oracle does for sure. With a complex app (i.e. Oracle Applications)
|
|
being able to disable triggers from time-to-time is *indispensable*. Not
|
|
sure about DB2. My knowledge of MSSQL is getting dated, but as of MSSQL7
|
|
I don't *think* you can disable a trigger.
|
|
|
|
Joe
|
|
|
|
|
|
---------------------------(end of broadcast)---------------------------
|
|
TIP 6: Have you searched our list archives?
|
|
|
|
http://archives.postgresql.org
|
|
|
|
From pgsql-patches-owner+M4755@postgresql.org Tue Aug 13 01:36:42 2002
|
|
Return-path: <pgsql-patches-owner+M4755@postgresql.org>
|
|
Received: from postgresql.org (postgresql.org [64.49.215.8])
|
|
by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id g7D5afk29468
|
|
for <pgman@candle.pha.pa.us>; Tue, 13 Aug 2002 01:36:41 -0400 (EDT)
|
|
Received: from localhost (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with ESMTP
|
|
id C40B3476088; Tue, 13 Aug 2002 01:36:42 -0400 (EDT)
|
|
Received: from postgresql.org (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with SMTP
|
|
id AAB02476037; Tue, 13 Aug 2002 01:36:41 -0400 (EDT)
|
|
Received: from localhost (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with ESMTP id 15911475751
|
|
for <pgsql-patches@postgresql.org>; Tue, 13 Aug 2002 01:36:37 -0400 (EDT)
|
|
Received: from linuxworld.com.au (www.linuxworld.com.au [203.34.46.50])
|
|
by postgresql.org (Postfix) with ESMTP id BC813475531
|
|
for <pgsql-patches@postgresql.org>; Tue, 13 Aug 2002 01:36:35 -0400 (EDT)
|
|
Received: from localhost (swm@localhost)
|
|
by linuxworld.com.au (8.11.4/8.11.4) with ESMTP id g7D5coN26796;
|
|
Tue, 13 Aug 2002 15:38:50 +1000
|
|
Date: Tue, 13 Aug 2002 15:38:50 +1000 (EST)
|
|
From: Gavin Sherry <swm@linuxworld.com.au>
|
|
To: Tom Lane <tgl@sss.pgh.pa.us>
|
|
cc: Neil Conway <nconway@klamath.dyndns.org>, pgsql-patches@postgresql.org
|
|
Subject: Re: [PATCHES] Fix disabled triggers with deferred constraints
|
|
In-Reply-To: <22191.1029212899@sss.pgh.pa.us>
|
|
Message-ID: <Pine.LNX.4.21.0208131530160.25873-100000@linuxworld.com.au>
|
|
MIME-Version: 1.0
|
|
Content-Type: TEXT/PLAIN; charset=US-ASCII
|
|
X-Virus-Scanned: by AMaViS new-20020517
|
|
Precedence: bulk
|
|
Sender: pgsql-patches-owner@postgresql.org
|
|
X-Virus-Scanned: by AMaViS new-20020517
|
|
Status: ORr
|
|
|
|
On Tue, 13 Aug 2002, Tom Lane wrote:
|
|
|
|
> Gavin Sherry <swm@linuxworld.com.au> writes:
|
|
> > ...The spec is a large one and I didn't look at all references to triggers --
|
|
> > since there are hundreds -- but I don't believe that there is any
|
|
> > precedent for an implementation of DISABLE TRIGGER.
|
|
>
|
|
> Thanks for the dig. I was hoping we could get some guidance from the
|
|
> spec, but it looks like not. How about other implementations --- does
|
|
> Oracle support disabled triggers? DB2? etc?
|
|
|
|
Oracle 8 (and I presume 9) allows you to disable/enable triggers through
|
|
alter table and alter trigger. My 8.1.7 documentation is silent on the
|
|
cases you mention below and I do not have an oracle installation handy to
|
|
test. Anyone?
|
|
|
|
>
|
|
> > FWIW, i think that in the case of deferred triggers they should all be
|
|
> > added to the queue and whether they are executed or not should be
|
|
> > evaluated inside DeferredTriggerExecute() with:
|
|
> > if(LocTriggerData.tg_trigger->tgenabled == false)
|
|
> > return;
|
|
>
|
|
> So check the state at execution, not when the triggering event occurs.
|
|
> I don't have any strong reason to object to that, but I have a gut
|
|
> feeling that it still needs to be thought about...
|
|
>
|
|
> Let's see, I guess there are several possible changes of state for a
|
|
> deferred trigger between the triggering event and the end of
|
|
> transaction:
|
|
>
|
|
> * Trigger deleted. Surely the trigger shouldn't be executed, but should
|
|
> we raise an error or just silently ignore it? (I suspect right now we
|
|
> crash :-()
|
|
>
|
|
> * Trigger created. In some ideal world we might think that such a
|
|
> trigger should be fired, but in reality that ain't gonna happen; we're
|
|
> not going to record every possible event on the speculation that some
|
|
> trigger for it might be created later in the transaction.
|
|
|
|
It doesn't need to be an ideal world. We're only talking about deferred
|
|
triggers after all. Why couldn't CreateTrgger() just have a look through
|
|
deftrig_events, check for its relid and if its in there, call
|
|
deferredTriggerAddEvent().
|
|
|
|
> * Trigger disabled. Your proposal is to not fire it. Okay, comports
|
|
> with the deleted case, if we make that behavior be silently-ignore.
|
|
>
|
|
> * Trigger enabled. Your proposal is to fire it. Seems not to comport
|
|
> with the creation case --- does that bother anyone?
|
|
>
|
|
> * Trigger changed from not-deferred to deferred. If we already fired it
|
|
> for the event, we surely shouldn't fire it again. I believe the code
|
|
> gets this case right.
|
|
|
|
Agreed.
|
|
|
|
> * Trigger changed from deferred to not-deferred. As Neil was pointing
|
|
> out recently, this really should cause the trigger to be fired for the
|
|
> pending event immediately, but we don't get that right at the moment.
|
|
> (I suppose a stricter interpretation would be to raise an error because
|
|
> we can't do anything that really comports with the intended behavior
|
|
> of either case.)
|
|
|
|
I think this should generate an error as it doesn't sit well with the
|
|
spec IMHO.
|
|
|
|
Gavin
|
|
|
|
|
|
---------------------------(end of broadcast)---------------------------
|
|
TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
|
|
|
|
From pgsql-general-owner+M33538@postgresql.org Tue Nov 26 03:46:45 2002
|
|
Return-path: <pgsql-general-owner+M33538@postgresql.org>
|
|
Received: from postgresql.org (postgresql.org [64.49.215.8])
|
|
by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id gAQ8kio01351
|
|
for <pgman@candle.pha.pa.us>; Tue, 26 Nov 2002 03:46:44 -0500 (EST)
|
|
Received: from localhost (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with ESMTP
|
|
id 8EB404760F9; Tue, 26 Nov 2002 03:46:13 -0500 (EST)
|
|
Received: from postgresql.org (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with SMTP
|
|
id B1942475FCE; Tue, 26 Nov 2002 03:46:06 -0500 (EST)
|
|
Received: from localhost (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with ESMTP id 950CD474E53
|
|
for <pgsql-general@postgresql.org>; Tue, 26 Nov 2002 03:45:30 -0500 (EST)
|
|
Received: from hera.hs-niederrhein.de (hera.hs-niederrhein.de [194.94.120.3])
|
|
by postgresql.org (Postfix) with ESMTP id 4E172474E44
|
|
for <pgsql-general@postgresql.org>; Tue, 26 Nov 2002 03:45:29 -0500 (EST)
|
|
Received: (from root@localhost)
|
|
by hera.hs-niederrhein.de (8.11.6+Sun/8.11.6) id gAQ8jTK27063
|
|
for pgsql-general@postgresql.org; Tue, 26 Nov 2002 09:45:29 +0100 (CET)
|
|
Received: from terra (31-094.hs-niederrhein.de [193.175.48.94])
|
|
by hera.hs-niederrhein.de (8.11.6+Sun/8.11.6) with SMTP id gAQ8jPP27051
|
|
for <pgsql-general@postgresql.org>; Tue, 26 Nov 2002 09:45:25 +0100 (CET)
|
|
Date: Tue, 26 Nov 2002 09:43:32 +0100
|
|
From: Christoph Dalitz <christoph.dalitz@hs-niederrhein.de>
|
|
To: pgsql-general@postgresql.org
|
|
Subject: [GENERAL] ALTER TRIGGER DISABLE/ENABLE
|
|
Message-ID: <20021126094332.58250aef.christoph.dalitz@hs-niederrhein.de>
|
|
X-Mailer: Sylpheed version 0.6.6 (GTK+ 1.2.8; i586-pc-linux-gnu)
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=US-ASCII
|
|
Content-Transfer-Encoding: 7bit
|
|
X-Virus-Scanned: by AMaViS perl-11
|
|
X-Virus-Scanned: by AMaViS new-20020517
|
|
Precedence: bulk
|
|
Sender: pgsql-general-owner@postgresql.org
|
|
X-Virus-Scanned: by AMaViS new-20020517
|
|
Status: ORr
|
|
|
|
Hello,
|
|
|
|
while there have been suggested some hacks on the system catalog
|
|
for disabling/enabling triggers, these have two serious disadvantages:
|
|
|
|
- they cannot be done by the owner of the trigger
|
|
(only the DBA has write access to the system catalog)
|
|
- messing in the system catalog for simple DB schema changes makes
|
|
most users feel uneasy
|
|
|
|
Oracle has an SQL command "ALTER TRIGGER triggername DISABLE|ENABLE".
|
|
Were it possible to put this command on the TODO list for a future PG release?
|
|
|
|
Thanks,
|
|
|
|
Christoph Dalitz
|
|
|
|
---------------------------(end of broadcast)---------------------------
|
|
TIP 6: Have you searched our list archives?
|
|
|
|
http://archives.postgresql.org
|
|
|
|
From jllachan@nsd.ca Tue Nov 26 14:42:05 2002
|
|
Return-path: <jllachan@nsd.ca>
|
|
Received: from beamish.nsd.ca (IDENT:root@[205.150.156.194])
|
|
by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id gAQJg2P06491
|
|
for <pgman@candle.pha.pa.us>; Tue, 26 Nov 2002 14:42:04 -0500 (EST)
|
|
Received: (from smap@localhost)
|
|
by beamish.nsd.ca (8.9.3/8.9.3) id OAA28217;
|
|
Tue, 26 Nov 2002 14:41:56 -0500
|
|
X-Authentication-Warning: beamish.nsd.ca: smap set sender to <jllachan@nsd.ca> using -f
|
|
Received: from reddog.nsd.ca(192.168.101.30) by beamish.nsd.ca via smap (V2.1/2.1+anti-relay+anti-spam)
|
|
id xma028213; Tue, 26 Nov 02 14:41:31 -0500
|
|
Received: from nsd.ca (jllachan-linux.nsd.ca [192.168.101.148])
|
|
by reddog.nsd.ca (8.8.7/8.8.7) with ESMTP id OAA22894;
|
|
Tue, 26 Nov 2002 14:40:22 -0500
|
|
Sender: jllachan@reddog.nsd.ca
|
|
Message-ID: <3DE3CE7B.614EE99E@nsd.ca>
|
|
Date: Tue, 26 Nov 2002 14:41:47 -0500
|
|
From: Jean-Luc Lachance <jllachan@nsd.ca>
|
|
X-Mailer: Mozilla 4.77 [en] (X11; U; Linux 2.4.9-31 i686)
|
|
X-Accept-Language: en
|
|
MIME-Version: 1.0
|
|
To: Bruce Momjian <pgman@candle.pha.pa.us>
|
|
cc: Christoph Dalitz <christoph.dalitz@hs-niederrhein.de>,
|
|
pgsql-general@postgresql.org
|
|
Subject: Re: [GENERAL] ALTER TRIGGER DISABLE/ENABLE
|
|
References: <200211261853.gAQIrdE00304@candle.pha.pa.us>
|
|
Content-Type: text/plain; charset=us-ascii
|
|
Content-Transfer-Encoding: 7bit
|
|
Status: OR
|
|
|
|
I think thte sintax should be:
|
|
|
|
ALTER TABLE DISABLE|ENABLE TRIGGER {trigger name}|ALL
|
|
|
|
|
|
|
|
Bruce Momjian wrote:
|
|
>
|
|
> Christoph Dalitz wrote:
|
|
> > Hello,
|
|
> >
|
|
> > while there have been suggested some hacks on the system catalog
|
|
> > for disabling/enabling triggers, these have two serious disadvantages:
|
|
> >
|
|
> > - they cannot be done by the owner of the trigger
|
|
> > (only the DBA has write access to the system catalog)
|
|
> > - messing in the system catalog for simple DB schema changes makes
|
|
> > most users feel uneasy
|
|
> >
|
|
> > Oracle has an SQL command "ALTER TRIGGER triggername DISABLE|ENABLE".
|
|
> > Were it possible to put this command on the TODO list for a future PG release?
|
|
>
|
|
> Already on TODO list:
|
|
>
|
|
> * Allow triggers to be disabled [trigger]
|
|
>
|
|
> I will add your email to the TODO.detail thread.
|
|
>
|
|
> --
|
|
> Bruce Momjian | http://candle.pha.pa.us
|
|
> pgman@candle.pha.pa.us | (610) 359-1001
|
|
> + If your life is a hard drive, | 13 Roberts Road
|
|
> + Christ can be your backup. | Newtown Square, Pennsylvania 19073
|
|
>
|
|
> ---------------------------(end of broadcast)---------------------------
|
|
> TIP 6: Have you searched our list archives?
|
|
>
|
|
> http://archives.postgresql.org
|
|
|
|
From christoph.dalitz@hs-niederrhein.de Thu Nov 28 03:35:25 2002
|
|
Return-path: <christoph.dalitz@hs-niederrhein.de>
|
|
Received: from hera.hs-niederrhein.de (hera.hs-niederrhein.de [194.94.120.3])
|
|
by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id gAS8ZLP06871
|
|
for <pgman@candle.pha.pa.us>; Thu, 28 Nov 2002 03:35:23 -0500 (EST)
|
|
Received: (from root@localhost)
|
|
by hera.hs-niederrhein.de (8.11.6+Sun/8.11.6) id gAS8ZGZ16207;
|
|
Thu, 28 Nov 2002 09:35:16 +0100 (CET)
|
|
Received: from pc03230 (pc03230.kr.hs-niederrhein.de [194.94.121.230])
|
|
by hera.hs-niederrhein.de (8.11.6+Sun/8.11.6) with SMTP id gAS8ZDP16199;
|
|
Thu, 28 Nov 2002 09:35:13 +0100 (CET)
|
|
Date: Thu, 28 Nov 2002 09:33:57 +0100
|
|
From: Christoph Dalitz <christoph.dalitz@hs-niederrhein.de>
|
|
To: Jean-Luc Lachance <jllachan@nsd.ca>
|
|
cc: Bruce Momjian <pgman@candle.pha.pa.us>,
|
|
Tino Wildenhain <tino@wildenhain.de>, pgsql-general@postgresql.org
|
|
Subject: Re: ALTER TRIGGER DISABLE/ENABLE
|
|
Message-ID: <20021128093357.48c9d644.christoph.dalitz@hs-niederrhein.de>
|
|
In-Reply-To: <3DE3CE7B.614EE99E@nsd.ca>
|
|
References: <200211261853.gAQIrdE00304@candle.pha.pa.us>
|
|
<3DE3CE7B.614EE99E@nsd.ca>
|
|
Organization: FH Niederrhein
|
|
X-Mailer: Sylpheed version 0.7.4 (GTK+ 1.2.10; i386-debian-linux-gnu)
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=US-ASCII
|
|
Content-Transfer-Encoding: 7bit
|
|
X-Virus-Scanned: by AMaViS perl-11
|
|
Status: OR
|
|
|
|
On Tue, 26 Nov 2002 14:41:47 -0500
|
|
Jean-Luc Lachance <jllachan@nsd.ca> wrote:
|
|
>
|
|
> I think thte sintax should be:
|
|
>
|
|
> ALTER TABLE DISABLE|ENABLE TRIGGER {trigger name}|ALL
|
|
>
|
|
This would make no sense:
|
|
|
|
It could be the syntax if the statement for creating a trigger
|
|
where "ALTER TABLE ADD TRIGGER".
|
|
|
|
The statement for creating a trigger is however "CREATE TRIGEER".
|
|
|
|
Consequently the statement for changing a trigger must be "ALTER TRIGGER"
|
|
and not "ALTER TABLE".
|
|
|
|
Switching off all triggers for an individual table at once would be
|
|
convenient of course and can be easily achieved with "ALTER TRIGGER" as well:
|
|
just write a little PL/SQL procedure "disable_triggers()" that takes a
|
|
tablename as input and disables all triggers on it.
|
|
|
|
Christoph Dalitz
|
|
|
|
From pgsql-general-owner+M33790@postgresql.org Thu Nov 28 11:04:17 2002
|
|
Return-path: <pgsql-general-owner+M33790@postgresql.org>
|
|
Received: from postgresql.org (postgresql.org [64.49.215.8])
|
|
by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id gASG4EP11817
|
|
for <pgman@candle.pha.pa.us>; Thu, 28 Nov 2002 11:04:15 -0500 (EST)
|
|
Received: from localhost (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with ESMTP
|
|
id 0E622476313; Thu, 28 Nov 2002 11:03:52 -0500 (EST)
|
|
Received: from postgresql.org (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with SMTP
|
|
id 153FF476713; Thu, 28 Nov 2002 11:03:36 -0500 (EST)
|
|
Received: from localhost (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with ESMTP id 4A4AA475E41
|
|
for <pgsql-general@postgresql.org>; Thu, 28 Nov 2002 11:03:19 -0500 (EST)
|
|
Received: from beamish.nsd.ca (unknown [205.150.156.194])
|
|
by postgresql.org (Postfix) with ESMTP id 30F56475AFF
|
|
for <pgsql-general@postgresql.org>; Thu, 28 Nov 2002 11:03:18 -0500 (EST)
|
|
Received: (from smap@localhost)
|
|
by beamish.nsd.ca (8.9.3/8.9.3) id LAA12283;
|
|
Thu, 28 Nov 2002 11:02:54 -0500
|
|
X-Authentication-Warning: beamish.nsd.ca: smap set sender to <jllachan@nsd.ca> using -f
|
|
Received: from reddog.nsd.ca(192.168.101.30) by beamish.nsd.ca via smap (V2.1/2.1+anti-relay+anti-spam)
|
|
id xma012273; Thu, 28 Nov 02 11:02:35 -0500
|
|
Received: from nsd.ca (jllachan-linux.nsd.ca [192.168.101.148])
|
|
by reddog.nsd.ca (8.8.7/8.8.7) with ESMTP id LAA00966;
|
|
Thu, 28 Nov 2002 11:01:23 -0500
|
|
Message-ID: <3DE63E3D.5BC92720@nsd.ca>
|
|
Date: Thu, 28 Nov 2002 11:03:09 -0500
|
|
From: Jean-Luc Lachance <jllachan@nsd.ca>
|
|
X-Mailer: Mozilla 4.77 [en] (X11; U; Linux 2.4.9-31 i686)
|
|
X-Accept-Language: en
|
|
MIME-Version: 1.0
|
|
To: Christoph Dalitz <christoph.dalitz@hs-niederrhein.de>
|
|
cc: Bruce Momjian <pgman@candle.pha.pa.us>,
|
|
Tino Wildenhain <tino@wildenhain.de>, pgsql-general@postgresql.org
|
|
Subject: Re: [GENERAL] ALTER TRIGGER DISABLE/ENABLE
|
|
References: <200211261853.gAQIrdE00304@candle.pha.pa.us>
|
|
<3DE3CE7B.614EE99E@nsd.ca> <20021128093357.48c9d644.christoph.dalitz@hs-niederrhein.de>
|
|
Content-Type: text/plain; charset=us-ascii
|
|
Content-Transfer-Encoding: 7bit
|
|
X-Virus-Scanned: by AMaViS new-20020517
|
|
Precedence: bulk
|
|
Sender: pgsql-general-owner@postgresql.org
|
|
X-Virus-Scanned: by AMaViS new-20020517
|
|
Status: OR
|
|
|
|
Sementics.
|
|
|
|
The trigger belongs to the table.
|
|
The trigger is not modified.
|
|
The ability of the table being modified to call it is modified.
|
|
Plus, if you want all the triggers on a table to be disabled the ALTER
|
|
TRIGGER is not enough.
|
|
|
|
JLL
|
|
|
|
|
|
Christoph Dalitz wrote:
|
|
>
|
|
> On Tue, 26 Nov 2002 14:41:47 -0500
|
|
> Jean-Luc Lachance <jllachan@nsd.ca> wrote:
|
|
> >
|
|
> > I think thte sintax should be:
|
|
> >
|
|
> > ALTER TABLE DISABLE|ENABLE TRIGGER {trigger name}|ALL
|
|
> >
|
|
> This would make no sense:
|
|
>
|
|
> It could be the syntax if the statement for creating a trigger
|
|
> where "ALTER TABLE ADD TRIGGER".
|
|
>
|
|
> The statement for creating a trigger is however "CREATE TRIGEER".
|
|
>
|
|
> Consequently the statement for changing a trigger must be "ALTER TRIGGER"
|
|
> and not "ALTER TABLE".
|
|
>
|
|
> Switching off all triggers for an individual table at once would be
|
|
> convenient of course and can be easily achieved with "ALTER TRIGGER" as well:
|
|
> just write a little PL/SQL procedure "disable_triggers()" that takes a
|
|
> tablename as input and disables all triggers on it.
|
|
>
|
|
> Christoph Dalitz
|
|
|
|
---------------------------(end of broadcast)---------------------------
|
|
TIP 5: Have you checked our extensive FAQ?
|
|
|
|
http://www.postgresql.org/users-lounge/docs/faq.html
|
|
|
|
From pgsql-hackers-owner+M28358@postgresql.org Fri Sep 6 01:19:36 2002
|
|
Return-path: <pgsql-hackers-owner+M28358@postgresql.org>
|
|
Received: from postgresql.org (postgresql.org [64.49.215.8])
|
|
by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id g865JY225103
|
|
for <pgman@candle.pha.pa.us>; Fri, 6 Sep 2002 01:19:35 -0400 (EDT)
|
|
Received: from localhost (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with ESMTP
|
|
id 15A1C475B47; Fri, 6 Sep 2002 01:19:37 -0400 (EDT)
|
|
Received: from postgresql.org (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with SMTP
|
|
id 5D8C9475FC5; Fri, 6 Sep 2002 01:19:33 -0400 (EDT)
|
|
Received: from localhost (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with ESMTP id 50F2C475E88
|
|
for <pgsql-hackers@postgresql.org>; Fri, 6 Sep 2002 01:19:29 -0400 (EDT)
|
|
Received: from houston.familyhealth.com.au (unknown [203.59.48.253])
|
|
by postgresql.org (Postfix) with ESMTP id 633FA4759E8
|
|
for <pgsql-hackers@postgresql.org>; Fri, 6 Sep 2002 01:19:27 -0400 (EDT)
|
|
Received: (from root@localhost)
|
|
by houston.familyhealth.com.au (8.11.6/8.11.6) id g865JQh24183
|
|
for pgsql-hackers@postgresql.org; Fri, 6 Sep 2002 13:19:26 +0800 (WST)
|
|
(envelope-from chriskl@familyhealth.com.au)
|
|
Received: from mariner (mariner.internal [192.168.0.101])
|
|
by houston.familyhealth.com.au (8.11.6/8.9.3) with SMTP id g865JPk24139
|
|
for <pgsql-hackers@postgresql.org>; Fri, 6 Sep 2002 13:19:25 +0800 (WST)
|
|
From: "Christopher Kings-Lynne" <chriskl@familyhealth.com.au>
|
|
To: "Hackers" <pgsql-hackers@postgresql.org>
|
|
Subject: [HACKERS] Foreign keys in pg_dump
|
|
Date: Fri, 6 Sep 2002 13:19:44 +0800
|
|
Message-ID: <GNELIHDDFBOCMGBFGEFOKEBMCEAA.chriskl@familyhealth.com.au>
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain;
|
|
charset="iso-8859-1"
|
|
Content-Transfer-Encoding: 7bit
|
|
X-Priority: 3 (Normal)
|
|
X-MSMail-Priority: Normal
|
|
X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0)
|
|
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000
|
|
Importance: Normal
|
|
X-scanner: scanned by Inflex 0.1.5c - (http://www.inflex.co.za/)
|
|
X-Virus-Scanned: by AMaViS new-20020517
|
|
Precedence: bulk
|
|
Sender: pgsql-hackers-owner@postgresql.org
|
|
X-Virus-Scanned: by AMaViS new-20020517
|
|
Status: OR
|
|
|
|
OK,
|
|
|
|
The argument about using ALTER TABLE/ADD FOREIGN KEY in dumps was that it
|
|
caused an actual check of the data in the table, right? This was going to
|
|
be much slower than using CREATE CONSTRAINT TRIGGER.
|
|
|
|
So, why can't we do this in the SQL that pg_dump creates (TODO):
|
|
|
|
CREATE TABLE ...
|
|
ALTER TABLE/ADD FOREIGN KEY ...
|
|
update catalogs and disable triggers that the ADD FOREIGN KEY just created
|
|
...
|
|
COPY .. FROM ...
|
|
\.
|
|
update catalogs and enable triggers
|
|
|
|
Doesn't this give us the best of both worlds? ie. Keeps dependencies but
|
|
does fast COPYing?
|
|
|
|
Also, I think a new super-user (or owner) only SQL command would be nice
|
|
(TODO):
|
|
|
|
ALTER TABLE foo {DISABLE|ENABLE} TRIGGER { ALL | trigger_name [ ,... ] };
|
|
|
|
This is like MSSQL syntax (IIRC):
|
|
|
|
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_
|
|
aa-az_3ied.asp
|
|
Specifies that trigger_name is enabled or disabled. When a trigger is
|
|
disabled it is still defined for the table; however, when INSERT, UPDATE, or
|
|
DELETE statements are executed against the table, the actions in the trigger
|
|
are not performed until the trigger is re-enabled.
|
|
|
|
|
|
It would certainly tidy up the dumps a bit...
|
|
|
|
Chris
|
|
|
|
|
|
---------------------------(end of broadcast)---------------------------
|
|
TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
|
|
|
|
From pgsql-hackers-owner+M28381@postgresql.org Fri Sep 6 09:34:27 2002
|
|
Return-path: <pgsql-hackers-owner+M28381@postgresql.org>
|
|
Received: from postgresql.org (postgresql.org [64.49.215.8])
|
|
by candle.pha.pa.us (8.11.6/8.10.1) with ESMTP id g86DYQ201524
|
|
for <pgman@candle.pha.pa.us>; Fri, 6 Sep 2002 09:34:26 -0400 (EDT)
|
|
Received: from localhost (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with ESMTP
|
|
id C0CA0476E5C; Fri, 6 Sep 2002 09:34:19 -0400 (EDT)
|
|
Received: from postgresql.org (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with SMTP
|
|
id C788C476A92; Fri, 6 Sep 2002 09:34:16 -0400 (EDT)
|
|
Received: from localhost (postgresql.org [64.49.215.8])
|
|
by postgresql.org (Postfix) with ESMTP id 5CD18475EF0
|
|
for <pgsql-hackers@postgresql.org>; Fri, 6 Sep 2002 09:34:12 -0400 (EDT)
|
|
Received: from squire.barchord.com (squire.barchord.com [216.194.67.18])
|
|
by postgresql.org (Postfix) with ESMTP id 2A0AB476EAE
|
|
for <pgsql-hackers@postgresql.org>; Fri, 6 Sep 2002 09:34:11 -0400 (EDT)
|
|
Received: from [10.0.2.49] (nat.inquent.com [216.6.14.45])
|
|
by squire.barchord.com (Postfix) with ESMTP
|
|
id D4B60415; Fri, 6 Sep 2002 09:34:14 -0400 (EDT)
|
|
Subject: Re: [HACKERS] Foreign keys in pg_dump
|
|
From: Rod Taylor <rbt@zort.ca>
|
|
To: Christopher Kings-Lynne <chriskl@familyhealth.com.au>
|
|
cc: Hackers <pgsql-hackers@postgresql.org>
|
|
In-Reply-To: <GNELIHDDFBOCMGBFGEFOKEBMCEAA.chriskl@familyhealth.com.au>
|
|
References: <GNELIHDDFBOCMGBFGEFOKEBMCEAA.chriskl@familyhealth.com.au>
|
|
Content-Type: text/plain
|
|
Content-Transfer-Encoding: 7bit
|
|
X-Mailer: Ximian Evolution 1.0.8
|
|
Date: 06 Sep 2002 09:34:21 -0400
|
|
Message-ID: <1031319261.3555.9.camel@jester>
|
|
MIME-Version: 1.0
|
|
X-Virus-Scanned: by AMaViS new-20020517
|
|
Precedence: bulk
|
|
Sender: pgsql-hackers-owner@postgresql.org
|
|
X-Virus-Scanned: by AMaViS new-20020517
|
|
Status: ORr
|
|
|
|
On Fri, 2002-09-06 at 01:19, Christopher Kings-Lynne wrote:
|
|
> OK,
|
|
>
|
|
> The argument about using ALTER TABLE/ADD FOREIGN KEY in dumps was that it
|
|
> caused an actual check of the data in the table, right? This was going to
|
|
> be much slower than using CREATE CONSTRAINT TRIGGER.
|
|
>
|
|
> So, why can't we do this in the SQL that pg_dump creates (TODO):
|
|
>
|
|
> CREATE TABLE ...
|
|
> ALTER TABLE/ADD FOREIGN KEY ...
|
|
> update catalogs and disable triggers that the ADD FOREIGN KEY just created
|
|
> ...
|
|
> COPY .. FROM ...
|
|
> \.
|
|
> update catalogs and enable triggers
|
|
|
|
The problem with this is you may enable a trigger that was disabled by
|
|
the user. It cannot be done to all triggers. We could figure out which
|
|
triggers were created for the foreign key via pg_depend, then re-enable
|
|
only those.
|
|
|
|
If we did most of this in a single transaction it should be fairly safe.
|
|
|
|
> Doesn't this give us the best of both worlds? ie. Keeps dependencies but
|
|
> does fast COPYing?
|
|
>
|
|
> Also, I think a new super-user (or owner) only SQL command would be nice
|
|
> (TODO):
|
|
>
|
|
> ALTER TABLE foo {DISABLE|ENABLE} TRIGGER { ALL | trigger_name [ ,... ] };
|
|
|
|
pg_dump shouldn't need to know that a trigger is involved for foreign
|
|
keys. A SET CONSTRAINTS DISABLED would be more appropriate in a binary
|
|
mode dump -- but I firmly believe that text mode dumps should run full
|
|
checks on the data to ensure the user didn't muck with it.
|
|
|
|
|
|
|
|
|
|
---------------------------(end of broadcast)---------------------------
|
|
TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
|
|
|