giovedì 7 gennaio 2010

Errore di chiave duplicata su large object

PostgreSQL memorizza i large objects (bytea) in una tabella pg_largeobject, che come si intuisce dal suffisso appartiene al catalogo di sistema. Come riportato dal manuale, la tabella memorizza l'oid dell'oggetto (ottenuto alla sua creazione) e i dati effettivi dell'oggetto.
Potrebbe capitare, a seguito di diversi restore dello stesso database, che PostgreSQL produca l'errore

ERROR:  duplicate key violates unique constraint "pg_largeobject_loid_pn_index"

che indica che si sta cercando di inserire due volte lo stesso large object. Questo perché la tabella che memorizza i dati (e l'oid dell'oggetto) non appartiene al singolo database ma all'intero sistema (altrimenti non dovrebbe mai capitare una duplicate key in seguito ad un drop/create del database).
In questa situazione è necessario svuotare la tabella dei large object (completamente o parzialmente) con una istruzione di DELETE.

Nessun commento: