【问题标题】:Passing array of records to Postgres in `node-postgres` without string concatenation?在没有字符串连接的情况下将记录数组传递给`node-postgres`中的Postgres?
【发布时间】:2019-02-08 08:07:46
【问题描述】:

我有一个接受自定义复合类型数组的 Postgres 函数。我通过生成一个巨大的 SQL 文本查询让它工作,但是超过 100,000 个数组项,它失败了。这可能是 Node 或 Postgres,我不确定。

我知道在Npgsql(.NET Postgres 驱动程序)中,您可以将数组作为参数传递。在node-postgres 中也可以这样做吗?

【问题讨论】:

    标签: node.js postgresql node-postgres


    【解决方案1】:

    据我所知,Node.js 将其进程限制为每个进程不到 2GB 的内存。根据您的对象的大小,您可能会遇到一个内存上限的数组。

    如果您一次插入多个项目,使用COPY 命令将对象流式传输到数据库中可能比使用大型数组的批量INSERT 更有效和可靠。以下是一些有用的帖子,描述了该方法的要点:

    【讨论】:

    • 我真正想要的是能够将原生数组传递给 postgres 而无需生成 SQL。在 .NET 中是可能的,所以我很好奇为什么它不在 node-pg 中。
    • 顺便说一句,我不知道在不匹配 PostgreSQL 期望的语法的情况下,将数组作为参数从 Node.js 传递给 PL/pgSQL 函数的简化方法。在 npm 上可能有一些包可以为你处理它,但我不知道它们叫什么。这个问题及其答案可能是相关的:stackoverflow.com/questions/13328016 至于为什么它不在node-postgres 中,也许它不是一个足够常见的用例?对于批量插入,pg-format 接受 Array 和 Object 结构来为您构建 VALUES 子句,但这与您的函数方法不兼容。
    猜你喜欢
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 2021-01-24
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多