CVS User Account cvsuser
Tue Mar 8 22:52:41 PST 2005
Log Message:
-----------
Add new conf option: sql_on_connection.
Description:
 Execute the enclosed SQL on each node serviced by this slon daemon at 
 connect time it is usefull for setting ogging levels, or to tune the planner/memory memory used by slon.

Modified Files:
--------------
    slony1-engine/doc/adminguide:
        slonconf.sgml (r1.2 -> r1.3)
    slony1-engine/share:
        slon.conf-sample (r1.2 -> r1.3)
    slony1-engine/src/slon:
        conf-file.l (r1.2 -> r1.3)
        confoptions.h (r1.16 -> r1.17)
        dbutils.c (r1.15 -> r1.16)
        slon.h (r1.46 -> r1.47)

-------------- next part --------------
Index: slonconf.sgml
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/doc/adminguide/slonconf.sgml,v
retrieving revision 1.2
retrieving revision 1.3
diff -Ldoc/adminguide/slonconf.sgml -Ldoc/adminguide/slonconf.sgml -u -w -r1.2 -r1.3
--- doc/adminguide/slonconf.sgml
+++ doc/adminguide/slonconf.sgml
@@ -165,6 +165,21 @@
         </para>
       </listitem>
     </varlistentry>
+
+    <varlistentry id="slon-config-sql-on-connection" xreflabel="slon_conf_sql_on_connection">
+      <term><varname>sql_on_connection  (<type>string</type>)</term>
+      <indexterm>
+        <primary><varname>sql_on_connection</varname> configuration parameter</primary>
+      </indexterm>
+      <listitem>
+        <para>
+          Execute this SQL on each node at slon connect time. Useful to set logging 
+          levels, or to tune the planner/memory settings.  You can specify multiple 
+          statements by seperating them with a ;
+        </para>
+      </listitem>
+    </varlistentry>
+
   </variablelist>
 </sect1>
 <sect1 id="slon-config-interval">
Index: slon.conf-sample
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/share/slon.conf-sample,v
retrieving revision 1.2
retrieving revision 1.3
diff -Lshare/slon.conf-sample -Lshare/slon.conf-sample -u -w -r1.2 -r1.3
--- share/slon.conf-sample
+++ share/slon.conf-sample
@@ -72,3 +72,8 @@
 # Range [10000,600000], default 60000. 
 #desired_sync_time=60000
 
+# Execute the following SQL on each node at slon connect time
+# useful to set logging levels, or to tune the planner/memory
+# settings.  You can specify multiple statements by seperating
+# them with a ;
+#sql_on_connection="SET log_min_duration_statement TO '1000';"
Index: confoptions.h
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/src/slon/confoptions.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -Lsrc/slon/confoptions.h -Lsrc/slon/confoptions.h -u -w -r1.16 -r1.17
--- src/slon/confoptions.h
+++ src/slon/confoptions.h
@@ -28,10 +28,11 @@
 char	   *Syslog_ident;
 char	   *Syslog_facility;
 int			Use_syslog;
+
 bool		logpid;
 bool		logtimestamp;
 char	   *log_timestamp_format;
-
+char		*sql_on_connection;
 
 enum config_type
 {
@@ -283,6 +284,19 @@
 		&archive_dir,
 		NULL
 	},
+	{
+		{
+			(const char *)"sql_on_connection",
+			gettext_noop("SQL to send to each connected node on "
+				"connection establishment, usefull to enable "
+				"duration logging, or to adjust any other "
+				"connection settable GUC"),
+			NULL,
+			SLON_C_STRING
+		},
+		&sql_on_connection,
+		NULL
+	},
 #ifdef HAVE_SYSLOG
 	{
 		{
Index: conf-file.l
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/src/slon/conf-file.l,v
retrieving revision 1.2
retrieving revision 1.3
diff -Lsrc/slon/conf-file.l -Lsrc/slon/conf-file.l -u -w -r1.2 -r1.3
--- src/slon/conf-file.l
+++ src/slon/conf-file.l
@@ -28,6 +28,7 @@
         SLON_EQUALS = 5,
         SLON_UNQUOTED_STRING = 6,
         SLON_QUALIFIED_ID = 7,
+	SLON_ESCAPED_STRING = 8,
         SLON_EOL = 99,
         SLON_FERROR = 100
 };
@@ -62,7 +63,7 @@
 
 UNQUOTED_STRING {LETTER}({LETTER_OR_DIGIT}|[-._:/])*
 STRING          \'([^'\n]|\\.)*\'
-
+ESCAPED_STRING  \"([^"\n]|\\.)*\"
 %%
 
 \n              ConfigFileLineno++; return SLON_EOL;
@@ -73,6 +74,7 @@
 {QUALIFIED_ID}  return SLON_QUALIFIED_ID;
 {STRING}        return SLON_STRING;
 {UNQUOTED_STRING} return SLON_UNQUOTED_STRING;
+{ESCAPED_STRING}  return SLON_ESCAPED_STRING;
 {INTEGER}       return SLON_INTEGER;
 {REAL}          return SLON_REAL;
 =               return SLON_EQUALS;
@@ -172,12 +174,12 @@
 				{
 					token =  yylex();
 				}
-				if (token != SLON_ID && token != SLON_STRING && token != SLON_INTEGER && token != SLON_REAL && token != SLON_UNQUOTED_STRING)
+				if (token != SLON_ID && token != SLON_STRING && token != SLON_INTEGER && token != SLON_REAL && token != SLON_UNQUOTED_STRING && token != SLON_ESCAPED_STRING)
 				{
 					goto parse_error;
 				}
 				opt_value = strdup(yytext);
-				if (token == SLON_STRING)
+				if (token == SLON_STRING || token == SLON_ESCAPED_STRING)
 				{
 					memmove(opt_value,opt_value+1,strlen(opt_value)-1);
 					opt_value[strlen(opt_value)-2]='\0';
Index: dbutils.c
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/src/slon/dbutils.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -Lsrc/slon/dbutils.c -Lsrc/slon/dbutils.c -u -w -r1.15 -r1.16
--- src/slon/dbutils.c
+++ src/slon/dbutils.c
@@ -73,6 +73,24 @@
 		PQfinish(dbconn);
 		return NULL;
 	}
+	if (sql_on_connection != NULL)
+	{
+
+		PGresult *res;
+		SlonDString query;
+
+		dstring_init(&query);
+		slon_mkquery(&query, "%s", sql_on_connection);
+		res = PQexec(dbconn, dstring_data(&query));
+		if ( ! ((PQresultStatus(res) == PGRES_TUPLES_OK) ||
+		       (PQresultStatus(res)  == PGRES_COMMAND_OK)) )
+		{
+			slon_log(SLON_ERROR,
+				"query %s failed\n",
+				dstring_data(&query));
+		}
+                PQclear(res);
+	}
 
 	/*
 	 * Embed it into a SlonConn structure used to exchange it with the
Index: slon.h
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/src/slon/slon.h,v
retrieving revision 1.46
retrieving revision 1.47
diff -Lsrc/slon/slon.h -Lsrc/slon/slon.h -u -w -r1.46 -r1.47
--- src/slon/slon.h
+++ src/slon/slon.h
@@ -508,7 +508,7 @@
 
 extern int	slon_mkquery(SlonDString * ds, char *fmt,...);
 extern int	slon_appendquery(SlonDString * ds, char *fmt,...);
-
+extern char 	*sql_on_connection;
 
 /* ----------
  * Globals in misc.c


More information about the Slony1-commit mailing list