O que se deve fazer quando se deseja substituir um objeto grande por um novo objeto grande. Um exemplo seria atualizar um arquivo carregado com uma nova versão.
Presumivelmente, uma maneira seria criar um novo objeto grande, atualizar os links para o novo id e, em seguida, desvincular o objeto antigo. Mas é razoável substituir os dados existentes, digamos, escrevendo sobre o original (talvez truncando o conteúdo primeiro)?
FWIW eu estaria fazendo isso em JDBC e para PostgreSQL 9.4.
A ideia por trás da API de objetos grandes é imitar uma API semelhante a um arquivo. O OID é como o caminho do arquivo e o descritor de arquivo obtido por
lo_open
oulo_creat
é o equivalente ao POSIXopen()
ecreat()
chamadas de sistema para arquivos.O JDBC fornece
LargeObject.truncate()
e o libpq (em C) e o servidor possuemlo_truncate()
funções integradas.Então, sim, faz sentido substituir o conteúdo LO (mantendo o mesmo OID) por um truncado seguido por
lo_write
if libpq, oulowrite
if server-side code, ouLargeObject.write()
se estiver usando a classe JDBC dedicada, como você poderia fazer com um arquivo em um sistema de arquivos.Também funcionaria criar um novo LO com um novo OID e depois desvincular o antigo, é apenas menos elegante e consome um novo OID sem um bom motivo.