pg-promise:支持多态类型

时间:2018-09-04 18:17:50

标签: pg-promise

我具有以下多态函数:

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

我通常调用我经常使用的函数时,需要时,将{strong> typecast ::text用作p_value;例如:

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

我怀疑pg-promise不支持多态类型,是吗?

Tia

1 个答案:

答案 0 :(得分:1)

方法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-promise不支持多态类型,是吗?

这无关紧要。该库仅使用您在查询中指定的任何类型执行查询。