pg-promise:在事务中的下一个查询中使用一个查询的结果

2024-02-03

我是带有 pg-promise for postgres 的 node.js,尝试按顺序执行 2 个插入的事务。第一次插入的结果 ID 应在事务中的下一次插入中使用。

如果任何查询失败则回滚。 嵌套第二次db.none inside .then() of 1st db.one不会回滚第一个查询。所以这里使用事务。

我坚持在第二个查询中使用第一个查询的结果。 这是我现在所拥有的。

db.tx(function (t) {
    return t.sequence([
        // generated using pgp.helpers.insert for singleData query
        t.one("INSERT INTO table(a, b) VALUES('a', 'b') RETURNING id"),
        t.none("INSERT INTO another_table(id, a_id) VALUES(1, <above_id>), (2, <above_id>)")
    ]);
})...

第二个查询是使用 pgp.helpers.insert 生成多数据查询。但想要使用前一个查询的结果是不可行的。不是吗!

有没有办法得到id i.e. <above_id>从第一个插入?


Method sequence http://vitaly-t.github.io/spex/global.html#sequence是否可以运行无限序列,这与您想要实现的目标无关 - 一个标准/琐碎的事务:

await db.tx(async t => {
    const id = await t.one('INSERT INTO table1(a, b) VALUES($1, $2) RETURNING id', [1, 2], a => +a.id);
    await t.none('INSERT INTO table2(id, a_id) VALUES($1, $2)', [1, id]);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pg-promise:在事务中的下一个查询中使用一个查询的结果 的相关文章

随机推荐

  • 文本框输入,键盘禁用,条形码扫描仪保留

    我制作了一个带有文本框的 Windows 窗体应用程序 我将强制用户使用条形码扫描仪 因此应该禁用键盘输入 KeyPressed 事件不起作用 因为也禁用了来自条形码扫描仪的输入 我想也许我可以在 TextChanged 事件上设置一个计时
  • 将 Google 电子表格日期转换为 JS Date 对象?

    我一直在绕圈子 我有一个包含两个日期的电子表格 我需要找到两个日期之间经过的年数 即某人在给定日期的年龄 这是Excel 的 DATEDIF 的替代品 第一步是将 Google 的序列号转换为 JS Date 对象 但似乎没有 Date 构
  • 如何在 Selenium 2 中实现 wait_for_page_to_load ?

    我是自动化 Web 测试的新手 目前正在从旧的 Selenium RC 实现迁移到 Ruby 中的 Selenium 2 有没有办法在页面加载之前停止执行命令 类似于 wait for page to load 在 Selenium RC
  • 解锁 PHPExcel 上的所有单元格

    SOLVED 找到自己解决这个问题的正确方法 使用类似PHPExcel getDefaultStyle gt getProtection gt setLocked fals e 这很棒 首先 Excel默认的单元格保护设置是 锁定 可见 我
  • WCF 自动生成 WSDL

    我有这个服务定义 DataContract public class Test DataMember IsRequired true public TestArray array DataContract public class Test
  • 语义 Ui 菜单不起作用

    我正在尝试使用语义 ui 菜单 但我无法让它工作 即当我单击菜单中的项目时 活动状态没有改变 我在网上也没有找到任何例子 HTML div class ui grid div class one wide row div class ui
  • 如何通过脚本以编程方式确定已安装的 IE 版本

    我们有一个基于selenium grid的自动化测试集群 为了管理集群 我构建了一个 Rake Ruby 任务集合 可以启动 重新启动 ping 和停止节点 我正在多种浏览器 包括 IE6 IE7 和 IE8 上测试我们的应用程序 这意味着
  • 如何在javascript中调整Base64图像的大小

    我测试了这个包 https preview npmjs com package resize base64 https preview npmjs com package resize base64 它需要前端部分来制作Canvas元素 等
  • Relay 和 GraphQL 中的身份验证

    我一直在使用反应和中继开发一个应用程序 现在我一直致力于实现身份验证 我知道您可以通过 GraphQL 解析函数中提供的上下文将值传递给每个 graphql 请求 我更困惑的是要传递什么以及如何传递 使用 JSON Web 令牌 护照或其他
  • 有什么快速方法可以使用 pandas 获得时间序列数据的正确聚合输出?

    我用过Redfin房地产数据 其中记录了芝加哥地区每个地区多年来的每月房屋销售价格 我想先计算该城市的年平均房屋销售价格 同时我还想获得每个区域的年房屋销售价格变化 然后我想将每个区域的年销售价格变化与各自的年平均房屋销售价格进行比较在城市
  • 动态添加按钮到面板并获取其父 ID

    我创建了一个页面 为管理员提供了一种更改照片信息 例如标题 描述等 的方法 页面上的所有控件都是动态添加的 因为我有多个照片库 面板 gt 父级 button 标题文本框 描述文本框 在每个面板中 我都有一个按钮 单击该按钮会将更改后的信息
  • 32 位编译在 64 位 Ubuntu 16.04 上失败

    我有一个应用程序需要使用 glib 和第三方提供的 32 位库 当我在 32 位 Ubuntu 上编译时 应用程序构建并成功运行 但是 当我在 64 位 Ubuntu 上尝试相同的操作时 由于以下错误而无法构建 usr include gl
  • CGPDFDocument 和 CGPDFPage 的 MonoTouch CoreGraphics PDF 内存问题

    我已经使用 MonoTouch 3 周了 一切都很顺利 直到我必须在我的应用程序中显示 PDF 使用苹果的Quartz 2D 编程指南 http developer apple com mac library documentation G
  • 如何录制媒体播放器中当前正在播放的实时视频流

    我用谷歌搜索了很多 但没有发现任何成功 甚至没有一个可以让我启动的点 我正在使用 VideoView 播放来自 url 的视频 成功播放视频 同时我想录制当前播放的视频 例如 http ip streamname playlist m3u8
  • 在 Flutter 中创建弹出对话框

    我需要一种在颤动中创建弹出对话框的方法 我能够根据需要创建 双色调 设计和一个对话框 但是当用户单击按钮导航到此屏幕时 我无法找到弹出对话框的方法 创建视图的代码 class CreateID extends StatelessWidget
  • 如何有条件地更改详细信息列表中行的颜色?

    我正在看自定义项目行 https developer microsoft com en us fabric components detailslist customitemrows但没有太多文档 我有一个表 如果当前用户创建了一行 我想将
  • 马尔可夫链如何工作以及什么是无记忆?

    马尔可夫链如何工作 我读过维基百科马尔可夫链 http en wikipedia org wiki Markov chain 但我不明白的是失忆 无记性指出 下一个状态仅取决于当前状态 而不取决于 之前发生的事件的顺序 如果马尔可夫链具有这
  • 如何清除 PHP 中先前回显的项目

    在 php 中 有没有办法清除 删除所有先前回显或打印的项目 例如 我的脚本使用 include 函数 包含的文件不应回显任何内容 以防万一有人 例如黑客 尝试 我需要一种方法来删除
  • Xamarin.Forms 页面BackgroundImage 属性

    由于 BackgroundImage 是一个字符串 您应该如何设置页面的背景图像 我将非常感谢任何建议 到目前为止我已经尝试过 MainPage new ContentPage BackgroundImage Images image pn
  • pg-promise:在事务中的下一个查询中使用一个查询的结果

    我是带有 pg promise for postgres 的 node js 尝试按顺序执行 2 个插入的事务 第一次插入的结果 ID 应在事务中的下一次插入中使用 如果任何查询失败则回滚 嵌套第二次db none inside then