O software normalmente reserva intervalos de lançamento de id para identificadores de objetos padrão (o PostgreSQL chama esses objetos 'internos') para objetos criados durante uma instalação ou patch/upgrade. Estou tendo dificuldade em encontrar os intervalos de lançamento do OID para objetos PostgreSQL. Alguém pode me indicar a documentação para isso? Além disso, os OIDs estão sendo eliminados do PostgreSQL? Como isso afetará minha(s) pergunta(s)?
Como exemplo, a tabela pg_roles parece usar OIDs de quatro dígitos ou menos para objetos criados durante a instalação ou para patches, mas a documentação é limitada. Essa foi a coisa mais próxima que encontrei.
https://www.postgresql.org/docs/12/release-12.html
Os patches que atribuem manualmente OIDs para novos objetos integrados (como novas funções) agora devem escolher aleatoriamente OIDs no intervalo de 8000 a 9999. No final de um ciclo de desenvolvimento, os OIDs usados pelos patches confirmados serão renumerados para números menores, atualmente em algum lugar na faixa de 4xxx, usando o novo script renumber_oids.pl. Essa abordagem deve reduzir bastante as chances de colisões de OID entre diferentes patches em processo.
Embora não haja uma política específica reservando quaisquer OIDs para uso externo, é recomendado que bifurcações e outros projetos que precisem de OIDs privados atribuídos manualmente usem números na faixa alta de 7xxx. Isso evitará conflitos com patches recentemente mesclados e deve levar muito tempo até que o projeto principal atinja esse intervalo.
E dada a citação acima, talvez uma maneira melhor de fazer a pergunta seja "Qual é o valor da semente OID ou o algoritmo OID usado para a criação de novos objetos de cada tipo (ou seja: pg_roles)?"
Embora não haja uma política específica reservando quaisquer OIDs para uso externo
O intervalo de OIDs para objetos do sistema
1
é16383
.Nos arquivos include do PostgreSQL,
server/access/transam.h
tem esta apresentação de como os OIDs são atribuídos, o que pode ajudar:Se você precisasse de seus próprios OIDs no intervalo do sistema por algum motivo, acho que se enquadraria na categoria "fork", portanto, no
8000-9999
intervalo.Não, mas as colunas OID foram rebaixadas para colunas "normais" no Postgres 12, em oposição às colunas do sistema. Houve um processo gradual na evolução do Postgres para normalizar os OIDs como chaves primárias numéricas normais por tabela, em vez da "chave primária globalmente exclusiva" que eles eram no design original. Veja, por exemplo, a postagem do blog OIDs rebaixados para colunas normais: um olhar sobre o passado sobre essa evolução. Isso não é para eliminar os OIDs, mas para garantir que eles não atrapalhem o progresso.
pg_roles
em si não é uma tabela, é uma visão. Uma de suas colunas é denominadaoid
, e seu valor vem depg_authid.oid
. É a chave primária dopg_authid
. Não há realmente nada nisso que tenha muito a ver com a instalação, exceto que a função do sistema criada (geralmentepostgres
) tem umoid
valor abaixo16384
, e as funções criadas após a instalação comCREATE USER
ouCREATE ROLE
terãooid
valores acima16384
.