Tenho uma aplicação que depende totalmente dos OIDs do PostgreSQL para seu funcionamento. Ele está atualmente no PostgreSQL 9.6.1, mas estou procurando atualizar para o 13. Existe um mecanismo recomendado/padrão (usando gatilhos?) para recriar a funcionalidade OID em versões mais recentes?
Em segundo plano, o motivo pelo qual o aplicativo usa OIDs é porque o aplicativo não sabe nada sobre o esquema de banco de dados e deve ser usado em qualquer esquema de banco de dados aleatório, usando engenharia reversa para navegar. Por esse motivo, uma sugestão do tipo "apenas adicione uma chave primária" não funcionará para mim. Atualmente, o aplicativo está sendo executado em 6 bancos de dados separados, cada um com seu próprio esquema.
Plano de fundo adicional
Praticamente todos os aplicativos entendem seu esquema de banco de dados, por exemplo, um aplicativo de folha de pagamento entende a tabela de funcionários, que talvez tenha uma chave primária de emp_id
.
Meu aplicativo é diferente.
Meu aplicativo gera automaticamente um aplicativo CRUD para qualquer banco de dados PostgreSQL aleatório para o qual ele seja apontado. Como tal, não faz suposições sobre chaves primárias, nomes de tabelas, nomes de colunas, etc. A única suposição que faz é que o banco de dados para o qual foi apontado possui um OID exclusivo para cada linha em cada tabela. Como as coisas estão atualmente, eu uso este aplicativo em cinco bancos de dados separados e distintos, e tenho feito isso desde 2007.
Então eu entendo que, na ausência de um OID gerado pelo sistema, eu provavelmente preciso criar uma coluna de usuário, chamada OID definida como uma sequência. O objetivo da pergunta é perguntar se existe uma solução canônica para aplicativos que usam o OID anterior à v12. Suponha que o aplicativo não possa ser alterado, portanto, qualquer solução deve ser totalmente implementada dentro do banco de dados.
Você pode simplesmente adicionar uma nova coluna chamada
oid
que é preenchida automaticamente:Usar uma coluna de identidade como essa tem a vantagem de obter um erro se, por engano, tentar
INSERT
inserir um valor na coluna manualmente.