pg-обещание: поддержка полиморфных типов - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть следующая полиморфная функция:

CREATE OR REPLACE FUNCTION check_value_existence(
    p_value anynonarray,
    p_column_name information_schema.sql_identifier,
    p_table_name name,
    p_schema_name information_schema.sql_identifier DEFAULT 'public'::character varying)
RETURNS boolean AS
$BODY$
...
$BODY$
LANGUAGE plpgsql

и я называю это следующим образом:

 db.func("check_value_existence", [account.username, "username", "account", "customer"])
 .then(found => { ...})
 .catch(error => {...});

но я получаю следующую ошибку:

could not determine polymorphic type because input has type unknown

Когда я обычно вызываю функцию, я всегда использую, когда требуется, typecast ::text для p_value; например:

SELECT check_value_existence('username_1'::text, 'username', 'account', 'customer');

Я подозреваю, что pg-обещание не поддерживает полиморфные типы, не так ли?

Tia

1 Ответ

0 голосов
/ 05 сентября 2018

Метод func предназначен только для поддержки простейшего сценария, который не требует приведения типов. Если вам требуется приведение типов, не используйте его, вместо этого используйте стандартный запрос с приведением типов.

В случае функции, которая возвращает одно значение, вы можете использовать:

db.one('SELECT * FROM check_value_existence($1::text, $2, $3, $4)', [account.username, 'username', 'account', 'customer'])
.then(data => {
    // data
})
.catch(error => {
    // error
})

Я подозреваю, что pg-обещание не поддерживает полиморфные типы, не так ли?

Это не имеет значения. Библиотека просто выполняет запросы с указанными вами типами.

...