В чем смысл и цель следующего утверждения в Postgres:
xmax::text::int > 0
Это похоже на приведение к тексту, а затем повторное приведение к целому числу ???
В чем смысл и цель следующего утверждения в Postgres:
xmax::text::int > 0
Это похоже на приведение к тексту, а затем повторное приведение к целому числу ???
Каждая таблица в Postgres имеет несколько системных столбцов. являются нестандартными, специфическими функциями Postgres, для использования которых требуются базовые знания о внутреннем устройстве Postgres.
Столбец xmax
по существу содержит 0 или некоторый номер транзакции. Однако это значение нельзя сравнивать напрямую с числами, поскольку столбец имеет тип xid
, для которого не определены соответствующие операторы. По этой причине необходимо использовать литье.
Сравнение также можно записать в виде
xmax::text <> '0'
Смысл выражения можно понять из описания столбца:
хмакс
Идентификатор (идентификатор транзакции) удаляющей транзакции или ноль для восстановленной версии строки. Этот столбец может быть ненулевым в версии с видимой строкой. Обычно это указывает на то, что транзакция удаления еще не зафиксирована или попытка удаления была отменена.
This value can not be however directly compared to numbers, because the column is of type xid, for which no corresponding operators have been defined
. Все (?) может быть приведено к тексту, следовательно, преобразование в текст, а затем преобразование в целое число.
- person 404; 01.04.2018
xmax > 0
, либоxmax::int > 0
будут эквивалентны. - person Gordon Linoff   schedule 01.04.2018xmax::text::int
это потому, чтоxmax
имеет типxid
, который не может быть напрямую преобразован в значениеinteger
(см. приводит или где-то) Смысл этого условия:row was updated
. Есть действительно отличный ответ с объяснением по теме: stackoverflow.com/a/39204667/593144 - person Abelisto   schedule 01.04.2018