Knex 以静默方式转换 Postgres 时间戳与时区并返回错误的时间

2024-02-12

我的 psql 数据库中有一个表,其中的“trigger_time”列的类型为“TIMESTAMP WITH TIME ZONE DEFAULT now()”

我行中的数据是这样的2018-06-27 15:45:00-03.

从 psql 控制台运行时

SELECT trigger_time AT TIME ZONE 'UTC' 
FROM tasks 
WHERE task_id = 1;

此查询返回“2018-06-27 18:45:00”。

同样,当我跑步时

SELECT trigger_time AT TIME ZONE 'America/Glace_Bay' 
FROM tasks 
WHERE task_id = 1;

I get 2018-06-27 15:45:00

Using knex.raw("SELECT trigger_time AT TIME ZONE 'America/Glace_Bay' FROM tasks WHERE task_id = 1") I get 2018-06-27T18:45:00.000Z以及跑步时knex.raw("SELECT trigger_time AT TIME ZONE 'UTC' FROM tasks WHERE task_id = 1") I get 2018-06-27T21:45:00.000Z

knex 的这两个结果都不正确,如何让 knex 停止默默地更改我的数据?


事情可能会失败,因为当您在特定时区的数据库中查询日期时间并有效地将时间戳类型转换为没有时区的时间戳时。在这种情况下,数据库不会向 knex 发送有关返回时间所在时区的信息。

因此 knex (或者更确切地说 knex 使用的 pg 驱动程序)将您的时间戳解释为本地时间,这取决于运行 knex 的应用程序服务器的时区设置。

您可以像 UTC 一样获取时间,并使用 moment 或 luxon 库在 JavaScript 端进行时区转换(IMO 后者更适合时区处理)。

其他解决方案是告诉 pg 驱动程序时间戳和带有时区类型的时间戳不应转换为JavaScript Date对象。

