Я написал эту функцию для вставки или обновления строк подписки в таблицу подписки:
CREATE OR REPLACE FUNCTION fn_set_subscription(input_subscription_id varchar(50), input_customer_id varchar(50), input_api_key char(16), input_issued_date timestamp, input_subscription_type integer)
RETURNS TABLE (subscription_id varchar(50),
customer_id varchar(50),
api_key char(16),
issued_date timestamp,
subscription_type smallint) AS
$func$
BEGIN
RETURN QUERY
INSERT INTO subscription
VALUES (input_subscription_id, input_customer_id, input_api_key, input_issued_date, inpu_subscription_type)
ON CONFLICT (subscription_id)
DO UPDATE SET issued_date = subscription.issued_date
RETURNING *;
END
$func$ LANGUAGE plpgsql;
Во время выполнения я получаю следующую ошибку:
postgres | 2020-08-05 14:11:09.607 UTC [79] ERROR: column reference "subscription_id" is ambiguous at character 151
postgres | 2020-08-05 14:11:09.607 UTC [79] DETAIL: It could refer to either a PL/pgSQL variable or a table column.
postgres | 2020-08-05 14:11:09.607 UTC [79] QUERY: INSERT INTO subscription
postgres | VALUES (input_subscription_id, input_customer_id, input_api_key, input_issued_date, input_subscription_type)
postgres | ON CONFLICT (subscription_id)
postgres | DO UPDATE SET issued_date = subscription.issued_date
postgres | RETURNING *
postgres | 2020-08-05 14:11:09.607 UTC [79] CONTEXT: PL/pgSQL function fn_set_subscription(character varying,character varying,character,timestamp without time zone,integer) line 3 at RETURN QUERY
postgres | 2020-08-05 14:11:09.607 UTC [79] STATEMENT: SELECT * FROM fn_set_subscription("input_subscription_id" := $1,"input_customer_id" := $2,"input_api_key" := $3,"input_issued_date" := $4,"input_subscription_type" := $5)
Я пытался изменить имя столбца subscription_id в ON CONFLICT на => ON CONFLICT (subscription.subscription_id), но мне кажется, что это не разрешено.
Любая помощь / улучшения были бы очень признательны.