On 14 January 2016 at 12:08, Adrian Klaver <adrian.kla...@aklaver.com>
wrote:

> On 01/13/2016 02:51 PM, David Rowley wrote:
>
>> On 14 January 2016 at 11:32, Adrian Klaver <adrian.kla...@aklaver.com
>> <mailto:adrian.kla...@aklaver.com>> wrote:
>>
>>     On 01/13/2016 02:24 PM, Tom Lane wrote:
>>
>>         "Williamson, Michael" <michael.william...@tamucc.edu
>>         <mailto:michael.william...@tamucc.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=b152c6cd0de1827ba58756e24e18110cf902182a
>>
>
> 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


I assumed this part was a mistake in the post by Michael.  I tried this on
9.1.19 and I correctly get the name of the table rather than the name of
the trigger. So even in the unlikely event that this was a bug, it's
working in the latest 9.1 minor release:

# drop trigger if exists test_trigger on testtable;
ERROR:  relation "testtable" does not exist
# select version();
                                                    version


----------------------------------------------------------------------------------------------------------------
 PostgreSQL 9.1.19 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu
5.2.1-22 ubuntu2) 5.2.1 20151010, 64-bit
(1 row)

-- 
 David Rowley                   http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services

Reply via email to