Allow default transaction isolation level (a.k.a. set session
authorPeter Eisentraut
Sat, 30 Jun 2001 22:03:26 +0000 (22:03 +0000)
committerPeter Eisentraut
Sat, 30 Jun 2001 22:03:26 +0000 (22:03 +0000)
characteristics) to be set through GUC.

doc/src/sgml/ref/set_transaction.sgml
doc/src/sgml/runtime.sgml
src/backend/commands/variable.c
src/backend/parser/gram.y
src/backend/utils/misc/guc.c
src/backend/utils/misc/postgresql.conf.sample

index 488ee6ac31c1b08cd8083b11d5fdc58e3631a9a9..aa97b2f7d43e10c6aa61a4663433fd6ad0be22a4 100644 (file)
@@ -1,4 +1,4 @@
-
+
 
  
   2000-11-24
@@ -74,6 +74,18 @@ SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL { READ COMMITTED | SE
   
  
 
+  Notes
+
+  
+   The session default transaction isolation level can also be set
+   with the command SET default_transaction_isolation =
+   'value' and in the
+   configuration file.  Consult the Administrator's
+   Guide for more information.
+  
+
  
   Compatibility
 
index 730d031a0f98094422e0d109be5d9ddc939676bb..f73bddf354b8dd7b35c4dbff9c589a55a52f7d70 100644 (file)
@@ -1,5 +1,5 @@
 
 
 
@@ -996,6 +996,29 @@ env PGOPTIONS='-c geqo=off' psql
       
      
 
+     
+      
+       transaction isolation level
+      
+
+      DEFAUL_TRANSACTION_ISOLATION (string)
+      
+       
+        Each SQL transaction has an isolation level, which can be
+        either read committed or
+        serializable.  This parameter controls what the
+        isolation level of each new transaction is set to.  The
+        default is read committed.
+       
+
+       
+        Consult the PostgreSQL User's Guide and
+        the command SET TRANSACTION for more
+        information.
+       
+      
+     
+
      
       DYNAMIC_LIBRARY_PATH (string)
       
@@ -1051,9 +1074,9 @@ dynamic_library_path = '/usr/local/lib:/home/my_project/lib:$libdir:$libdir/cont
         will use the fsync() system call in several
         places to make sure that updates are physically written to
         disk and do not hang around in the kernel buffer cache. This
-        increases the chance that a database installation will still
-        be usable after an operating system or hardware crash by a
-        large amount. (Crashes of the database server itself do
+        increases the chance by a large amount that a database
+        installation will still be usable after an operating system or
+        hardware crash.  (Crashes of the database server itself do
         not affect this consideration.)
        
 
index dd94509a7f298db0b149199c23ef6a9d21337244..3d96ba18390c0139e8392e8ac0665e61ca265348 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/commands/variable.c,v 1.50 2001/06/12 22:54:05 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/commands/variable.c,v 1.51 2001/06/30 22:03:25 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -46,9 +46,6 @@ static bool show_timezone(void);
 static bool reset_timezone(void);
 static bool parse_timezone(char *);
 
-static bool show_DefaultXactIsoLevel(void);
-static bool reset_DefaultXactIsoLevel(void);
-static bool parse_DefaultXactIsoLevel(char *);
 static bool show_XactIsoLevel(void);
 static bool reset_XactIsoLevel(void);
 static bool parse_XactIsoLevel(char *);
@@ -448,69 +445,6 @@ reset_timezone(void)
 
 /* SET TRANSACTION */
 
-static bool
-parse_DefaultXactIsoLevel(char *value)
-{
-#if 0
-   TransactionState s = CurrentTransactionState;
-
-#endif
-
-   if (value == NULL)
-   {
-       reset_DefaultXactIsoLevel();
-       return TRUE;
-   }
-
-#if 0
-   if (s->state != TRANS_DEFAULT)
-   {
-       elog(ERROR, "ALTER SESSION/SET TRANSACTION ISOLATION LEVEL"
-            " can not be called within a transaction");
-       return TRUE;
-   }
-#endif
-
-   if (strcasecmp(value, "SERIALIZABLE") == 0)
-       DefaultXactIsoLevel = XACT_SERIALIZABLE;
-   else if (strcasecmp(value, "COMMITTED") == 0)
-       DefaultXactIsoLevel = XACT_READ_COMMITTED;
-   else
-       elog(ERROR, "Bad TRANSACTION ISOLATION LEVEL (%s)", value);
-
-   return TRUE;
-}
-
-static bool
-show_DefaultXactIsoLevel(void)
-{
-
-   if (DefaultXactIsoLevel == XACT_SERIALIZABLE)
-       elog(NOTICE, "Default TRANSACTION ISOLATION LEVEL is SERIALIZABLE");
-   else
-       elog(NOTICE, "Default TRANSACTION ISOLATION LEVEL is READ COMMITTED");
-   return TRUE;
-}
-
-static bool
-reset_DefaultXactIsoLevel(void)
-{
-#if 0
-   TransactionState s = CurrentTransactionState;
-
-   if (s->state != TRANS_DEFAULT)
-   {
-       elog(ERROR, "ALTER SESSION/SET TRANSACTION ISOLATION LEVEL"
-            " can not be called within a transaction");
-       return TRUE;
-   }
-#endif
-
-   DefaultXactIsoLevel = XACT_READ_COMMITTED;
-
-   return TRUE;
-}
-
 static bool
 parse_XactIsoLevel(char *value)
 {
@@ -530,7 +464,7 @@ parse_XactIsoLevel(char *value)
 
    if (strcasecmp(value, "SERIALIZABLE") == 0)
        XactIsoLevel = XACT_SERIALIZABLE;
-   else if (strcasecmp(value, "COMMITTED") == 0)
+   else if (strcasecmp(value, "READ COMMITTED") == 0)
        XactIsoLevel = XACT_READ_COMMITTED;
    else
        elog(ERROR, "Bad TRANSACTION ISOLATION LEVEL (%s)", value);
@@ -711,8 +645,6 @@ SetPGVariable(const char *name, const char *value)
        parse_datestyle(mvalue);
    else if (strcasecmp(name, "timezone") == 0)
        parse_timezone(mvalue);
-   else if (strcasecmp(name, "DefaultXactIsoLevel") == 0)
-       parse_DefaultXactIsoLevel(mvalue);
    else if (strcasecmp(name, "XactIsoLevel") == 0)
        parse_XactIsoLevel(mvalue);
    else if (strcasecmp(name, "client_encoding") == 0)
@@ -737,8 +669,6 @@ GetPGVariable(const char *name)
        show_datestyle();
    else if (strcasecmp(name, "timezone") == 0)
        show_timezone();
-   else if (strcasecmp(name, "DefaultXactIsoLevel") == 0)
-       show_DefaultXactIsoLevel();
    else if (strcasecmp(name, "XactIsoLevel") == 0)
        show_XactIsoLevel();
    else if (strcasecmp(name, "client_encoding") == 0)
@@ -752,7 +682,6 @@ GetPGVariable(const char *name)
        ShowAllGUCConfig();
        show_datestyle();
        show_timezone();
-       show_DefaultXactIsoLevel();
        show_XactIsoLevel();
        show_client_encoding();
        show_server_encoding();
@@ -772,8 +701,6 @@ ResetPGVariable(const char *name)
        reset_datestyle();
    else if (strcasecmp(name, "timezone") == 0)
        reset_timezone();
-   else if (strcasecmp(name, "DefaultXactIsoLevel") == 0)
-       reset_DefaultXactIsoLevel();
    else if (strcasecmp(name, "XactIsoLevel") == 0)
        reset_XactIsoLevel();
    else if (strcasecmp(name, "client_encoding") == 0)
@@ -784,8 +711,6 @@ ResetPGVariable(const char *name)
        reset_random_seed();
    else if (strcasecmp(name, "all") == 0)
    {
-       reset_DefaultXactIsoLevel();
-       reset_XactIsoLevel();
        reset_random_seed();
        /* reset_server_encoding(); */
        reset_client_encoding();
@@ -793,7 +718,8 @@ ResetPGVariable(const char *name)
        reset_timezone();
 
        ResetAllOptions(false);
-   } else
+   }
+   else
        SetConfigOption(name, NULL,
                        superuser() ? PGC_SUSET : PGC_USERSET,
                        false);
index 3c7d526a7b8fddd868e4247bd80d1365e7f15b2e..cf518f3cadd691c7dd446af64747d98b81f94f39 100644 (file)
@@ -11,7 +11,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.232 2001/06/23 00:07:34 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.233 2001/06/30 22:03:25 petere Exp $
  *
  * HISTORY
  *   AUTHOR            DATE            MAJOR EVENT
@@ -752,7 +752,7 @@ VariableSetStmt:  SET ColId TO var_value
         | SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL opt_level
                {
                    VariableSetStmt *n = makeNode(VariableSetStmt);
-                   n->name  = "DefaultXactIsoLevel";
+                   n->name  = "default_transaction_isolation";
                    n->value = $8;
                    $$ = (Node *) n;
                }
@@ -772,7 +772,7 @@ VariableSetStmt:  SET ColId TO var_value
                }
        ;
 
-opt_level:  READ COMMITTED                 { $$ = "committed"; }
+opt_level:  READ COMMITTED                 { $$ = "read committed"; }
        | SERIALIZABLE                      { $$ = "serializable"; }
        ;
 
index c38d98d391119ed9e9f315499135c8c939784cf7..96dc8399e1c4fce51444c9cb6198d1cb65346c14 100644 (file)
@@ -4,7 +4,7 @@
  * Support for grand unified configuration scheme, including SET
  * command, configuration file, and command line options.
  *
- * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.43 2001/06/27 23:31:39 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.44 2001/06/30 22:03:26 petere Exp $
  *
  * Copyright 2000 by PostgreSQL Global Development Group
  * Written by Peter Eisentraut .
@@ -51,6 +51,11 @@ extern char *Syslog_ident;
 static bool check_facility(const char *facility);
 #endif
 
+static char *default_iso_level_string;
+
+static bool check_defaultxactisolevel(const char *value);
+static void assign_defaultxactisolevel(const char *value);
+
 /*
  * Debugging options
  */
@@ -355,6 +360,9 @@ static struct config_real
 static struct config_string
            ConfigureNamesString[] =
 {
+   {"default_transaction_isolation", PGC_USERSET, &default_iso_level_string,
+    "read committed", check_defaultxactisolevel, assign_defaultxactisolevel},
+
    {"dynamic_library_path", PGC_SUSET, &Dynamic_library_path,
     "$libdir", NULL, NULL},
 
@@ -1092,3 +1100,25 @@ check_facility(const char *facility)
 }
 
 #endif
+
+
+
+static bool
+check_defaultxactisolevel(const char *value)
+{
+   return (strcasecmp(value, "read committed") == 0
+           || strcasecmp(value, "serializable") == 0)
+       ? true : false;
+}
+
+
+static void
+assign_defaultxactisolevel(const char *value)
+{
+   if (strcasecmp(value, "serializable") == 0)
+       DefaultXactIsoLevel = XACT_SERIALIZABLE;
+   else if (strcasecmp(value, "read committed") == 0)
+       DefaultXactIsoLevel = XACT_READ_COMMITTED;
+   else
+       elog(ERROR, "bogus transaction isolation level");
+}
index a3042bee83d0f4a22a7865d870f78fc628317d1d..fad01e7f32efd2c8d6a28018f25c00f5a9acd8ec 100644 (file)
 #
 #  Misc
 #
+#default_transaction_isolation = 'read committed'
 #sql_inheritance = true
 #australian_timezones = false
 #deadlock_timeout = 1000