Notes in Migration to v6.5 section.
This commit is contained in:
parent
9680a71205
commit
fb4f5f7cac
doc/src/sgml
@ -515,7 +515,7 @@ ERROR: Can't serialize access due to concurrent update
|
|||||||
by <command>SELECT</command> it doesn't mean that this row really
|
by <command>SELECT</command> it doesn't mean that this row really
|
||||||
exists at the time it is returned (i.e. sometime after the
|
exists at the time it is returned (i.e. sometime after the
|
||||||
statement or transaction began) nor
|
statement or transaction began) nor
|
||||||
that the row is protected from deletion or update by concurrent
|
that the row is protected from deletion or updation by concurrent
|
||||||
transactions before the current transaction does a commit or rollback.
|
transactions before the current transaction does a commit or rollback.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
@ -132,11 +132,65 @@
|
|||||||
is required for those wishing to migrate data from any
|
is required for those wishing to migrate data from any
|
||||||
previous release of <productname>Postgres</productname>.
|
previous release of <productname>Postgres</productname>.
|
||||||
</para>
|
</para>
|
||||||
</sect2>
|
|
||||||
|
<para>
|
||||||
|
|
||||||
|
Because readers in 6.5 don't lock data, regardless of transaction
|
||||||
|
isolation level, data read by one transaction can be overwritten by
|
||||||
|
another. In the other words, if a row is returned by
|
||||||
|
<command>SELECT</command> it doesn't mean that this row really exists
|
||||||
|
at the time it is returned (i.e. sometime after the statement or
|
||||||
|
transaction began) nor that the row is protected from deletion or
|
||||||
|
updation by concurrent transactions before the current transaction does
|
||||||
|
a commit or rollback.
|
||||||
|
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
|
||||||
|
To ensure the actual existance of a row and protect it against
|
||||||
|
concurrent updates one must use <command>SELECT FOR UPDATE</command> or
|
||||||
|
an appropriate <command>LOCK TABLE</command> statement. This should be
|
||||||
|
taken into account when porting applications from previous releases of
|
||||||
|
<productname>Postgres</productname> and other environments.
|
||||||
|
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
|
||||||
|
Keep above in mind if you are using contrib/refint.* triggers for
|
||||||
|
referential integrity. Additional technics are required now. One way is
|
||||||
|
to use <command>LOCK parent_table IN SHARE ROW EXCLUSIVE MODE</command>
|
||||||
|
command if a transaction is going to update/delete a primary key and
|
||||||
|
use <command>LOCK parent_table IN SHARE MODE</command> command if a
|
||||||
|
transaction is going to update/insert a foreign key.
|
||||||
|
|
||||||
|
<note>
|
||||||
|
<para>
|
||||||
|
|
||||||
|
Note that if you run a transaction in SERIALIZABLE mode then you must
|
||||||
|
execute <command>LOCK</command> commands above before execution of any
|
||||||
|
DML statement
|
||||||
|
(<command>SELECT/INSERT/DELETE/UPDATE/FETCH/COPY_TO</command>) in the
|
||||||
|
transaction.
|
||||||
|
|
||||||
|
</para>
|
||||||
|
</note>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
|
||||||
|
These inconveniences will disappear when the ability to read durty
|
||||||
|
(uncommitted) data, regardless of isolation level, and true referential
|
||||||
|
integrity will be implemented.
|
||||||
|
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect2>
|
||||||
|
|
||||||
<sect2>
|
<sect2>
|
||||||
<title>Detailed Change List</title>
|
<title>Detailed Change List</title>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
<programlisting>
|
<programlisting>
|
||||||
Bug Fixes
|
Bug Fixes
|
||||||
|
Loading…
x
Reference in New Issue
Block a user