Possible trigger bug? function call argument literalised - Mailing list pgsql-general

From Thiemo Kellner
Subject Possible trigger bug? function call argument literalised
Date
Msg-id 20210103180840.Horde.Fe4qNP3Uviz_9c6aPfxBTS2@webmail.gelassene-pferde.biz
Whole thread Raw
Responses Re: Possible trigger bug? function call argument literalised
Re: Possible trigger bug? function call argument literalised
Re: Possible trigger bug? function call argument literalised
List pgsql-general
Hi

I created a table with trigger and according trigger and trigger function as

drop table if exists CALCULATION_METHOD cascade;
create table CALCULATION_METHOD (ID
                                    uuid
                                    not null
                                    default uuid_generate_v4(),
                                  METHOD_NAME
                                    text
                                    not null,
                                  DB_ROUTINE_NAME
                                    name
                                    not null,
                                  ENTRY_PIT
                                    timestamptz
                                    not null
                                    default transaction_timestamp(),
                                  REMARKS
                                    text,
                                  constraint CALCULATION_METHOD_PK
                                    primary key (ID),
                                  constraint CALCULATION_METHOD_UQ
                                    unique (DB_ROUTINE_NAME));

create or replace function METHOD_CHECK()
   returns trigger
   language plpgsql
   stable
   as
$body$
     declare
         V_COUNT     smallint;
     begin
         if TG_NARGS != 1 then
             raise
               exception
               using
                 message = 'METHOD_CHECK expects the schema name to be  
passed and nothing more! There have been passed ' ||
                             TG_NARGS || ' arguments.',
                 hint = 'Please check the trigger "' || TG_NAME ||
                          '" on table "' || TG_TABLE_NAME || '" in schema "' ||
                          TG_TABLE_SCHEMA || '".';
         end if;
         select COUNT(*) into V_COUNT
           from INFORMATION_SCHEMA.ROUTINES
          where ROUTINE_SCHEMA   = TG_ARGV[1]
            and ROUTINE_NAME     = NEW.DB_ROUTINE_NAME;
         if V_COUNT != 1 then
             raise exception ' expects the schema name to be passed!';
         end if;
         insert into TG_TABLE_SCHEMA.TG_TABLE_NAME values (NEW.*);
         return NULL;
     end;
$body$;

create trigger CALCULATION_METHOD_BR_IU
   before insert on CALCULATION_METHOD
   for each row
   execute function METHOD_CHECK(current_schema);


Executing such, the string "current_schema" gets literalised, i.e.  
single quoted:
norge=# \d calculation_method
                               Table "public.calculation_method"
      Column      |           Type           | Collation | Nullable |   
        Default
-----------------+--------------------------+-----------+----------+-------------------------
  id              | uuid                     |           | not null |  
uuid_generate_v4()
  method_name     | text                     |           | not null |
  db_routine_name | name                     |           | not null |
  entry_pit       | timestamp with time zone |           | not null |  
transaction_timestamp()
  remarks         | text                     |           |          |
Indexes:
     "calculation_method_pk" PRIMARY KEY, btree (id)
     "calculation_method_uq" UNIQUE CONSTRAINT, btree (db_routine_name)
Triggers:
     calculation_method_br_iu BEFORE INSERT ON calculation_method FOR  
EACH ROW EXECUTE FUNCTION method_check('current_schema')


I am using
norge=# select version();
                                                                       version

----------------------------------------------------------------------------------------------------------------------------------------------------
  PostgreSQL 12.5 on x86_64-suse-linux-gnu, compiled by gcc (SUSE  
Linux) 10.2.1 20201028 [revision  
a78cd759754c92cecbf235ac9b447dcdff6c6e2f], 64-bit

I strongly feel this is a bug, at least no intention at all from my  
side. However, before filing a bug, I wanted to get your opinion on  
that. Maybe it is just a problem of the openSUSE Tumbleweed repository.

I would appreciate your two dimes. Kind regards

Thiemo

-- 
S/MIME Public Key: https://oc.gelassene-pferde.biz/index.php/s/eJuAUFONag6ofnH
Signal (Safer than WhatsApp): +49 1578 7723737
Threema (Safer than WhatsApp): A76MKH3J
Handys: +41 78 947 36 21 | +49 1578 772 37 37




pgsql-general by date:

Previous
From: Andreas Kretschmer
Date:
Subject: Re: Max# of tablespaces
Next
From: Tom Lane
Date:
Subject: Re: Max# of tablespaces