PostgreSQL ha DDL transazionale per la maggior parte degli oggetti di database (certamente tabelle, indici ecc. Ma non database, utenti). Tuttavia, praticamente qualsiasi DDL otterrà un blocco ACCESS EXCLUSIVE
sull'oggetto di destinazione, rendendolo completamente inaccessibile fino al termine della transazione DDL. Inoltre, non tutte le situazioni sono abbastanza gestite, ad esempio, se provi a selezionare dalla tabella foo
mentre un'altra transazione la fa cadere e creando una tabella di sostituzione foo
, la transazione bloccata riceverà infine un errore piuttosto che trovare la nuova tabella foo
. (Modifica: è stato corretto in o prima di PostgreSQL 9.3)
è eccezionale, utilizza tre transazioni per aggiungere un indice a una tabella pur consentendo aggiornamenti simultanei, quindi non può essere eseguito in una transazione.
Inoltre, il comando di manutenzione del database VACUUM
non può essere utilizzato in una transazione.
community wiki? – araqnid