As colunas do sistema Postgres estão documentadas no Capítulo 5. Definição de Dados > 5.4. Colunas do sistema .
Essa página menciona que oid
os valores “são quantidades de 32 bits”. E essa página diz o mesmo sobre identificadores de transação. Então, vou assumir que significa oid
, tableoid
, xmin
, cmin
, xmax
, e cmax
são todos inteiros de 32 bits.
Mas isso deixa a ctid
coluna do sistema.
A localização física da versão da linha em sua tabela. Observe que, embora o ctid possa ser usado para localizar a versão da linha muito rapidamente, o ctid de uma linha mudará se for atualizado ou movido por VACUUM FULL. Portanto ctid é inútil como um identificador de linha de longo prazo. O OID, ou melhor ainda, um número de série definido pelo usuário, deve ser usado para identificar as linhas lógicas.
➡ Qual é o tipo de dados da ctid
coluna?
Especificamente, estou interessado na versão Postgres 10.3, mas se ela mudou em relação às versões anteriores, seria bom saber.
tid
Consulte a página de manual, Capítulo 8. Tipos de dados > 8.18. Tipos de identificador de objeto . Ele explica que o tipo de dados é específico do Postgres e conhecido como
tid
.Você pode achar esta pergunta semelhante interessante: Como decomponho ctid em números de página e linha?
A propósito, se você estiver interessado neste tópico de
ctid
&tid
, provavelmente poderá estar interessado em dois novos recursos do Postgres 12: (a) OIDs rebaixados para colunas normais e (b) o recurso de armazenamento de tabela conectável / Métodos de acesso novo em Postgres 12 e posteriores. Veja Robert Haas Blog , Michael Paquier post , zheap anúncio na pg hackers mailing list , Zheap PG Wiki , e Andres Anarazel youtube video em pgcon'19 .CTID é outro nome para
ItemPointer
. É basicamente um ponteiro para as tuplas armazenadas na página. Vejabufpage.h
o comentário do cabeçalho no código-fonte do PostgreSQL.Referência: https://www.postgresql.org/docs/14/storage-page-layout.html