使用 pg-promise 进行大量插入

2023-12-27

我在用着pg-承诺 https://github.com/vitaly-t/pg-promise我想对一张表进行多次插入。我见过一些解决方案,例如使用 pg-promise 进行多行插入 https://stackoverflow.com/questions/37300997/multi-row-insert-with-pg-promise and 如何使用node-postgres正确地将多行插入到PG中? https://stackoverflow.com/questions/34990186/how-do-i-properly-insert-multiple-rows-into-pg-with-node-postgres,我可以使用 pgp.helpers.concat 来连接多个选择。

但现在,我需要在一个表中插入大量测量值,该表有超过 10,000 条记录,并且在https://github.com/vitaly-t/pg-promise/wiki/Performance-Boost https://github.com/vitaly-t/pg-promise/wiki/Performance-Boost说: “您可以像这样连接多少条记录 - 取决于记录的大小,但使用这种方法我永远不会超过 10,000 条记录。因此,如果您必须插入更多记录,您会希望将它们分成这样的连接批次然后将他们一一处决。”

我阅读了所有文章,但我不知道如何将我的插入“拆分”成批次,然后一一执行它们。

Thanks!


UPDATE

最好的方法是阅读以下文章:数据导入 https://github.com/vitaly-t/pg-promise/wiki/Data-Imports.


作为作者pg-承诺 https://github.com/vitaly-t/pg-promise我被迫最终为这个问题提供正确的答案,因为之前发布的答案并没有真正做到公正。

为了插入大量/无限数量的记录,您的方法应该基于方法sequence http://vitaly-t.github.io/pg-promise/Task.html#sequence,这在任务和事务中可用。

var cs = new pgp.helpers.ColumnSet(['col_a', 'col_b'], {table: 'tableName'});

// returns a promise with the next array of data objects,
// while there is data, or an empty array when no more data left
function getData(index) {
    if (/*still have data for the index*/) {
        // - resolve with the next array of data
    } else {
        // - resolve with an empty array, if no more data left
        // - reject, if something went wrong
    }        
}

function source(index) {
    var t = this;
    return getData(index)
        .then(data => {
            if (data.length) {
                // while there is still data, insert the next bunch:
                var insert = pgp.helpers.insert(data, cs);
                return t.none(insert);
            }
            // returning nothing/undefined ends the sequence
        });
}

db.tx(t => t.sequence(source))
    .then(data => {
        // success
    })
    .catch(error => {
        // error
    });

从性能角度和负载限制的角度来看,这是将大量行插入数据库的最佳方法。

您所要做的就是实现您的功能getData根据您的应用程序的逻辑,即您的大数据来自哪里,基于index序列的,一次返回大约 1,000 - 10,000 个对象,具体取决于对象的大小和数据可用性。

另请参阅一些 API 示例:

  • spex -> 序列 http://vitaly-t.github.io/spex/global.html#sequence
  • 链接和分离测序 http://vitaly-t.github.io/spex/tutorial-sequencing.html
  • 流媒体和分页 http://vitaly-t.github.io/spex/tutorial-streaming.html

相关问题:具有大量查询的node-postgres https://stackoverflow.com/questions/29100807/node-postgres-with-massive-amount-of-queries.


如果您需要获取所有插入记录的生成 id,您可以按如下方式更改这两行:

// return t.none(insert);
return t.map(insert + 'RETURNING id', [], a => +a.id);

and

// db.tx(t => t.sequence(source))
db.tx(t => t.sequence(source, {track: true}))

