Detection of which attributes should get set in update trigger

2023-11-10 Thread Thiemo Kellner

Hi all

I have a view, that is a join over 4 tables (the setup of the rule 
question). I want to update the central table over the view (by an 
instead-of trigger). How can I determine, whether an attribute should 
get set to NULL, "new.XYZ is null" or whether it should be left alone. 
Is there a leave-me-alone function determining, whether an attribute is 
in the set clause of an update statement. I am thinking along the line 
code in the trigger function like


update TABLE
   set XYZ = case
  when leave-me-alone (new.XYZ) then old.XYZ
  else new.XYZ
 end;

And what about the where condition... hm, guess I am a bit confused.

Kind regards

Thiemo





Re: Detection of which attributes should get set in update trigger

2023-11-10 Thread David G. Johnston
On Friday, November 10, 2023, Thiemo Kellner 
wrote:

> Hi all
>
> I have a view, that is a join over 4 tables (the setup of the rule
> question). I want to update the central table over the view (by an
> instead-of trigger). How can I determine, whether an attribute should get
> set to NULL, "new.XYZ is null" or whether it should be left alone. Is there
> a leave-me-alone function determining, whether an attribute is in the set
> clause of an update statement. I am thinking along the line code in the
> trigger function like
>
> update TABLE
>set XYZ = case
>   when leave-me-alone (new.XYZ) then old.XYZ
>   else new.XYZ
>  end;
>
> And what about the where condition... hm, guess I am a bit confused.
>

IIUC, The NEW record is complete, with every value as it should be in the
newly saved tuple.  There is no leave-me-alone concept.  You don’t get to
know if the column was specified or not in the update command.

David J.


Re: Detection of which attributes should get set in update trigger

2023-11-10 Thread Thiemo Kellner
Thanks for the reply. I confirm the behaviour. Your explanation makes 
sense if I consider having read that with an update the is a complete 
new record version written.


Am 10.11.2023 um 14:35 schrieb David G. Johnston:
On Friday, November 10, 2023, Thiemo Kellner 
 wrote:


Hi all

I have a view, that is a join over 4 tables (the setup of the rule
question). I want to update the central table over the view (by an
instead-of trigger). How can I determine, whether an attribute
should get set to NULL, "new.XYZ is null" or whether it should be
left alone. Is there a leave-me-alone function determining,
whether an attribute is in the set clause of an update statement.
I am thinking along the line code in the trigger function like

update TABLE
   set XYZ = case
  when leave-me-alone (new.XYZ) then old.XYZ
  else new.XYZ
 end;

And what about the where condition... hm, guess I am a bit confused.


IIUC, The NEW record is complete, with every value as it should be in 
the newly saved tuple.  There is no leave-me-alone concept.  You don’t 
get to know if the column was specified or not in the update command.


David J.