【问题标题】:Querying xmin column in Postgres yields xid in query在 Postgres 中查询 xmin 列在查询中产生 xid
【发布时间】:2021-09-23 15:54:45
【问题描述】:

与 PostgreSQL 中的递增整数相比,我正在尝试按顺序获取与 xmin 列上的大于或等于查询匹配的第一条记录。我的查询在执行时看起来像这样:

SELECT xmin, column1, column2, column3 FROM records WHERE xmin >= $1 LIMIT 1 ;

然后在调用时,我通过标准 sql.QueryRow 函数将 args 1 传递给查询。

但是,我希望返回一行,而不是返回以下错误。

pq: operator does not exist: xid >= unknown

这里有两件事:我不知道xid 来自哪里,因为我从不查询它,我也不知道为什么占位符值也没有被正确添加。参数在调用时传递给查询,它不是 nil 或任何东西,但 Postgres 引擎不喜欢我的查询。

【问题讨论】:

    标签: sql postgresql go


    【解决方案1】:

    如果您有 'blah' >= 4,则错误会显示类似 operator does not exist: text >= integer 的内容。 xidtype 而不是列。它不是整数,不能直接与一个比较。

    如果您真的想这样做,您可以使用xid::text::bigint >= $1,但请确保您了解事务环绕的含义。

    让我重复最后一点 - 在您开始尝试对它们进行数字比较之前,请先阅读一下 PostgreSQL 事务 ID 的工作原理。

    【讨论】:

    • 我试图用数字比较它们,因为它们是以数字形式返回的。 Postgres 文档中关于 xmin 列的任何地方都没有声明它返回的值是文本。不过,这看起来正是我的问题。我了解 OID 环绕,这对我的用例来说不是问题。谢谢。
    猜你喜欢
    • 2017-06-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 2023-02-08
    相关资源
    最近更新 更多