请小心,因为在内存中保留太多记录 id 可能会造成过载。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 pg-promise 进行大量插入 的相关文章

  • axios 请求中未发送正文数据

    我试图通过 axios 请求将数据发送到我的后端脚本 但正文看起来是空的 这是前端发送的请求 axios request method GET url http localhost 4444 next api headers Authori
  • 下载 csv 文件 node.js

    我正在使用 node js 构建一个应用程序并尝试将数据下载为 csv 文件 我正在使用 json2csv https www npmjs com package json2csv https www npmjs com package j
  • 全局传递 xhr onload 函数的值

    在我正在创建的应用程序中 我有以下 XMLHttpRequest 并且我正在尝试传递结果data在 的里面xhr onload 到在同一父函数中创建的数组中 var url http api soundcloud com resolve j
  • 监听文件夹和文件(更改)

    可以直接在 PHP 或 Node 上监听文件夹和文件的更改 通过事件 还是我需要创建自己的方法来执行此操作 Example 我需要听文件夹 user 如果我将一些文件添加到该目录中 PHP 或 Node 会收到信息并运行PathEvent
  • 如何获取nodejs程序中的nodejs版本?

    In a Node js 的调试器 https github com rocky trepanjs 有一个命令显示V8版本和调试器包版本 如何获取nodejs版本 我想我基本上可以运行命令node version or nodejs ver
  • 呃!尝试将包发布到 npm 时出现 403

    我正在尝试将包发布到 npm 您可以在此处查看存储库 https github com biowaffeln mdx state https github com biowaffeln mdx state 我登录到 npmnpm login
  • 使用socket.io进行用户身份验证

    我已经红色了这个教程 http howtonode org socket io auth http howtonode org socket io auth 它展示了如何使用express和socket io对用户进行身份验证 但是有没有一
  • PostgreSQL 错误 42501:架构权限被拒绝

    我正在 ASP NET 中构建一个用户注册系统 使用 PostgreSQL 数据库来维护用户信息 作为注册过程的一部分 用户会收到一条确认消息 他们必须单击其中的链接来验证其电子邮件地址 然后 他们将进入一个可以创建密码的页面 一旦用户提供
  • HTML 格式的 Google Apps 脚本

    是否可以在我的 HTML 中使用 google apps 脚本 我希望能够从外部框架 例如 Node js 以纯 Javascript 形式从表单写入电子表格 https developers google com apps script
  • 如何创建没有循环关系的树形表?

    CREATE TABLE TREE node1 id UUID REFERENCES nodes object id NOT NULL node2 id UUID REFERENCES nodes object id NOT NULL CO
  • 如何在Windows服务器上将node.js文件作为后台进程运行?

    我正在创建一个 node js 项目并将其上传到我的 Windows 服务器 以为移动应用程序提供 API 服务 当我打开命令提示符并键入 node app js 它运行正常 但是当我关闭命令提示符时 我的 Node js 服务器停止运行
  • 如何设置上传的文件名?

    By using multer I made it to request image file like this 这个文件存储在我设置的 上传 文件夹中 我的代码如下 var multer require multer var uploa
  • Node.js 重写 toString

    我试图覆盖我的对象的默认 toString 方法 这是代码和问题 function test this code 0 later on I will set these this name test prototype toString f
  • 节点无法抓取某些页面

    我不知道这是否与冷融合页面有关 但我无法刮掉这些 cfm pages 在目录中的命令行中request run node gt var request require request node gt var url http linguis
  • Sequelize - 使用 es6 和模块运行迁移

    我不确定我是否做错了什么或者什么 我觉得我正在运行一个现代的 相当常见的堆栈 但我无法让新的 Sequelize v6 与我的设置完美配合 我在 Node v14 17 Sequelize v6 6 2 上 在我的 package json
  • Firebase 模拟器启动时失败找不到模块 --dns-result-order=ipv4first

    Firebase 模拟器11 0 0无法启动 firebase emulators start 当它到达模拟器 UI 时抛出异常 i ui 模拟器 UI 日志记录到 ui debug log ui 发生致命错误 模拟器 UI 已退出 代码为
  • NestJS e2e 测试模拟会话装饰器

    我正在尝试使用 supertest 编写一个 e2e 测试 其中我的控制器实际上使用了 Session 装饰师 然而 我不想承担使用数据库连接等启动会话的全部负担 因此测试中的我的应用程序实际上并未初始化会话 相反 我想首先模拟掉装饰器提供
  • 如何使用Create React App安装React

    嗨 我对反应真的很陌生 我不知道如何实际安装它 也不知道我需要做什么才能在其中编写代码 我下载了node js并且安装了v12 18 3以及NPM 6 14 6 但是每次我尝试在许多网站上提到的create react app安装方法中输入
  • Django 独特的不工作

    我在从查询中过滤掉重复项时遇到问题 我正在使用 Django 1 4 和 Postgres 8 4 13 我在我的模型对象上使用这个查询 它是一个 jquery 自动完成 term request GET get term field re
  • Nodejs Express中间件函数返回值

    我正在使用 NodeJS 和 Express 我有以下路线 中间件功能是Mobile 如果我不使用 return next 在 isMobile 函数中 应用程序会卡住 因为 NodeJS 不会移至下一个函数 但我需要 isMobile 函

