From fb4f5f7cac87d0960d1d4dabf0838dbbb724c5c8 Mon Sep 17 00:00:00 2001 From: "Vadim B. Mikheev" <vadim4o@yahoo.com> Date: Thu, 3 Jun 1999 07:11:50 +0000 Subject: [PATCH] Notes in Migration to v6.5 section. --- doc/src/sgml/mvcc.sgml | 2 +- doc/src/sgml/release.sgml | 58 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 57 insertions(+), 3 deletions(-) diff --git a/doc/src/sgml/mvcc.sgml b/doc/src/sgml/mvcc.sgml index 2ce81ace1ac..cf4c8a92b87 100644 --- a/doc/src/sgml/mvcc.sgml +++ b/doc/src/sgml/mvcc.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 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 update by concurrent + that the row is protected from deletion or updation by concurrent transactions before the current transaction does a commit or rollback. </para> diff --git a/doc/src/sgml/release.sgml b/doc/src/sgml/release.sgml index e3071b2f6e6..f8718c4aaca 100644 --- a/doc/src/sgml/release.sgml +++ b/doc/src/sgml/release.sgml @@ -132,11 +132,65 @@ is required for those wishing to migrate data from any previous release of <productname>Postgres</productname>. </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> <title>Detailed Change List</title> - <para> <programlisting> Bug Fixes -- GitLab