До версии 9.1 в PostgreSQL, также как и в Oracle, можно было выставить два уровня изоляции: READ COMMITED и SERIALIZABLE.
И реализованы они были одинаково.
Уровень SERIALIZABLE не допускал всех трех феноменов, определенных стандартом SQL (грязное чтение, повторяющееся чтение, фантомное чтение). Однако, для полноты реализации, уровень SERIALIZABLE должен еще гарантировать, что результат одновременных транзакций будет одинаковым вне зависимости от того, в каком порядке эти транзакции будут зафиксированы. Это условие нельзя обеспечить только лишь отстутствием вышеперечисленных феноменов.
В версии 9.1 эту функциональность добавили в PostgreSQL.
Теперь уровень изоляции SERIALIZABLE обеспечивает полную изоляцию транзакций.
А старый уровень SERIALIZABLE переименовали в REPEATABLE READ.
Именно поэтому он получился строже чем по стандарту, а именно, не допускает фантомного чтения.
В результате получается, что сравнивать уровни изоляции между Oracle и PostgreSQL можно только так:
Полезные ссылки
Wiki PostgreSQL:
https://wiki.postgresql.org/wiki/Serializable
https://wiki.postgresql.org/wiki/SSI
Статья Тома Кайта (Oracle):
http://www.oracle.com/technetwork/issue-archive/2010/10-jan/o65asktom-082389.html
И реализованы они были одинаково.
Уровень SERIALIZABLE не допускал всех трех феноменов, определенных стандартом SQL (грязное чтение, повторяющееся чтение, фантомное чтение). Однако, для полноты реализации, уровень SERIALIZABLE должен еще гарантировать, что результат одновременных транзакций будет одинаковым вне зависимости от того, в каком порядке эти транзакции будут зафиксированы. Это условие нельзя обеспечить только лишь отстутствием вышеперечисленных феноменов.
В версии 9.1 эту функциональность добавили в PostgreSQL.
Теперь уровень изоляции SERIALIZABLE обеспечивает полную изоляцию транзакций.
А старый уровень SERIALIZABLE переименовали в REPEATABLE READ.
Именно поэтому он получился строже чем по стандарту, а именно, не допускает фантомного чтения.
В результате получается, что сравнивать уровни изоляции между Oracle и PostgreSQL можно только так:
Oracle
|
PostgreSQL
|
---|---|
READ COMMITED | READ COMMITED |
SERIALIZABLE | REPEATABLE READ |
N/A | SERIALIZABLE |
Полезные ссылки
Wiki PostgreSQL:
https://wiki.postgresql.org/wiki/Serializable
https://wiki.postgresql.org/wiki/SSI
Статья Тома Кайта (Oracle):
http://www.oracle.com/technetwork/issue-archive/2010/10-jan/o65asktom-082389.html
Комментариев нет:
Отправить комментарий