From: | "Williamson, Michael" <Michael(dot)Williamson(at)tamucc(dot)edu> |
---|---|
To: | "david(dot)rowley(at)2ndquadrant(dot)com" <david(dot)rowley(at)2ndquadrant(dot)com>, "adrian(dot)klaver(at)aklaver(dot)com" <adrian(dot)klaver(at)aklaver(dot)com> |
Cc: | "tgl(at)sss(dot)pgh(dot)pa(dot)us" <tgl(at)sss(dot)pgh(dot)pa(dot)us>, "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: v9.1, DROP TRIGGER IF EXISTS behaving oddly |
Date: | 2016-01-14 21:47:22 |
Message-ID: | 1452808041.26175.27.camel@tamucc.edu |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Please excuse my mistake.
We were dropping a view that had the trigger on it beforehand, then in
trying to re-build the entire schema had scripts that attempted to drop
trigger if they existed before re-creating the view and triggers. I
over-sanitized the example I posted and made it unclear.
I did some more testing and DROP TRIGGER IF EXISTS indeed works as
expected if the table/view is there and the trigger is not there.
As a follow-up, it would be nice if "IF EXISTS" could apply to either
the trigger or the relation it is applied to, as I don't think a
trigger can't exist without a relation to apply it to.
Michael
On Wed, 2016-01-13 at 15:08 -0800, Adrian Klaver wrote:
> On 01/13/2016 02:51 PM, David Rowley wrote:
> > On 14 January 2016 at 11:32, Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)c
> om
> > <mailto:adrian(dot)klaver(at)aklaver(dot)com>> wrote:
> >
> > On 01/13/2016 02:24 PM, Tom Lane wrote:
> >
> > "Williamson, Michael" <Michael(dot)Williamson(at)tamucc(dot)edu
> > <mailto:Michael(dot)Williamson(at)tamucc(dot)edu>> writes:
> >
> > I'm attempting to drop a trigger that may or may not
> exist,
> > so am using
> > the "IF EXISTS" clause. Â This works fine for tables,
> views,
> > functions,
> > domains, and types, but for some reason seems to be
> ignored for
> > triggers. Â I'd expect to see more about this online if
> it
> > were a bug,
> > so I'm thinking I may be missing something obvious.
> >
> >
> > Example:
> > DROP TRIGGER IF EXISTS udf_customer_update_trigger ON
> customer;
> >
> >
> > Expected Output:
> > NOTICE:Â Â trigger "udf_customer_update_trigger" does
> not
> > exist, skipping
> >
> >
> > Observed Output:
> > ERROR:Â Â relation "udf_customer_update_trigger" does
> not exist
> >
> >
> > Environment:
> > CentOS 6.6
> > postgresql91-server-9.1.14-1PGDG.rhel6.x86_64
> >
> >
> > This has worked the way you're imagining since (I think)
> 9.4.
> > Before
> > that the "if exists" semantics only applied to the trigger
> itself,
> > not to the relation.
> >
> >
> > Alright now I am confused. Other then changing table to
> table_name I
> > am not seeing where the below changed. In both cases a NOTICE
> is
> > supposed to be raised.
> >
> > http://www.postgresql.org/docs/9.1/interactive/sql-droptrigger.
> html
> >
> > http://www.postgresql.org/docs/9.4/interactive/sql-droptrigger.
> html
> >
> >
> > Seems to have been changed in
> > http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=b152c
> 6cd0de1827ba58756e24e18110cf902182a
>
> I will take a look at this at some point. The part that has me
> confused
> from the original post is this:
>
> ERROR: relation "udf_customer_update_trigger" does not exist
>
> If the ERROR is because the table does not exist, why not?:
>
> ERROR: relation "customer" does not exist
>
> >
> > Perhaps that commit should have also made changes to the documents
> to
> > change things such as:
> >
> > Do not throw an error if the trigger does not exist. A notice is
> issued
> > in this case.
> >
> > To
> >
> > Do not throw an error if the trigger or table does not exist. A
> notice
> > is issued in this case.
> >
> > --
> > David Rowley http://www.2ndQuadrant.com/
> > PostgreSQL Development, 24x7 Support, Training & Services
>
>
From | Date | Subject | |
---|---|---|---|
Next Message | Saulo Merlo | 2016-01-14 21:47:58 | Re: Query Questions - PostgreSQL |
Previous Message | David G. Johnston | 2016-01-14 20:39:46 | Re: regexp_replace |