diff -c -r orig_pgsql/doc/src/sgml/config.sgml pgsql/doc/src/sgml/config.sgml *** orig_pgsql/doc/src/sgml/config.sgml Tue Jul 29 23:11:32 2008 --- pgsql/doc/src/sgml/config.sgml Thu Jul 31 18:27:51 2008 *************** *** 3942,3947 **** --- 3942,3970 ---- + + statement_cost_limit (integer) + + statement_cost_limit configuration parameter + + + + Abort any statement that has higher costs than the specified number of + penalty points predicted by the planner. + If log_min_error_statement is set to + ERROR or lower, the statement that is too expensive will also be + logged. A value of zero (the default) turns off the + limitation. + + + + Setting statement_cost_limit in + postgresql.conf is not recommended because it + affects all sessions. + + + + vacuum_freeze_min_age (integer) diff -c -r orig_pgsql/src/backend/tcop/postgres.c pgsql/src/backend/tcop/postgres.c *** orig_pgsql/src/backend/tcop/postgres.c Tue Jul 29 23:11:37 2008 --- pgsql/src/backend/tcop/postgres.c Thu Jul 31 18:22:57 2008 *************** *** 64,69 **** --- 64,70 ---- #include "tcop/tcopprot.h" #include "tcop/utility.h" #include "utils/flatfiles.h" + #include "utils/guc.h" #include "utils/lsyscache.h" #include "utils/memutils.h" #include "utils/ps_status.h" *************** *** 95,100 **** --- 96,103 ---- /* wait N seconds to allow attach from a debugger */ int PostAuthDelay = 0; + /* check for plan costs */ + int StatementCostLimit = 0; /* ---------------- *************** *** 682,688 **** /* call the optimizer */ plan = planner(querytree, cursorOptions, boundParams); ! if (log_planner_stats) ShowUsage("PLANNER STATISTICS"); --- 685,693 ---- /* call the optimizer */ plan = planner(querytree, cursorOptions, boundParams); ! if (StatementCostLimit > 0 && plan->planTree->total_cost > StatementCostLimit) ! elog(ERROR, "execution plan is too expensive: %f", plan->planTree->total_cost ); ! if (log_planner_stats) ShowUsage("PLANNER STATISTICS"); diff -c -r orig_pgsql/src/backend/utils/misc/guc.c pgsql/src/backend/utils/misc/guc.c *** orig_pgsql/src/backend/utils/misc/guc.c Tue Jul 29 23:11:39 2008 --- pgsql/src/backend/utils/misc/guc.c Thu Jul 31 18:24:20 2008 *************** *** 1515,1520 **** --- 1515,1530 ---- }, { + {"statement_cost_limit", PGC_USERSET, CLIENT_CONN_STATEMENT, + gettext_noop("Sets the maximum costs of a statement."), + gettext_noop("A value of 0 turns off the threshold."), + NULL + }, + &StatementCostLimit, + 0, 100, INT_MAX, NULL, NULL + }, + + { {"vacuum_freeze_min_age", PGC_USERSET, CLIENT_CONN_STATEMENT, gettext_noop("Minimum age at which VACUUM should freeze a table row."), NULL diff -c -r orig_pgsql/src/backend/utils/misc/postgresql.conf.sample pgsql/src/backend/utils/misc/postgresql.conf.sample *** orig_pgsql/src/backend/utils/misc/postgresql.conf.sample Tue Jul 29 23:11:39 2008 --- pgsql/src/backend/utils/misc/postgresql.conf.sample Thu Jul 31 18:07:42 2008 *************** *** 418,423 **** --- 418,424 ---- #session_replication_role = 'origin' #statement_timeout = 0 # 0 is disabled + #statement_cost_limit = 0 # 0 is disabled #vacuum_freeze_min_age = 100000000 #xmlbinary = 'base64' #xmloption = 'content' diff -c -r orig_pgsql/src/include/utils/guc.h pgsql/src/include/utils/guc.h *** orig_pgsql/src/include/utils/guc.h Tue Jul 29 23:11:36 2008 --- pgsql/src/include/utils/guc.h Thu Jul 31 18:13:00 2008 *************** *** 145,150 **** --- 145,152 ---- extern int log_min_duration_statement; extern int log_temp_files; + extern int StatementCostLimit; + extern int num_temp_buffers; extern char *ConfigFileName;