Skip site navigation (1) Skip section navigation (2)

patch for preventing the specification of conflicting transaction read/write options

From: Chetan Suttraway <chetan(dot)suttraway(at)enterprisedb(dot)com>
To: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: patch for preventing the specification of conflicting transaction read/write options
Date: 2012-02-07 13:02:18
Message-ID: CAPtHcnEEF2iW4gOdbEy8P-ZOzBxPpFD9pZB14uRUbmZ+KK1ujg@mail.gmail.com (view raw or flat)
Thread:
Lists: pgsql-hackers
Hi,

This is regarding the TODO item:
"Prevent the specification of conflicting transaction read/write options"

listed at:
http://wiki.postgresql.org/wiki/Todo

The issue is :

SET TRANSACTION read only read write read only;

The fix involved iteration over transaction_mode_list and checking for
duplicate entries.
The patch is based on suggestions mentioned in message:
http://archives.postgresql.org/pgsql-hackers/2009-01/msg00692.php

As per this, the patch does not throw any error for the first test case
mentioned above.
It throws error only in case of conflicting modes.

For ex:
postgres=# SET TRANSACTION read only read only;
SET

postgres=# SET TRANSACTION read only read write;
ERROR:  conflicting options
LINE 1: SET TRANSACTION read only read write;
                        ^

Below are basic unit test logs:

postgres=# SET TRANSACTION ISOLATION LEVEL serializable ISOLATION LEVEL
serializable;
SET
postgres=# SET TRANSACTION ISOLATION LEVEL serializable ISOLATION LEVEL
repeatable read;
ERROR:  conflicting options
LINE 1: SET TRANSACTION ISOLATION LEVEL serializable ISOLATION LEVEL...

postgres=# SET TRANSACTION DEFERRABLE DEFERRABLE;
SET
postgres=# SET TRANSACTION DEFERRABLE NOT DEFERRABLE;
ERROR:  conflicting options
LINE 1: SET TRANSACTION DEFERRABLE NOT DEFERRABLE;
                        ^
postgres=# START TRANSACTION read only, read only;
START TRANSACTION
postgres=# rollback;
ROLLBACK
postgres=# START TRANSACTION read only, read write;
ERROR:  conflicting options
LINE 1: START TRANSACTION read only, read write;
postgres=# rollback;
ROLLBACK                          ^
postgres=# BEGIN TRANSACTION ISOLATION LEVEL serializable, ISOLATION LEVEL
serializable;
BEGIN
postgres=# rollback;
ROLLBACK
postgres=# BEGIN TRANSACTION ISOLATION LEVEL serializable, ISOLATION LEVEL
repeatable read;
ERROR:  conflicting options
LINE 1: BEGIN TRANSACTION ISOLATION LEVEL serializable, ISOLATION LE...
                                          ^

Please pass on any inputs on the patch.

Regards,
Chetan

-- 
EnterpriseDB Corporation
The Enterprise PostgreSQL Company

 Website: www.enterprisedb.com
EnterpriseDB Blog : http://blogs.enterprisedb.com
Follow us on Twitter : http://www.twitter.com/enterprisedb

Attachment: fix_set_trans_mode.patch
Description: text/x-diff (2.4 KB)

Responses

pgsql-hackers by date

Next:From: Fujii MasaoDate: 2012-02-07 13:10:09
Subject: Re: incorrect handling of the timeout in pg_receivexlog
Previous:From: Simon RiggsDate: 2012-02-07 12:51:33
Subject: Re: Command Triggers

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group