28 luglio 2005

tre db e una query

Prendendo spunto da una domanda su una query trovata nel newsgroup di PostgreSQL ho confrontato diversi risultati in tre database: Oracle, PostgreSQL e MySQL.
Preparazione:
CREATE TABLE test (i INTEGER);
CREATE UNIQUE INDEX unq_test ON test(i);
INSERT INTO test VALUES(1);
INSERT INTO test VALUES(2);
INSERT INTO test VALUES(3);
La query è:
UPDATE test SET i = i + 1;
Sia in PostgreSQL che in MySQL non funziona (Avverte della violazione di una chiave univoca!).
Gli sviluppatori di Posgres ammettono che è un problema e che lo risolveranno in futuro.
L'unico dei tre database che riesce ad effettuare la query è Oracle perché, anche in questo, caso considera una query come una operazione atomica: probabilmente, per motivi di implementazione, è costretto ad aggiornare le righe una ad una e quindi a violare temporaneamente la chiave univoca tuttavia l'applicazione dell'intera query non viola nessuna constraint!
Piccoli particolari (se così vogliamo chiamarli) che fanno la differenza.

1 commento:

Anonimo ha detto...

Questo ci dimostra ancora una volta, se così si può dire, la differenza tra un prodotto free e uno commerciale. Sicuramente sia mysql che postgres arriveranno a correggere questo baco ma la velocita di sviluppo e di fixing dei problemi di un sw free è legata alla disponibilità degli sviluppatori. Stefano