首页 > 解决方案 > 关系“schema.f()”不存在来自 Node-Postgres 的调用函数

问题描述

使用pg又名node-postgresv8.3

我有一个 PostgreSQL (v12) 函数f(),名为myschema. 它在 pgAdmin 4.25 中完美运行

select * from myschema.f()

在节点中调用它:

const Pool = require("pg").Pool;
const pool = new Pool(
    {
        user: ...,
    }
);
const pgCallF = (paramless, cbFunc) =>
{
    var sql = 'select * from "myschema"."f()"'; // same err if myschema.f(), but ok for query like 'select * from myschema.table1'
    pool.query(sql)
        .then
        (
            good =>
            {...},
            bad =>
            {...}
        )
        .catch(error => {
            console.log(error);
            next();
        })
}

拿到

关系“myschema.f()”不存在。

标签: node.jspostgresql

解决方案


括号是函数调用的一部分,而不是函数名的一部分。它们不会进入引号内(无论如何都不需要)。

现在您可以创建一个名称中带有括号的函数,在这种情况下,它们会放在引号内,而当您使用该函数时,另一对会放在引号内,但是 1)您没有这样做,并且 2)这将是一个恶魔反正想法。


推荐阅读