这在 Postgresql 中起什么作用: xmax::text::int > 0

Jim*_*ski 4 sql postgresql postgresql-9.5

Postgres 中以下语句的含义和目的是什么:

xmax::text::int > 0
Run Code Online (Sandbox Code Playgroud)

这看起来像是先转换为文本,然后再次转换为整数???

kli*_*lin 6

Postgres 中的每个表都有几个系统列。它们是非标准的 Postgres 特定功能,使用它们需要了解 Postgres 内部结构的基本知识。

该列xmax本质上包含 0 或某个交易编号。然而,该值不能直接与数字进行比较,因为该列的类型为xid,尚未定义相应的运算符。为此,需要使用铸造。

比较也可以写为

xmax::text <> '0'
Run Code Online (Sandbox Code Playgroud)

表达式的含义可以从列描述中推断出来:

最大x

删除事务的标识(事务 ID),或者对于未删除的行版本为零。在可见行版本中,该列可能不为零。这通常表明删除事务尚未提交,或者尝试的删除已回滚。

  • @Jimski从上面的答案来看:“但是这个值不能直接与数字进行比较,因为该列的类型是xid,尚未定义相应的运算符”。任何内容(?)都可以转换为文本,因此先转换为文本,然后转换为 int。 (2认同)