5.2. Colunas do sistema

Toda tabela possui diversas colunas do sistema, as quais são implicitamente definidas pelo sistema. Portanto, estes nomes não podem ser utilizados como nomes de colunas definidas pelo usuário (deve ser observado que esta restrição é diferente 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 há necessidade dos usuários se preocuparem com estas colunas, basta apenas saber que elas existem.

oid
O identificador de objeto (object ID) de uma linha. É um número serial adicionado pelo PostgreSQL, automaticamente, a todas as linhas da tabela (a não ser que a tabela seja criada com WITHOUT OIDS e, neste caso, esta coluna não estará presente). O tipo desta coluna é oid (o mesmo nome da coluna); veja a Seção 8.11 para obter mais informações sobre o tipo.
tableoid
O OID da tabela que contém esta linha. Este atributo é particularmente útil nas consultas fazendo seleção em hierarquias de herança, porque sem este atributo é difícil saber de que tabela se origina cada linha. Pode ser feita uma junção entre tableoid e 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 de 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 fazendo a exclusão ainda não foi efetivada (commit), ou que uma tentativa de exclusão foi cancelada (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. Deve ser observado que, embora seja possível usar ctid 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 duradouro. O OID ou, melhor ainda, um número serial definido pelo usuário deve ser utilizado para identificar logicamente a linha.

Os OIDs são quantidades de 32 bits atribuídas a partir de um contador único para todo o agrupamento de bancos de dados. Em um banco de dados grande ou existente há muito tempo, é possível que o contador recomece. Portanto, é má prática assumir que os OIDs sejam únicos, a menos que sejam realizados procedimentos para garantir que este seja o caso. A prática recomendada para utilizar OIDs como identificador de linha é criar uma restrição de unicidade na coluna OID em todas as tabelas onde OID é utilizado. Nunca se deve assumir que os OIDs sejam únicos entre tabelas; deve ser utilizada a combinação do tableoid com o OID de linha se for necessário um identificador para todo o banco de dados (As versões futuras do PostgreSQL provavelmente utilizarão contadores de OID separados para cada tabela, fazendo com que tableoid tenha que ser incluído para obter um identificador único global).

Os identificadores das transações também são quantidades de 32 bits. Em um banco de dados existente há muito tempo é possível que os IDs de transação recomecem. Este problema não é fatal se forem obedecidos os procedimentos apropriados de manutenção; veja o Capítulo 21 para obter detalhes. Entretanto, não é aconselhado depender da unicidade dos IDs de transação por um longo período de tempo (mais de um bilhão de transações).

Os identificadores de comando também são quantidades de 32 bits, criando um limite de 232 (4 bilhões) de comandos SQL dentro de uma única transação. Na prática este limite não é um problema — deve ser observado que o limite diz respeito ao número de comandos SQL, e não ao número de linhas processadas.

SourceForge.net Logo