Estou analisando a necessidade de chaves substitutas em tabelas que estou projetando em um DBMS derivado de PostgreSQL ( Citus ). OIDs seriam suficientes? Existe uma desvantagem em usá-los em vez de criar um bigint
campo e uma sequência?
relate perguntas
-
Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo
-
Os procedimentos armazenados impedem a injeção de SQL?
-
Quais são algumas maneiras de implementar um relacionamento muitos-para-muitos em um data warehouse?
-
Sequências Biológicas do UniProt no PostgreSQL
-
Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?
Há alguns mal-entendidos flutuando por aqui.
OIDs foram incluídos em cada linha por padrão em versões muito antigas do Postgres. O padrão logo foi alterado para não incluir colunas OID em tabelas definidas pelo usuário.
Citando a documentação do Postgres 8.1 :
Ênfase em negrito minha. O que o @Shire citou está relacionado, mas os OIDs nem são considerados para um PK no Postgres moderno .
A razão óbvia pela qual @a_horse (corretamente) sugeriu
bigserial
(e não apenasserial
) está na pergunta:Ênfase em negrito minha novamente. Normalmente, uma
serial
coluna (implementada com um número inteiro de 4 bytes) é boa o suficiente para a maioria das tabelas - a menos que você espere mais de 2 bilhões (2^31 - 1 = 2.147.483.647
) de linhas durante o tempo de vida da tabela.OIDS
Dos documentos http://www.postgresql.org/docs/9.4/static/datatype-oid.html
bigint e uma sequência
Como "_a_horse_with no_name" sugeriu, use bigserial
Aviso: smallserial e serial não parecem superar a limitação de tamanho de 4 bytes especificada acima. Provavelmente outra pessoa pode preencher isso.
http://www.postgresql.org/docs/9.5/static/datatype-numeric.html#DATATYPE-SERIAL