【问题标题】:Sequelize with Postgresql truncating result unexpectedly使用 Postgresql 意外截断结果续集
【发布时间】:2015-11-05 13:57:49
【问题描述】:

我在节点中使用原始的 sequelize 查询来执行返回查询的 postgresql 函数。我遇到的问题是使用 .query() 方法时在 pgAdmin 中运行查询获得的结果集与节点中返回的结果集不匹配,即使 pgAdmin 中的查询和节点中的查询都完全一样一样的。

这是我正在执行的查询:

SELECT * FROM foo('2015-07-01','2015-07-31');

此查询在 pgAdmin 中返回 91875 行,但是,在使用 sequelize 的节点中,运行以下仅返回 87500 行:

models.sequelize.query("SELECT * FROM foo('2015-07-01','2015-07-31');")
.spread(function (results, metadata) { 
    console.log(results.length);
});

输出:87500

排除的行对应于最后一个日期 2015-07-31。

我发现我可以通过增加第二个日期参数超过结束日期来获取节点中的所有行。例如,如果我的目标是获得包含 2015-07-31 的结果,则将结束日期设置为 2015-08-03 有效。虽然,这掩盖了问题,并不理想。

我认为我的存储过程函数中的 WHERE 子句一定有问题。但是,如果是这种情况,为什么我在通过 pgAdmin 运行查询时会取回所需的行数?

【问题讨论】:

  • 一次可能会执行 foo(date, date) 和一次 foo(varchar, varchar) 因为某处的自动转换?时区设置呢?使用 to_date 来避免麻烦。

标签: node.js postgresql sequelize.js pgadmin


【解决方案1】:

结果差异的原因与时区有关。我使用 UTC 进行续集,但我的数据库使用的是“美国/东部”。

使用命令“SET time zone utc”将数据库设置为使用 UTC 后,我能够复制 sequelize 看到的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 2013-07-21
    相关资源
    最近更新 更多