Скажем, у меня составной тип id_and_name
.
CREATE TYPE id_and_name AS (id integer, name text);
Я хочу использовать эту структуру (id, name)
в качестве параметра в функции, но я хочу, чтобы пользователю функции не приходилось приводить вручную:SELECT fun((1, 'name')::id_and_name)
;пользователь должен быть хорош с SELECT fun((1, 'name'))
.Это означает, что мой параметр функции будет anyelement
или подобным, и я должен привести его к id_and_name
в функции:
CREATE OR REPLACE FUNCTION fun(anyelement)
RETURNS id_and_name AS $$
SELECT $1::id_and_name;
$$ LANGUAGE sql;
По какой-то причине SELECT fun((1, 'name'))
выдает мне ошибку:
ERROR: cannot cast type record to id_and_name
LINE 2: SELECT $1::id_and_name;
^
Хотя тот же запрос из функции с замещенным параметром работает нормально:
SELECT (1, 'name')::id_and_name;
Как мне выполнить такое приведение в функциях?
Я на PostgreSQL 10