Re: Delete rule does not prevent truncate

From: Melvin Davidson <melvin6925(at)gmail(dot)com>
To: Tim Smith <randomdev4+postgres(at)gmail(dot)com>
Cc: pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: Re: Delete rule does not prevent truncate
Date: 2015-07-22 13:29:02
Message-ID: CANu8FixtZS9QjQ8aYOrAH2f4H=jzoBKU+qNPRJNkOkCcLsbV4w@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

No,

I am saying if you

CREATE PROCEDURE do_nothing()
RETURNS VOID
$BODY$
BEGIN
RETURN;
END
LANGUAGE plpgsql;

CREATE TRIGGER no_trunc INSTEAD OF TRUNCATE ON your_table
EXECUTE PROCEDURE do_nothing;

Then you can handle the problem.

You should also create a TRIGGER for DELETE to do the same.

On Wed, Jul 22, 2015 at 9:13 AM, Tim Smith <randomdev4+postgres(at)gmail(dot)com>
wrote:

> Melvin,
>
> May I point out that the manual states :
> "TRUNCATE quickly removes all rows from a set of tables. It has the same
> effect as an unqualified DELETE on each table"
>
> Thus, if you are telling me to effectively think of TRUNCATE as an alias
> to DELETE, then I would think its not entirely unreasonable of me to expect
> a rule preventing DELETE to also cover truncate, since the rule would no
> doubt prevent an unqualified DELETE, would it not ?!?
>
> On 22 July 2015 at 14:03, Melvin Davidson <melvin6925(at)gmail(dot)com> wrote:
>
>> Actually, if you use a TRIGGER instead of rule, you can handle this.
>> The manual states event can be:
>>
>> INSERT
>> UPDATE [ OF column_name [, ... ] ]
>> DELETE*TRUNCATE <-----*
>>
>> http://www.postgresql.org/docs/9.4/interactive/sql-createtrigger.html
>>
>> I suggest you review carefully.
>>
>> On Wed, Jul 22, 2015 at 8:53 AM, Tim Smith <randomdev4+postgres(at)gmail(dot)com
>> > wrote:
>>
>>> Hi,
>>>
>>> I very much hope this is an accidental bug rather than a deliberate
>>> feature !
>>>
>>> PostgreSQL 9.4.4
>>>
>>> create rule no_auditupd as on update to app_security.app_audit do
>>> instead nothing;
>>> create rule no_auditdel as on delete to app_security.app_audit do
>>> instead nothing;
>>>
>>> \d+ app_security.app_audit
>>> <snip>
>>> Rules:
>>> no_auditdel AS
>>> ON DELETE TO app_security.app_audit DO INSTEAD NOTHING
>>> no_auditupd AS
>>> ON UPDATE TO app_security.app_audit DO INSTEAD NOTHING
>>>
>>> The truncate trashes the whole table ;-(
>>>
>>> According to the FabulousManual(TM) :
>>> event : The event is one of SELECT, INSERT, UPDATE, or DELETE.
>>>
>>> Thus I can't create a rule to "do nothing" on truncates, thus I am stuck
>>> !
>>>
>>>
>>> --
>>> Sent via pgsql-general mailing list (pgsql-general(at)postgresql(dot)org)
>>> To make changes to your subscription:
>>> http://www.postgresql.org/mailpref/pgsql-general
>>>
>>
>>
>>
>> --
>> *Melvin Davidson*
>> I reserve the right to fantasize. Whether or not you
>> wish to share my fantasy is entirely up to you.
>>
>
>

--
*Melvin Davidson*
I reserve the right to fantasize. Whether or not you
wish to share my fantasy is entirely up to you.

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Adrian Klaver 2015-07-22 13:38:09 Re: Delete rule does not prevent truncate
Previous Message Tim Smith 2015-07-22 13:24:51 Re: Delete rule does not prevent truncate