BUG #15533: error on upsert when used in a fuction and a function parameter has the same name as the column

From: PG Bug reporting form <noreply(at)postgresql(dot)org>
To: pgsql-bugs(at)lists(dot)postgresql(dot)org
Cc: lulzimbilali(at)gmail(dot)com
Subject: BUG #15533: error on upsert when used in a fuction and a function parameter has the same name as the column
Date: 2018-11-30 20:17:20
Message-ID: 15533-ac9506ee433a0d18@postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

The following bug has been logged on the website:

Bug reference: 15533
Logged by: Lulzim Bilali
Email address: lulzimbilali(at)gmail(dot)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

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Pantelis Theodosiou 2018-11-30 23:05:40 Re: BUG #15533: error on upsert when used in a fuction and a function parameter has the same name as the column
Previous Message Tom Lane 2018-11-30 15:00:48 Re: BUG #15528: on v11.0 version still get error "ERROR: catalog is missing 1 attribute(s) for relid 6855092"