Thanks.

27.02.2024 19:09:50 Adrian Klaver <adrian.kla...@aklaver.com>:

> 
> On 2/27/24 9:49 AM, Thiemo Kellner wrote:
>> Hi
>> 
>> I am surprised that my before insert trigger function does not insert any 
>> rows into NODE_GOOD.
>> 
>> I was under the impression that the trigger function would do the insert 
>> with the new and possibly adapted values. In my case, to me at least, it is 
>> very simple. Only records of node type "Drop-off" must and are allowed to 
>> have a task name. If this is not given, raise an exception. What am I 
>> missing?
>> 
>> Function code:
>>     create or replace function NODE_GOOD⠒TR_B_IU_R()
>>       returns trigger
>>       language plpgsql
>>       stable
>>       set search_path = SNOWRUNNER,
>>                         PUBLIC
>>       as
>>     $body$
>>         declare
>>             V⠒NODE_TYPE⠒NAME                NODE⠒V.NODE_TYPE⠒NAME%type := 
>> null;
>>         begin
>>             -- raise info ': %', ;
>>             raise info 'new.NODE⠒ID: %', new.NODE⠒ID;
>>             raise info 'new.TASK_NAME: %', new.TASK_NAME;
>>             select NODE_TYPE⠒NAME into V⠒NODE_TYPE⠒NAME
>>               from NODE⠒V
>>              where 1 = 1
>>                and ID = new.NODE⠒ID
>>                and 1 = 1;
>>             raise info 'V⠒NODE_TYPE⠒NAME: %', V⠒NODE_TYPE⠒NAME;
>>             if (    V⠒NODE_TYPE⠒NAME = 'Drop-off'
>>                 and new.TASK_NAME is null) then
>>                 raise exception 'A good connection to a drop-off node must 
>> have a task name!';
>>             elsif (    V⠒NODE_TYPE⠒NAME != 'Drop-off'
>>                    and new.TASK_NAME is not null) then
>>                 raise exception 'A good connection to a non-drop-off node 
>> cannot have a task name!';
>>             end if;
>>             raise info 'Going to leave the trigger function 
>> "NODE_GOOD⠒TR_B_IU_R"';
>>             return null;
> 
> Assuming this is row level trigger and run BEFORE:
> 
> https://www.postgresql.org/docs/current/plpgsql-trigger.html#PLPGSQL-DML-TRIGGER
> 
> "
> 
> Row-level triggers fired *BEFORE* can return null to signal the trigger 
> manager to skip the rest of the operation for this row (i.e., subsequent 
> triggers are not fired, and the *INSERT*/*UPDATE*/*DELETE* does not occur for 
> this row). If a nonnull value is returned then the operation proceeds with 
> that row value.
> 
> "
> 
> 
> 
> 
>>         end;
>>     $body$;
>> 
>> 
>> The output of the important part of the install script is listed at the end.
>> 
>> Please find attached my code.
>> 
>> Kind regards
>> 
>> Thiemo
>> 
>> 
>> insert data into NODE_GOOD⠒V
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.NODE⠒ID: 
>> 1107cb8d-c1f1-4368-ac7b-72ac3031555a
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.TASK_NAME: Landslide on 
>> the Highway
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  V⠒NODE_TYPE⠒NAME: Drop-off
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  Going to leave the trigger 
>> function  "NODE_GOOD⠒TR_B_IU_R"
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.NODE⠒ID: 
>> cdb25b50-e6cf-46fe-85f6-47ec72c00a22
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.TASK_NAME: <NULL>
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  V⠒NODE_TYPE⠒NAME: Pick-up
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  Going to leave the trigger 
>> function  "NODE_GOOD⠒TR_B_IU_R"
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.NODE⠒ID: 
>> 59dec625-9167-4e63-9022-917e1a751206
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.TASK_NAME: <NULL>
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  V⠒NODE_TYPE⠒NAME: Pick-up
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  Going to leave the trigger 
>> function  "NODE_GOOD⠒TR_B_IU_R"
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.NODE⠒ID: 
>> b4fd810a-2065-4bcc-bd1d-49021d7ade95
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.TASK_NAME: <NULL>
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  V⠒NODE_TYPE⠒NAME: Pick-up
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  Going to leave the trigger 
>> function  "NODE_GOOD⠒TR_B_IU_R"
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.NODE⠒ID: 
>> a3459f1d-2615-4b20-946b-daca4a9e69de
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.TASK_NAME: <NULL>
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  V⠒NODE_TYPE⠒NAME: Pick-up
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  Going to leave the trigger 
>> function  "NODE_GOOD⠒TR_B_IU_R"
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.NODE⠒ID: 
>> c0069eea-0ee0-44ca-8b15-c14e59230a75
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.TASK_NAME: <NULL>
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  V⠒NODE_TYPE⠒NAME: Pick-up
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  Going to leave the trigger 
>> function  "NODE_GOOD⠒TR_B_IU_R"
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.NODE⠒ID: 
>> 5917e5d2-bc16-4126-8486-6a8bedca45aa
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.TASK_NAME: <NULL>
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  V⠒NODE_TYPE⠒NAME: Pick-up
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  Going to leave the trigger 
>> function  "NODE_GOOD⠒TR_B_IU_R"
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.NODE⠒ID: 
>> 86abd010-d930-4486-9a5e-1e85d8e81faa
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.TASK_NAME: <NULL>
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  V⠒NODE_TYPE⠒NAME: Pick-up
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  Going to leave the trigger 
>> function  "NODE_GOOD⠒TR_B_IU_R"
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.NODE⠒ID: 
>> b80adef3-8233-4e20-8f8e-3a5ccf04aacd
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.TASK_NAME: <NULL>
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  V⠒NODE_TYPE⠒NAME: Pick-up
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  Going to leave the trigger 
>> function  "NODE_GOOD⠒TR_B_IU_R"
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.NODE⠒ID: 
>> f51c6a96-ffbb-433b-8402-2b4dc467b689
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.TASK_NAME: <NULL>
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  V⠒NODE_TYPE⠒NAME: Pick-up
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  Going to leave the trigger 
>> function  "NODE_GOOD⠒TR_B_IU_R"
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.NODE⠒ID: 
>> 37e29f40-9da0-44e7-a601-06dfa94043e6
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.TASK_NAME: <NULL>
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  V⠒NODE_TYPE⠒NAME: Pick-up
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  Going to leave the trigger 
>> function  "NODE_GOOD⠒TR_B_IU_R"
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.NODE⠒ID: 
>> e8d2c14d-37bd-4c11-a3c6-55cd382fd414
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  new.TASK_NAME: <NULL>
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  V⠒NODE_TYPE⠒NAME: Pick-up
>> psql:insert_data/NODE_GOOD⠒V.pg_sql:27: INFO:  Going to leave the trigger 
>> function  "NODE_GOOD⠒TR_B_IU_R"
>> INSERT 0 0
>> COMMIT
> -- 
> Adrian Klaver
> adrian.kla...@aklaver.com

Reply via email to