On Wed, Jul 14, 2010 at 3:41 AM, Fujii Masao <masao.fu...@gmail.com> wrote: > I read the patch and found some small typos.
Thanks. Corrected version attached. > We should add something like?: > > --------- > Even if this value is set to true, a backend crash during hot standby doesn't > reinitialize the database. > --------- Is that actually true? AFAICS, RecoveryError only gets set if the *startup* process crashes. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise Postgres Company
diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 1aff181..7eb6521 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -5299,6 +5299,47 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir' </sect2> </sect1> + <sect1 id="runtime-config-error-handling"> + <title>Error Handling</title> + + <variablelist> + + <varlistentry id="guc-exit-on-error" xreflabel="exit_on_error"> + <term><varname>exit_on_error</varname> (<type>boolean</type>)</term> + <indexterm> + <primary><varname>exit_on_error</> configuration parameter</primary> + </indexterm> + <listitem> + <para> + If true, any error will terminate the current session. By default, + this is set to false, so that only FATAL errors will terminate the + session. + </para> + </listitem> + </varlistentry> + + <varlistentry id="guc-automatic-restart" xreflabel="automatic_restart"> + <term><varname>automatic_restart</varname> (<type>boolean</type>)</term> + <indexterm> + <primary><varname>automatic_restart</> configuration parameter</primary> + </indexterm> + <listitem> + <para> + When set to true, which is the default, <productname>PostgreSQL</> + will automatically reinitialize after a backend crash. Leaving this + value set to true is normally the best way to maximize the availability + of the database. However, in some circumstances, such as when + <productname>PostgreSQL</> is being invoked by clusterware, it may be + useful to disable this behavior, so that the clusterware can gain + control and take any actions it deems appropriate. + </para> + </listitem> + </varlistentry> + + </variablelist> + + </sect1> + <sect1 id="runtime-config-preset"> <title>Preset Options</title> diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 11f5022..7e911c1 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -203,6 +203,7 @@ bool Db_user_namespace = false; bool enable_bonjour = false; char *bonjour_name; +bool automatic_restart = true; /* PIDs of special child processes; 0 when not running */ static pid_t StartupPID = 0, @@ -3048,12 +3049,12 @@ PostmasterStateMachine(void) } /* - * If recovery failed, wait for all non-syslogger children to exit, and - * then exit postmaster. We don't try to reinitialize when recovery fails, - * because more than likely it will just fail again and we will keep - * trying forever. + * If recovery failed, or if automatic restart has been disabled, wait for + * all non-syslogger children to exit, and then exit postmaster. We don't + * try to reinitialize when recovery fails, because more than likely it + * will just fail again and we will keep trying forever. */ - if (RecoveryError && pmState == PM_NO_CHILDREN) + if (pmState == PM_NO_CHILDREN && (RecoveryError || !automatic_restart)) ExitPostmaster(1); /* diff --git a/src/backend/utils/misc/check_guc b/src/backend/utils/misc/check_guc index df597b4..5152b4e 100755 --- a/src/backend/utils/misc/check_guc +++ b/src/backend/utils/misc/check_guc @@ -16,7 +16,7 @@ ## if an option is valid but shows up in only one file (guc.c but not ## postgresql.conf.sample), it should be listed here so that it ## can be ignored -INTENTIONALLY_NOT_INCLUDED="autocommit debug_deadlocks exit_on_error \ +INTENTIONALLY_NOT_INCLUDED="autocommit debug_deadlocks \ is_superuser lc_collate lc_ctype lc_messages lc_monetary lc_numeric lc_time \ pre_auth_delay role seed server_encoding server_version server_version_int \ session_authorization trace_lock_oidmin trace_lock_table trace_locks trace_lwlocks \ diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index e839639..bae5ae9 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -548,6 +548,8 @@ const char *const config_group_names[] = gettext_noop("Version and Platform Compatibility / Previous PostgreSQL Versions"), /* COMPAT_OPTIONS_CLIENT */ gettext_noop("Version and Platform Compatibility / Other Platforms and Clients"), + /* ERROR_HANDLING */ + gettext_noop("Error Handling"), /* PRESET_OPTIONS */ gettext_noop("Preset Options"), /* CUSTOM_OPTIONS */ @@ -811,17 +813,25 @@ static struct config_bool ConfigureNamesBool[] = #endif assign_debug_assertions, NULL }, + { - /* currently undocumented, so don't show in SHOW ALL */ - {"exit_on_error", PGC_USERSET, UNGROUPED, - gettext_noop("No description available."), - NULL, - GUC_NO_SHOW_ALL | GUC_NOT_IN_SAMPLE + {"exit_on_error", PGC_USERSET, ERROR_HANDLING_OPTIONS, + gettext_noop("Terminate session on any error."), + NULL }, &ExitOnAnyError, false, NULL, NULL }, { + {"automatic_restart", PGC_SIGHUP, ERROR_HANDLING_OPTIONS, + gettext_noop("Reinitialize after backend crash."), + NULL + }, + &automatic_restart, + true, NULL, NULL + }, + + { {"log_duration", PGC_SUSET, LOGGING_WHAT, gettext_noop("Logs the duration of each completed SQL statement."), NULL diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index a3b1457..c2cfbe3 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -518,6 +518,14 @@ #------------------------------------------------------------------------------ +# ERROR HANDLING +#------------------------------------------------------------------------------ + +#exit_on_error = false # terminate session on any error? +#automatic_restart = true # reinitialize after backend crash? + + +#------------------------------------------------------------------------------ # CUSTOMIZED OPTIONS #------------------------------------------------------------------------------ diff --git a/src/include/postmaster/postmaster.h b/src/include/postmaster/postmaster.h index 56d7d8e..948e1a0 100644 --- a/src/include/postmaster/postmaster.h +++ b/src/include/postmaster/postmaster.h @@ -29,6 +29,7 @@ extern bool Log_connections; extern bool log_hostname; extern bool enable_bonjour; extern char *bonjour_name; +extern bool automatic_restart; #ifdef WIN32 extern HANDLE PostmasterHandle; diff --git a/src/include/utils/guc_tables.h b/src/include/utils/guc_tables.h index a4c32fa..b577fd2 100644 --- a/src/include/utils/guc_tables.h +++ b/src/include/utils/guc_tables.h @@ -80,6 +80,7 @@ enum config_group COMPAT_OPTIONS, COMPAT_OPTIONS_PREVIOUS, COMPAT_OPTIONS_CLIENT, + ERROR_HANDLING_OPTIONS, PRESET_OPTIONS, CUSTOM_OPTIONS, DEVELOPER_OPTIONS
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers