Re: UPSERT on a view

From: "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>
To: Melvin Davidson <melvin6925(at)gmail(dot)com>
Cc: Steven Roth <steve(at)rothskeller(dot)net>, "pgsql-general(at)postgresql(dot)org >> PG-General Mailing List" <pgsql-general(at)postgresql(dot)org>
Subject: Re: UPSERT on a view
Date: 2018-03-13 14:02:29
Message-ID: CAKFQuwbx6XTYmvQtpAU=h3ufMHAYnzp4fH6a1Dhx2YXvrZAr5A@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Tue, Mar 13, 2018 at 6:47 AM, Melvin Davidson <melvin6925(at)gmail(dot)com>
wrote:

> On Mon, Mar 12, 2018 at 2:26 PM, Steven Roth <steve(at)rothskeller(dot)net>
> wrote:
>
>> This code raises the error 'foo', even though the insert says DO NOTHING
>> and the error type is unique_violation. Why?
>>
>> More generally: how can one write trigger functions for a view (that is
>> not automatically updatable), such that INSERT ... ON CONFLICT DO UPDATE
>> will work with the correct semantics? What can one do in the INSERT
>> trigger that will cause PostgreSQL to execute the caller-supplied UPDATE
>> clause?
>>
>>
Sorry, not sure...

> >CREATE TRIGGER vtest_insert INSTEAD OF INSERT ON *vtest*
> > FOR EACH ROW EXECUTE PROCEDURE vtest_insert();
> >*INSERT INTO vtest *VALUES (1) ON CONFLICT DO NOTHING;
>
>
>
> *Your problem is that A. TRIGGERS are meant for TABLES, not views*
>
> *and *
>
> *B. You CANNOT insert into a VIEW.*
>
>
​Your knowledge is this area is out-of-date...you should read the page you
linked to again.

I'll admit "table_name" probably could be labelled "relation_name"...though
that is then too broad.

David J.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Melvin Davidson 2018-03-13 14:09:07 Re: UPSERT on a view
Previous Message Tom Lane 2018-03-13 13:58:31 Re: Question on corruption (PostgreSQL 9.6.1)