BUG #15533: error on upsert when used in a fuction and a functionparameter has the same name as the column - Mailing list pgsql-bugs

From PG Bug reporting form
Subject BUG #15533: error on upsert when used in a fuction and a functionparameter has the same name as the column
Date
Msg-id 15533-ac9506ee433a0d18@postgresql.org
Whole thread Raw
Responses Re: BUG #15533: error on upsert when used in a fuction and a functionparameter has the same name as the column
List pgsql-bugs
The following bug has been logged on the website:

Bug reference:      15533
Logged by:          Lulzim Bilali
Email address:      lulzimbilali@gmail.com
PostgreSQL version: 11.1
Operating system:   Ubuntu 18.04
Description:

Can't use `ON CONFLICT DO UPDATE` in a function which has a parameter with
the same name as the column where the unique key is.

Here is the error I get.

Query execution failed

       Reason:
       SQL Error [42702]: ERROR: column reference "id" is ambiguous
       Detail: It could refer to either a PL/pgSQL variable or a table
column.
       Where: PL/pgSQL function log_tst(integer,text) line 4 at SQL
statement

the test code I'm using:


    --DROP TABLE IF EXISTS tst;
    CREATE TABLE tst (
     id int UNIQUE,
     info text
    );
    
    --DROP FUNCTION IF EXISTS log_tst;
    CREATE OR REPLACE FUNCTION log_tst(id int, info text) RETURNS void AS
    $$
    BEGIN
        
        INSERT INTO tst (id, info)
        VALUES (log_tst.id, log_tst.info)
        --ON CONFLICT DO NOTHING
        ON CONFLICT (id) DO UPDATE
        SET info = log_tst.info
    ;
    END $$
    LANGUAGE plpgsql;
    
    SELECT log_tst(1, 'changed');

I would expect it to work since we can't use a parameter to check the
uniqueness even if we want (or can we!?), so PostgreSQL should know to use
the column instead.

Lulzim


pgsql-bugs by date:

Previous
From: Tom Lane
Date:
Subject: Re: BUG #15528: on v11.0 version still get error "ERROR: catalog is missing 1 attribute(s) for relid 6855092"
Next
From: Pantelis Theodosiou
Date:
Subject: Re: BUG #15533: error on upsert when used in a fuction and a functionparameter has the same name as the column