Toda tabela possui diversas colunas do sistema, as quais são implicitamente definidas pelo sistema. Portanto, esses nomes não podem ser usados como nomes de colunas definidas pelo usuário (observe que esta restrição é distinta do nome ser uma palavra-chave ou não; colocar o nome entre aspas não faz esta restrição deixar de ser aplicada). Não é necessário que os usuários se preocupem com estas colunas, basta apenas saber que elas existem.
tableoid #
O OID da tabela contendo esta linha. Esta coluna é
particularmente útil para consultas usando tabelas
particionadas (veja a Seção 5.12) ou
hierarquias de herança (veja a Seção 5.11).
Sem ele seria difícil dizer de qual tabela a linha se origina.
O tableoid pode ser juntado com a coluna
oid de pg_class
para obter o nome da tabela.
xmin #O identificador da transação de inserção (transaction ID) para esta versão da linha (uma versão da linha é um estado individual da linha; cada atualização da linha cria uma nova versão da linha para a mesma linha lógica).
cmin #O identificador do comando (começando por zero) dentro da transação de inserção.
xmax #O identificador da transação de exclusão (transaction ID), ou zero para uma versão de linha não excluída. É possível que esta coluna seja diferente de zero em uma versão de linha visível. Normalmente, isto indica que a transação que faz a exclusão ainda não foi efetivada (commit), ou que uma tentativa de exclusão foi desfeita (rollback).
cmax #O identificador do comando dentro da transação de exclusão, ou zero.
ctid #
A localização física da versão da linha dentro da tabela.
Note que, embora o ctid
possa ser usado para localizar a versão da linha muito rapidamente,
o ctid da linha muda cada vez que a
linha é atualizada ou movida pelo comando
VACUUM FULL.
Portanto, o ctid não serve como
identificador de linha de longo prazo.
A chave primária deve ser usada para identificar linhas lógicas.
Os identificadores das transações também são números de 32 bits. Em um banco de dados existente há muito tempo é possível que os IDs de transação reiniciem. Esse problema não é fatal se forem obedecidos os procedimentos apropriados de manutenção; veja o Capítulo 24 para obter mais detalhes. Entretanto, não é seguro depender da unicidade dos identificadores de transação por um longo período (mais de um bilhão de transações).
Os identificadores de comando também são números de 32 bits, criando um limite de 2³² (4 bilhões) de comandos SQL para uma única transação. Na prática, esse limite não é um problema — note-se que o limite diz respeito ao número de comandos SQL, e não ao número de linhas processadas. Além disso, somente os comandos que realmente modificam o conteúdo do banco de dados consomem identificador de comando.