ignore_startup_parameters config variable.
authorMarko Kreen <markokr@gmail.com>
Wed, 9 Apr 2008 13:58:38 +0000 (13:58 +0000)
committerMarko Kreen <markokr@gmail.com>
Wed, 9 Apr 2008 13:58:38 +0000 (13:58 +0000)
doc/config.txt
etc/pgbouncer.ini
etc/test.ini
src/bouncer.h
src/client.c
src/main.c

index a66db45ebee91bb93d058e6f5b4f14abec561a0e..338e07379c29e8dc3cd1b1945603bb6678a72b53 100644 (file)
@@ -138,6 +138,16 @@ achieving uniform load.
 
 Default: 0
 
+==== ignore_startup_parameters ====
+
+By default, PgBouncer allows only parameters it can keep track of in startup
+packets - `client_encoding`, `datestyle`, `timezone` and `standard_conforming_strings`.
+
+All others raise error.  To allow others too, they can be specified here,
+so that pgbouncer knows that they have handled by admin and it can ignore them.
+
+Default: empty
+
 === Log settings ===
 
 ==== log_connections ====
index 69bb173c9e718492267418925cb62580087f3590..74ed8885f6d794698975313331bf04c8b7bc6474 100644 (file)
@@ -93,6 +93,12 @@ log_disconnections = 1
 ; log error messages pooler sends to clients
 log_pooler_errors = 1
 
+; PgBouncer gives errors on random parameters passed via
+; startup packet.  By listing some parameters here,
+; it will allow and ignore them.
+;
+;ignore_startup_parameters = extra_float_digits, geqo
+
 
 ; If off, then server connections are reused in LIFO manner
 ;server_round_robin = 0
index ea035554c363fbc2a2ce020d3e482726f1242fdb..57502b3645833958f7da9aa5b50b482446c663d9 100644 (file)
@@ -1,5 +1,10 @@
 [databases]
 marko = host=127.0.0.1 port=5432
+template1 =
+regression =
+postgres =
+contrib_regression =
+
 
 [pgbouncer]
 logfile = lib/pgbouncer.log
@@ -19,6 +24,10 @@ auth_file = etc/test.users
 ;   statement    - after statement finishes
 pool_mode = transaction
 
+server_reset_query =  RESET ALL; SET SESSION AUTHORIZATION DEFAULT
+
+ignore_startup_parameters = extra_float_digits
+
 server_check_query = select 1
 server_check_delay = 5
 max_client_conn = 100
index e804f3d77ae36b4c2e3d0a17b843b60374cf9357..cc3adc736411f1f4c760282d2218e3d3e01732b1 100644 (file)
@@ -289,6 +289,8 @@ extern char *cf_auth_file;
 extern char *cf_logfile;
 extern char *cf_pidfile;
 
+extern char *cf_ignore_startup_params;
+
 extern char *cf_admin_users;
 extern char *cf_stats_users;
 extern int cf_stats_period;
index c3263ebda972fbdab2299e18534e4a471028e42a..f3ad076f586067b5f711c2efaa1d0960357015d9 100644 (file)
@@ -113,7 +113,10 @@ static bool decide_startup_pool(PgSocket *client, PktHdr *pkt)
                        username = val;
                else if (varcache_set(&client->vars, key, val))
                        slog_debug(client, "got var: %s=%s", key, val);
-               else {
+               else if (strlist_contains(cf_ignore_startup_params, key)) {
+                       slog_debug(client, "ignoring startup parameter: %s=%s", key, val);
+               } else {
+                       slog_warning(client, "unsupported startup parameter: %s=%s", key, val);
                        disconnect_client(client, true, "Unknown startup parameter");
                        return false;
                }
index 42b75117da3d6542384981e71dc5eb5c9bad4137..db3f3f9adc93e81bb8e2a9849ef94c797e26e033 100644 (file)
@@ -83,6 +83,8 @@ char *cf_server_check_query = "select 1";
 usec_t cf_server_check_delay = 30 * USEC;
 int cf_server_round_robin = 0;
 
+char *cf_ignore_startup_params = "";
+
 usec_t cf_server_lifetime = 60*60*USEC;
 usec_t cf_server_idle_timeout = 10*60*USEC;
 usec_t cf_server_connect_timeout = 15*USEC;
@@ -131,6 +133,7 @@ ConfElem bouncer_params[] = {
 {"server_connect_timeout",true, CF_TIME, &cf_server_connect_timeout},
 {"server_login_retry", true, CF_TIME, &cf_server_login_retry},
 {"server_round_robin", true, CF_INT, &cf_server_round_robin},
+{"ignore_startup_parameters",  true, CF_STR, &cf_ignore_startup_params},
 
 {"pkt_buf",            false, CF_INT, &cf_sbuf_len},
 {"tcp_defer_accept",   false, CF_INT, &cf_tcp_defer_accept},