随机推荐

  • 使 Jackson 子类型可扩展,无需编辑超类型 java 文件

    在我的公司 我们有一个固定的 JSON 消息结构 headerVal1 headerVal2 customPayload payloadType 我想要某种库 它允许我不关心公司定义的消息结构 而只是发送和接收有效负载 我的想法是 将公司模
  • Java如何在Intellij中找到spark、Hadoop和AWS jar

    我正在 Java 中的 IntelliJ 上运行 Spark 应用程序 我已在 pom xml 中添加了 Spark Hadoop 和 AWS 依赖项 但不知何故 AWS 凭证并未加载 我得到的确切错误是Caused by com amaz
  • 如何在Asp.net的图像控件中显示数据库中的图像?

    如何在Asp net的图像控件中显示数据库中的图像 我们必须在asp net页面中显示员工的图像及其详细信息 但问题是如何在asp net图像控件上显示图像 因为图像控件通过属性ImageUrl来拍照 请指导 您可以创建一个 HttpHan
  • 单个 lambda、多个 cloudwatch 日志组

    运行 AWS lambda 后 将填充单个 cloudwatch 日志组 有没有一种方法可以从单个 AWS lambda 填充两个 不同的 cloudwatch 日志组 我搜索了一下但找不到答案 让我知道是否可能 无法从单个 lambda
  • NoReverseMatch at / Reverse for 'post_detail' 未找到关键字参数 '{'pk': ''}'

    我一直在尝试让这个应用程序工作 我运行 python manage py runserver 一切都很好 我能够看到该网站 以超级用户身份登录 发表评论 但是在尝试查看帖子时我开始收到错误 现在 如果我只是访问该网站 就会收到错误消息 我收
  • Javascript/jQuery onclick 不起作用

    我制作了一个 test html 文档来测试脚本 不知怎的 它不起作用 我不明白为什么什么也没有发生 脚本位于 tags 中并用 tag 包裹 CSS 也有它的 tags 为什么它不起作用 这是代码
  • Html 敏捷包帮助

    我正在尝试从网站上抓取一些信息 但找不到适合我的解决方案 我在互联网上读到的每一个代码都会至少产生一个错误 即使他们主页上的示例代码也会给我带来错误 My code HtmlDocument doc new HtmlDocument doc
  • 我可以使 Dialogflow 意图至少需要一个经过训练的实体吗?

    我知道如何使意图需要任何参数值 之后意图将强制获取该值 但有可能让它强制得到atleast给定实体参数之一 您可以为该意图启用 Webhook 实现 如果未提供实体 则重新提示用户至少提供一组实体之一
  • 静态与 Malloc

    与使用 malloc 相比 块作用域中的 static 关键字有什么优势 例如 功能A f static int x 7 功能B f int x malloc sizeof int if x NULL x 7 如果我理解正确的话 这两个程序
  • symfony 5 - 事件未被调度

    当我提交订单时 我使用事件订阅者来处理一些操作 问题是我的事件没有被调度 但是 symfony 能够找到他 因为他告诉我我的 OrderEvent ORDER CREATE 是孤立的 我预计执行会停止die Hello you from s
  • maven项目中的getClass().getResourceAsStream()

    我的 Maven 项目的 pom xml 如下所示
  • BigDecimal stripTrailingZeros 不适用于零

    我的代码中遇到了奇怪的错误 它与 new BigDecimal 1 2300 stripTrailingZeros returns 1 23 正确的 但 new BigDecimal 0 0000 stripTrailingZeros re
  • clojure/ClojureScript 中的字符串化/解析 edn

    在 JavaScript 中 我们可以通过以下方式将 js 数据结构转换为 JSON 字符串 JSON stringify somedata somesubdata 在其他地方 我们可以通过以下方式将其再次解析为 JS 数据结构 var m
  • EditText 的 requestFocus() 不适用于运行 android P (API 28) 的设备

    我在用EditText s接受 OTP 用户重点关注下一步EditText一旦他在字段中输入数字 等等 它在所有设备上都能正常工作 但在运行 android OS P 即 API 28 的设备上 requestFocus 不起作用 并且用户
  • 查找 N 对列表中的日期是否重叠

    给定开始时间和开始时间的列表 我想查找该列表是否包含重叠条目 timesok 9 30 10 00 10 00 10 30 10 30 11 00 wrongtimes1 9 30 10 00 9 00 10 30 10 30 11 00
  • 如何在 JavaScript 中对数组元素进行 JSON 解码?

    我有一个 JavaScript 数组 其中包含一个 URL 如果我尝试简单地将 URL 放入页面中 该数组位于涉及 Yahoo Maps API 的项目中 它会按应有的方式显示 URL 但是 如果我尝试执行重定向或只是对链接数组元素执行 警
  • HealthKit HKAuthorizationStatus 用于读取数据

    我正在使用 HealthKit 来读取某些类型的信息 我特别不要求写入功能 当尝试检测用户是否允许读取某种健康类型时 就会出现问题 我相信执行此操作的预期方法是使用 HKHealthStore 的authorizationStatusFor
  • 如何提供一个私有并排清单来正确定位 .NET Dll 作为 COM 提供程序?

    我正在研究私有注册免费 WinSxS 的配置 并提供简单的程序集清单文件 以便在部署和运行时将 Delphi 可执行文件 COM 客户端 和 NET C COM 可见 DLL 拼接在一起 我已经研究了 MSDN 上提供的文档 与非托管代码互
  • 为什么头文件中的函数声明中对于按值传递的参数不需要 const ?

    我最近正在阅读有关使用const关键字作为 C 中的函数参数及其使用方法已在何时以及出于什么目的constC语言中变量的关键字 https softwareengineering stackexchange com questions 20
  • 使用 pg-promise 进行大量插入

    我在用着pg 承诺 https github com vitaly t pg promise我想对一张表进行多次插入 我见过一些解决方案 例如使用 pg promise 进行多行插入 https stackoverflow com ques