可以这样做(https://github.com/brianc/node-pg-types https://github.com/brianc/node-pg-types):

const types = require('pg').types;
const TIMESTAMPTZ_OID = 1184;
const TIMESTAMP_OID = 1114;
types.setTypeParser(TIMESTAMPTZ_OID, val => val);
types.setTypeParser(TIMESTAMP_OID, val => val);

此代码使所有时间戳作为字符串返回,可以添加到例如开始时knexfile.js。这些返回的字符串将与数据库服务器本身返回的格式完全相同。

EDIT:

在原始帖子的代码中,当时间戳转换为时区时UTC数据库服务器转换timestamp with time zone类型要正常timestamp without time zone所以返回的值没有时区信息。要添加时区信息,您可以将 +02 添加到返回时间戳的末尾,如下所示:

select ('2010-01-01T00:00:00.000Z'::timestamptz AT TIME ZONE 'UTC')::text || '+00';

哪个返回2010-01-01 00:00:00+00到驱动程序,pg 驱动程序也可以正确读取。

这将有效地完成与仅设置相同的事情SET TIME ZONE 'UTC';在数据库服务器中,当创建连接并直接返回 timestamptz 列时:

SET TIME ZONE 'UTC';
select '2010-01-01T00:00:00.000+02:00'::timestamptz;

哪个会返回2009-12-31 22:00:00+00.

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

Knex 以静默方式转换 Postgres 时间戳与时区并返回错误的时间 的相关文章

  • Chart.js 在初始化时设置活动段

    我正在使用 Chart js v2 并且尝试在加载图表时模拟圆环图上某个段的 悬停状态 因此看起来有一个部分已突出显示 我已经搜索和梳理了代码一天 但找不到一个好的方法来做到这一点 提前致谢 设置片段的悬停样式有点令人困惑 因为它没有真正记
  • 渲染货币和符号并与来自不同单元格的数据相结合

    我正在使用最新的 jQuery DataTables v1 10 7 我正在尝试将数字解析为以下格式 239 90 USD 我可以使用此命令使货币正常工作 columns data Price render fn dataTable ren
  • Chrome 中的性能问题

    我目前正在从事一个相对较大的项目 使用 AngularJs 构建 应用程序的一部分是一个表单 您可以向其中添加任意数量的页面 不幸的是 添加了很多不必要的垃圾 即表示表单模型的对象可能会变得非常大 在某些时候 Chrome 基本上无法处理它
  • 执行带有 EXCEPTION 的 PostgreSQL 查询会导致两条不同的错误消息

    我有一个 PostgreSQL 查询 其中包含事务和列重复时的异常 BEGIN ALTER TABLE public cars ADD COLUMN top speed text EXCEPTION WHEN duplicate colum
  • 比较两个 postgres 转储文件

    如何比较 postgres 转储文件 我有两个转储文件 dump1 和 dump2 我想比较这两个转储文件 任何帮助将不胜感激 谢谢 如果使用 Windows 则可以使用 Beyond Compare 如果使用 linux fedora 则
  • 如何格式化 Highcharts 的 (x,y) 对数据的日期时间

    我的序列化方法会产生如下所示的日期时间字符串 2014 07 09T12 30 41Z 为什么下面的代码不起作用 function container highcharts xAxis type datetime series data x
  • 摩卡 - Chai Karma“套件未定义”

    我对 jscript tdd 很陌生 遇到了问题 希望有人能告诉我我在做什么 在浏览器中运行测试 通过 HTML 文件 一切正常 通过节点和业力运行它们我得到以下异常 我想在 node js 主机的 karma 中使用 Mocha 和 Ch
  • 如何针对 Node.js 中发生的每个错误发送电子邮件?

    假设我的 node js 应用程序正在运行 如果出现错误 我的意思是所有错误 不仅仅是网络错误 如果出现错误 则很重要 我如何调用函数向我发送电子邮件 基本上 在我希望它写入 err out 之前 我希望向我发送一封电子邮件 我正在使用no
  • Snap.svg - 停止在可悬停元素的子元素上重新触发悬停事件

    对于一个项目 我使用的 SVG 形状由背景多边形和背景多边形上方的一些文本 我已将其转换为路径 组成 我正在使用 Snap svg 为我的形状设置动画 当我将鼠标悬停在多边形上时 形状应该缩放到特定尺寸 包括其中的所有内容 鼠标移开时 形状
  • 使用间隔阈值对不同的连续时间戳记录进行分组

    我有一系列间歇性间隔的带有时间戳的 GPS 坐标 我正在使用 PostGIS 将它们渲染到地图画布上 为了渲染它们 需要使用 PostGIS 中的 ST MakeLine 聚合函数将点聚合成线 从而在地图上留下 GPS 数据丢失的间隙 数据
  • Chrome 扩展程序在代码中使用 client_secret

    我正在开发具有自己的 oAuth 授权的 Google Chrome 扩展 当然 我必须使用 client id 和 client secret 作为请求令牌 有什么办法可以向用户隐藏这些数据吗 由于此请求只是 javascript 源代码
  • 在 postgres 查询中使用列表

    我有一个动态列表 list a b c d 所以长度可能会改变 我想在查询中比较这些列表值 select from student where name in all the list values 我想将列表值传递到此查询中 我怎样才能做
  • 检查 jQuery 1.7 中是否存在基于文本的选择选项

    所以我有以下 HTML 片段
  • 页面上使用 HTML Editor Extender 进行回发会导致 IE11 中出现 JavaScript 错误

    我已将 HTML 编辑器扩展程序添加到我正在处理的页面中 现在每当我在页面上发回帖子时 都会收到以下 Javascript 错误 JavaScript 运行时错误 参数无效 之后什么也没有发生 这在 IE10 或更低版本以及我所知道的所有其
  • 从数据库检查数据的异步解决方案各种循环子句

    我想要做的是异步检查数据库并从中获取结果 在我的应用程序中我试图实现Asynchronously将此步骤解决为 从数据库中检查手机号码JsonArray循环子句的种类 Create JsonArray从结果 打印创建的数组 我学到了足够多的
  • 代码镜像错误:未捕获错误:扩展集中无法识别扩展值([对象对象])

    全部 我目前正在从事一个React Electron项目 该项目的目标是完成一个Markdown编辑器 当我配置codemirror 该程序报告错误说 Uncaught Error Unrecognized extension value
  • 在 Shopify 商店中嵌入 Vue 组件

    在产品页面中 我尝试显示自定义 Vue 组件 为简洁起见 该组件根据给定的产品 ID 显示 Firebase 数据库中的一些信息 我最初尝试将其制作为 Shopify 应用程序 以便我可以访问他们的 API 我实现了 OAuth 并且可以检
  • 带参数的事件监听器

    我想将参数传递给 JavaScript 中的事件侦听器 我已经找到了解决方案 但我无法理解它们为什么或如何工作以及为什么其他解决方案不起作用 我有 C C 背景 但是 Javascript 函数的执行有很大不同 您能否帮助我理解以下示例如何
  • 使用 MongoDB 和 Nodejs 插入和查询日期

    我需要一些帮助在 mongodb 和 nodejs 中按日期查找记录 我将日期添加到抓取脚本中的 json 对象 如下所示 jsonObj last updated new Date 该对象被插入到 mongodb 中 我可以看到如下 la
  • 如何使用asm.js进行测试和开发?

    最近我读到asm js规范 看起来很酷 但是是否有任何环境 工具来开发和测试这个工具 这还只是处于规范阶段吗 您可以尝试使用 emscripten 和 ASM JS 1 并从侧分支在 firefox 构建中运行它 有关 asm js 的链接

随机推荐

  • 一种用子类组织和加载文件的干净方法

    我有一个父类 它提供用于操作硬件的抽象函数 以及一个充满类的目录 该类是该父类的子类 并提供特定于硬件的实现 例如 x86 函数 ARM 函数 我正在寻找一种 Pythonic 方式来导入目录中的文件并实例化它们 目前 父类位于顶级目录中
  • TensorFlow RuntimeError:在 SavedModel 中找不到与标签服务关联的 MetaGraphDef

    当我使用 simple save 保存模型时 当我尝试加载模型时出现运行时错误 保存的代码是 session Session inputs tf placeholder dtype tf float32 shape None height
  • 使用树状数据进行 pytest 嵌套参数化

    使用 pytest 我尝试测试像树一样的分层场景 让我们以文档结构为例 Document Chapter Paragraph 1 n 1 n 当文档包含多个章节时 一章包含多个段落 当开始测试新文档时 需要运行一些设置代码 当新的章节开始时
  • 改变跨度的类别

    我有两个div 如下所示 我想从div top2更改span s1的类名 但下面的代码不起作用 我怎样才能做到这一点 top1 s1 span myclass old toggleClass myclass new div span cla
  • 将android资源位图批量转换为不同密度的工具[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要在 Android 上发布后支持不同的显示密度 开发期间可绘制的 hdpi已增长至 160 个
  • 为 geom_smooth 线创建动态标签

    我有一个不断变化的 df 并且我正在对不同的值进行分组c 使用 ggplot2 我使用以下代码绘制它们 以获得具有多个线性回归线 geom smooth 的散点图 ggplot aes x a y b group c geom point
  • gcc 金丝雀:对 __stack_chk_guard 的未定义引用

    我正在尝试启用 gcc 的金丝雀生成 但我得到了对 stack chk guard 的未定义引用 来自 gcc 的 man 关于金丝雀的信息 mstack protector guard guard Generate stack prote
  • 接口与具体类

    下面我有一个 Person 接口 一个实现类和一个驱动程序类 该类用名称初始化 Person 并再次输出它 使用有什么好处 Person person new PersonImpl 代替 PersonImpl person new Pers
  • 如何在线程的执行中使用字典/字符串列表 - delphi

    我有一个线程类 TValidateInvoiceThread type TValidateInvoiceThread class TThread private FData TValidationData FInvoice TInvoice
  • 使用 BeautifulSoup 将表抓取到数据框中

    我正在尝试从硬币目录中抓取数据 有其中一页 http www gcoins net en catalog view 45518 我需要刮这个数据 https i stack imgur com 1zqhW png进入数据框 到目前为止我有这
  • 上传图片 $_FILES 未设置

    我正在尝试将文件上传到我的服务器 但问题是 if isset FILES upl 总是返回 false my php if SERVER REQUEST METHOD POST allowed array png jpg gif jpeg
  • Xcode 整数++ 加 4

    我有一个 xcode 项目 其中包含以下代码 在 fflayer h 中 int 芬贾尔 在fflayer m中 void ccTouchMoved UITouch touch withEvent UIEvent event CGSize
  • 在 javascript 中创建一个看起来正态分布的模式?

    我想通过添加随机性来创建看起来更像手绘线条的线条 我目前使用这个公式来修改坐标 x 10 Math floor Math random 20 这种随机分布是线性的 我想使用一些使它更有可能击中目标的东西 X根据看起来像但不一定是钟形曲线的东
  • 如何在本地删除文件同时将其保留在远程?

    我想做与此相反的事情从 Git 存储库中删除文件 而不将其从本地文件系统中删除 https stackoverflow com questions 1143796 remove a file from a git repository wi
  • 矩阵类 (dgCMatrix) 的 rowsum 函数的等效项

    对于基本 R 矩阵类 我们有rowsum函数 该函数对于计算行组之间的列总和非常快 Matrix 包中是否实现了等效的功能或方法 我对快速替代方案特别感兴趣rowsum对于大型 dgCMatrix 对象 即数百万行 但大约 95 稀疏 我知
  • 禁用 的表单是否会被黑客入侵而提交?

    我只是好奇系统的安全性
  • 带有复选框的 ExtJs 4 组合框

    我正在寻找 EXTJS4 组合框控件 它允许通过内部的复选框选择多个项目 其实我需要这个控制http lovcombo extjs eu http lovcombo extjs eu 但它是为 ExtJs3 实现的 我尝试将其转换为 Ext
  • 使用oracle jdbc连接时如何获取数据库模式名称?

    我正在尝试使用 DatabaseMetaData getTables 方法获取所有数据库表 但此方法需要数据库模式名称模式 是否可以获取当前数据库连接的架构名称 当前连接的标准架构是您用于登录的用户的名称 因此 如果您的用户是SCOTT你必
  • WorkManager Data.Builder 不支持 Parcelable

    当您有一个包含大量变量 布尔值 整数 字符串 的大型 POJO 并且您想要使用新的工作管理器来启动作业时 然后 您创建一个数据文件 该文件将添加到一次性工作请求对象中 构建此数据文件的最佳实践是什么 编写 100 行代码只是在构建器上为每个
  • Knex 以静默方式转换 Postgres 时间戳与时区并返回错误的时间

    我的 psql 数据库中有一个表 其中的 trigger time 列的类型为 TIMESTAMP WITH TIME ZONE DEFAULT now 我行中的数据是这样的2018 06 27 15 45 00 03 从 psql 控制台