【问题标题】:node.js pg query returns fewer rows than native postgresql clientnode.js pg 查询返回的行数少于本机 postgresql 客户端
【发布时间】:2013-12-06 22:13:16
【问题描述】:

我有一个 SQL 查询,在本机 Postgresql 客户端(psql、Navicat 等)中运行时返回 356 行,但在我正在开发的 node.js 服务中运行时只返回 214 行。这是查询:

SELECT discs.id AS id, 
    discs.is_streamable AS is_streamable, 
    discs.updated_at AS updated_at, 
    albums.title AS album_title, 
    'https://www.slurpie.com/albums/' || albums.slug AS album_url, 
    artists.name AS main_artist, 
    genres.name AS genre, 
    albums.cover_remote_url AS album_art 
FROM discs 
JOIN albums 
ON albums.id = discs.album_id 
JOIN artists 
ON artists.id = albums.main_artist_id 
JOIN genres 
ON genres.id = albums.genre_id 
JOIN users 
ON users.id = discs.user_id 
WHERE users.authentication_token = 'itsasecret' 
ORDER BY main_artist

node.js 服务正在使用 restify 和 pg-query(尽管我已经使用底层的“pg”模块对其进行了测试,结果相同)。

查看查询的输出,我找不到在节点内部运行查询时遗漏的行之间的任何相似之处(我认为可能是列中的空值,或者大量列数据、特殊字符等)。

【问题讨论】:

  • 你在psql和node之间用同一个用户登录吗?是否有可能发生了一些 search_path 魔术,并且两个或多个具有相同名称的表存在于不同的模式中?
  • 在来自节点应用程序的连接字符串中使用与 sql 客户端相同的凭据。
  • 也许尝试通过 psql 和节点“解释分析详细选择...”并按照计划查看数字不同的地方?

标签: node.js postgresql


【解决方案1】:

Yieldsfalsehood 走上了正轨。

事实证明,节点代码指向数据库的最新副本,足够相似以至于它不是一个单独的数据库并不明显,但已经过时以至于行数不同。

直到我注意到 psql 和节点应用程序返回的行中的一个微小差异时,我才发现原因。

奥卡姆剃刀 FTW! :)

【讨论】:

    猜你喜欢
    • 2020-11-14
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 2015-11-01
    • 2012-09-13
    • 1970-01-01
    相关资源
    最近更新 更多