aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/src/sgml/ref/set_transaction.sgml14
-rw-r--r--doc/src/sgml/runtime.sgml31
-rw-r--r--src/backend/commands/variable.c82
-rw-r--r--src/backend/parser/gram.y6
-rw-r--r--src/backend/utils/misc/guc.c32
-rw-r--r--src/backend/utils/misc/postgresql.conf.sample1
6 files changed, 79 insertions, 87 deletions
diff --git a/doc/src/sgml/ref/set_transaction.sgml b/doc/src/sgml/ref/set_transaction.sgml
index 488ee6ac31c..aa97b2f7d43 100644
--- a/doc/src/sgml/ref/set_transaction.sgml
+++ b/doc/src/sgml/ref/set_transaction.sgml
@@ -1,4 +1,4 @@
-<!-- $Header: /cvsroot/pgsql/doc/src/sgml/ref/set_transaction.sgml,v 1.3 2000/11/24 20:16:38 petere Exp $ -->
+<!-- $Header: /cvsroot/pgsql/doc/src/sgml/ref/set_transaction.sgml,v 1.4 2001/06/30 22:03:25 petere Exp $ -->
<refentry id="SQL-SET-TRANSACTION">
<docinfo>
<date>2000-11-24</date>
@@ -74,6 +74,18 @@ SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL { READ COMMITTED | SE
</para>
</refsect1>
+ <refsect1>
+ <title>Notes</title>
+
+ <para>
+ The session default transaction isolation level can also be set
+ with the command <literal>SET default_transaction_isolation =
+ '<replaceable>value</replaceable>'</literal> and in the
+ configuration file. Consult the <citetitle>Administrator's
+ Guide</citetitle> for more information.
+ </para>
+ </refsect1>
+
<refsect1 id="R1-SQL-SET-TRANSACTION-3">
<title>Compatibility</title>
diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml
index 730d031a0f9..f73bddf354b 100644
--- a/doc/src/sgml/runtime.sgml
+++ b/doc/src/sgml/runtime.sgml
@@ -1,5 +1,5 @@
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/runtime.sgml,v 1.71 2001/06/30 21:15:57 darcy Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/runtime.sgml,v 1.72 2001/06/30 22:03:25 petere Exp $
-->
<Chapter Id="runtime">
@@ -997,6 +997,29 @@ env PGOPTIONS='-c geqo=off' psql
</varlistentry>
<varlistentry>
+ <indexterm>
+ <primary>transaction isolation level</primary>
+ </indexterm>
+
+ <term>DEFAUL_TRANSACTION_ISOLATION (<type>string</type>)</term>
+ <listitem>
+ <para>
+ Each SQL transaction has an isolation level, which can be
+ either <quote>read committed</quote> or
+ <quote>serializable</quote>. This parameter controls what the
+ isolation level of each new transaction is set to. The
+ default is read committed.
+ </para>
+
+ <para>
+ Consult the <citetitle>PostgreSQL User's Guide</citetitle> and
+ the command <command>SET TRANSACTION</command> for more
+ information.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term>DYNAMIC_LIBRARY_PATH (<type>string</type>)</term>
<listitem>
<para>
@@ -1051,9 +1074,9 @@ dynamic_library_path = '/usr/local/lib:/home/my_project/lib:$libdir:$libdir/cont
will use the <function>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
<emphasis>not</> affect this consideration.)
</para>
diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c
index dd94509a7f2..3d96ba18390 100644
--- a/src/backend/commands/variable.c
+++ b/src/backend/commands/variable.c
@@ -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 *);
@@ -449,69 +446,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);
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 3c7d526a7b8..cf518f3cadd 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -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"; }
;
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index c38d98d3911..96dc8399e1c 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -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 <peter_e@gmx.net>.
@@ -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");
+}
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample
index a3042bee83d..fad01e7f32e 100644
--- a/src/backend/utils/misc/postgresql.conf.sample
+++ b/src/backend/utils/misc/postgresql.conf.sample
@@ -166,6 +166,7 @@
#
# Misc
#
+#default_transaction_isolation = 'read committed'
#sql_inheritance = true
#australian_timezones = false
#deadlock_timeout = 1000