Re: ON DELETE trigger blocks delete from my table - Mailing list pgsql-general

From Richard_D_Levine@raytheon.com
Subject Re: ON DELETE trigger blocks delete from my table
Date
Msg-id OF6F167C3C.5CAAE56D-ON05256F39.00465DC5@ftw.us.ray.com
Whole thread Raw
In response to ON DELETE trigger blocks delete from my table  ("Naeem Bari" <naeem.bari@agilissystems.com>)
List pgsql-general
Interesting about the meta DDL.  I wrote a very small language called QDL
for Query Description Language that uses the same idea.  You feed QDL and
the SQL schema into the compiler and it writes C modules with embedded SQL.
Makes porting my application from one database to another a snap from the
application's perspective.  It also makes embedded SQL easier to work with
than it normally is, but it's still less flexible than dynamic functions.
Embedded SQL is better than dynamic query building for safety critical full
path testing, and this method makes it more manageable.

Rick



                     
                      "Naeem Bari"
                     
                      <naeem.bari@agilissyste        To:       "Jan Wieck" <JanWieck@Yahoo.com>, "Franco Bruno
Borghesi"                     
                      ms.com>                         <franco@akyasociados.com.ar>
                     
                      Sent by:                       cc:       <pgsql-general@postgresql.org>
                     
                      pgsql-general-owner@pos        Subject:  Re: [GENERAL] ON DELETE trigger blocks delete from my
table                   
                      tgresql.org
                     

                     

                     
                      10/25/2004 03:09 PM
                     

                     

                     




Ok, a really newbie question - I think I will switch to using "after"
rather than "before" - but can I modify the trigger statement without
dropping the trigger function? The reason I ask is that I actually wrote
a program that takes oracle's DDL and generates all the tables, audit
tables, triggers and sequences that I need. So I really have like 50
tables that are affected by this issue - would much rather modify my
program than hand fix 50 problems :)

BTW, I did not find much that did what my program does. Or maybe I did
not look hard enough? Basically my program eats "meta ddl" (pseudo ddl
that I cam up with that specifies the table name, the columns, the
column that should be a sequence number, whether a table should be
audited or not, plus table and column comments) and spits out DDL for
both oracle and postgres. Keeps my DDL all nice and neat and consistent,
and I have to write only a small amount of DDL to generate a lot of it
:)

Thanks again for the help guys,
Naeem


-----Original Message-----
From: Jan Wieck [mailto:JanWieck@Yahoo.com]
Sent: Monday, October 25, 2004 2:52 PM
To: Franco Bruno Borghesi
Cc: Naeem Bari; pgsql-general@postgresql.org
Subject: Re: [GENERAL] ON DELETE trigger blocks delete from my table

On 10/25/2004 3:33 PM, Franco Bruno Borghesi wrote:

> I've made a test case, and setting the trigger BEFORE DELETE doesn't
> delete the rows from the table (but it does execute the trigger, and
it
> does insert the rows in the audit table), I dont' know why :(.

Because the internal variable for NEW is initialize to NULL and
returning NULL from a BEFORE trigger silently suppresses the operation
on the original row that it was fired for.


Jan

>
> Anyway, setting the trigger AFTER DELETE works ok.
>
> On Mon, 2004-10-25 at 15:56, Naeem Bari wrote:
>
>> Hi,
>>
>>
>>
>> I am using postgres 7.4.5 on Redhat Enterprise Linux 3.
>>
>>
>>
>> My background is really on Oracle, and I am porting a largish
database
>> over to postgres.
>>
>>
>>
>> Here is my problem:
>>
>>
>>
>> On oracle, I had a table with an "on update or delete" trigger that
>> copied the current row out to an audit table. Works like a champ. On
>> postgres, when I try to delete a row, all it gives back to me is
>> "DELETE 0" and does nothing.
>>
>>
>>
>> Here is the text of the trigger:
>>
>>
>>
>> ~~~~~~~~~~
>>
>> CREATE OR REPLACE FUNCTION public.func_job_status_upd()
>>
>>   RETURNS trigger AS
>>
>> '
>>
>> begin
>>
>>   insert into x_job_status values ( OLD.job_id,
>> OLD.job_status_type_id, OLD.status_date, OLD.notes,
>> OLD.edit_person_id, OLD.edit_date);
>>
>>   return new;
>>
>> end;
>>
>> '
>>
>>   LANGUAGE 'plpgsql' VOLATILE;
>>
>> ~~~~~~~~~~
>>
>>
>>
>> Any help would be appreciated!
>>
>>
>>
>> Thanks,
>>
>> naeem
>>
>>
>


--
#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me.                                  #
#================================================== JanWieck@Yahoo.com #

---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org






pgsql-general by date:

Previous
From: Tino Wildenhain
Date:
Subject: Re: Strange count(*) implementation?
Next
From: Mike Mascari
Date:
Subject: Re: Any plans on allowing user-defined triggers to be deferrable?