【问题标题】:pg-promise method for PostgreSQL void functionPostgreSQL void 函数的 pg-promise 方法
【发布时间】:2018-04-11 17:00:25
【问题描述】:

当执行RETURNS voiddb.none()"No return data was expected." 拒绝的 PostgreSQL 函数时。

然后我使用db.one() 方法,该方法使用对象{ PS_name: '' } 进行解析。

我应该期望 PostgreSQL 的 void 函数实际上返回一个空对象吗?使用pg-promise 处理 void 函数的最合适方法是什么?

【问题讨论】:

  • 我在下面提供的答案不再有效 - 请参阅更新。

标签: javascript postgresql postgresql-9.1 pg-promise


【解决方案1】:

下面的答案不再有效,因为 PostgreSQL v11 添加了对正确存储过程的支持,并且方法 proc 现在只能使用新的 CALL 语法调用存储过程。


用 pg-promise 处理 void 函数最合适的方法是什么?

数据库方法proc.

db.proc('proc_name', [param1, param2,...])
    .then(data => {
        /* data = either null or an object */
    })
    .catch(error => {
        /* error */
    });

更新

使用proc时如何指定参数类型?即,修复function foo(unknown) does not exist?如果我做db.proc('foo($1::int2[])', x),那么它会抛出syntax error at or near "("

你不能用 proc 方法来做到这一点,它是为了让事情变得非常简单而创建的。如果您的调用需要 SQL 类型转换,您需要使用模板内的转换作为常规查询执行它:

db.oneOrNone('SELECT * FROM proc_name($1::int2[], $2, ...)', [param1, param2,...])
    .then(data => {
        /* data = either null or an object */
    })
    .catch(error => {
        /* error */
    });

此上下文中的方法 oneOrNone 在结果预期上等同于方法 proc

【讨论】:

  • proc 方法 SQL 注入安全吗?
  • @Kathandrax 是的。
  • @vitaly-t : 使用proc时如何指定参数类型?即,修复“函数 foo(unknown) 不存在”?如果我执行 db.proc("foo($1::int2[])", x),那么它会在 "("' 处或附近抛出“语法错误”。
  • @steamer25 我已经为你的问题添加了更新;)
猜你喜欢
  • 2018-04-12
  • 2020-06-28
  • 2019-05-24
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 2018-02-28
  • 1970-01-01
  • 2012-01-09
相关资源
最近更新 更多