В каждой таблице имеется несколько системных столбцов , которые неявно определяются системой. Следовательно, эти имена нельзя использовать в качестве имен пользовательских столбцов. (Обратите внимание, что данные ограничения не зависят от того, является ли имя ключевым словом; использование кавычек не позволяет обойти эти ограничения.) Нет необходимости специально учитывать эти столбцы, достаточно знать о их существовании.
tableoid #
OID таблицы, содержащей данную строку. Этот столбец особенно полезен для запросов, осуществляющих выборку из секционированных таблиц (см. Раздел 2.2.12) или иерархии наследования (см. Раздел 2.2.11), так как без него трудно определить, из какой именно таблицы получена конкретная строка.
tableoid можно объединить со столбцом
oid системного каталога
pg_class для получения имени таблицы.
xmin #Идентификатор (ID транзакции) вставляющей транзакции для данной версии строки. (Версия строки представляет собой отдельное состояние строки; каждое обновление строки создает новую версию для той же логической строки.)
cmin #Идентификатор команды (начиная с нуля) внутри вставляющей транзакции.
xmax #Идентификатор (ID транзакции) удаляющей транзакции или ноль для неудаленной версии строки. В видимой версии строки значение этого столбца может быть отличным от нуля. Обычно это указывает на то, что удаляющая транзакция еще не зафиксирована или попытка удаления была отменена.
cmax #Идентификатор команды внутри удаляющей транзакции или ноль.
ctid #
Физическое расположение версии строки внутри таблицы. Обратите внимание, что хотя ctid может использоваться для очень быстрого нахождения версии строки, значение
ctid изменится при обновлении или перемещении строки с помощью VACUUM FULL. Следовательно,
ctid нельзя использовать в качестве долгосрочного идентификатора строки. Для идентификации логических строк следует использовать Первичный ключ.
Идентификаторы транзакций также являются 32-битными величинами. В долгоживущей базе данных возможен циклический перенос (зацикливание) идентификаторов транзакций. Это не является критической проблемой при условии выполнения надлежащих процедур обслуживания; подробнее см. в Глава 3.9 for details. Тем не менее, не стоит полагаться на уникальность идентификаторов транзакций в долгосрочной перспективе (более одного миллиарда транзакций).
Идентификаторы команд также являются 32-битными величинами. Это создает жесткое ограничение в 232 (4 миллиарда) SQL команд в рамках одной транзакции. На практике это ограничение не является проблемой — заметим, что лимит установлен на количество SQL команд, а не на количество обработанных строк. Кроме того, идентификаторы команд расходуются только теми командами, которые фактически изменяют содержимое базы данных.