mirror of
https://github.com/postgres/postgres.git
synced 2025-11-10 17:42:29 +03:00
Add --help-config facility to dump information about GUC parameters
without needing a running backend. Reorder postgresql.conf.sample to match new layout of runtime.sgml. This commit re-adds work lost in Wednesday's crash.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# $Header: /cvsroot/pgsql/src/backend/utils/misc/Makefile,v 1.20 2002/11/01 22:52:33 tgl Exp $
|
||||
# $Header: /cvsroot/pgsql/src/backend/utils/misc/Makefile,v 1.21 2003/07/04 16:41:21 tgl Exp $
|
||||
|
||||
subdir = src/backend/utils/misc
|
||||
top_builddir = ../../../..
|
||||
@@ -6,7 +6,7 @@ include $(top_builddir)/src/Makefile.global
|
||||
|
||||
override CPPFLAGS := -I$(srcdir) $(CPPFLAGS)
|
||||
|
||||
OBJS = database.o superuser.o guc.o ps_status.o
|
||||
OBJS = database.o superuser.o guc.o help_config.o ps_status.o
|
||||
|
||||
# This location might depend on the installation directories. Therefore
|
||||
# we can't subsitute it into config.h.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
461
src/backend/utils/misc/help_config.c
Normal file
461
src/backend/utils/misc/help_config.c
Normal file
@@ -0,0 +1,461 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
* help_config.c
|
||||
*
|
||||
* Displays available options under grand unified configuration scheme
|
||||
*
|
||||
* The purpose of this option is to list, sort, and make searchable, all
|
||||
* runtime options available to Postgresql, by their description and grouping.
|
||||
*
|
||||
* Valid command-line options to this program:
|
||||
*
|
||||
* none : All available variables are sorted by group and name
|
||||
* and formatted nicely. ( for human consumption )
|
||||
* <string> : list all the variables whose name matches this string
|
||||
* -g <string> : list all the variables whose group matches this string
|
||||
* -l : lists all currently defined groups and terminates
|
||||
* -G : no sort by groups (you get strict name order, instead)
|
||||
* -m : output the list in Machine friendly format, with a header row
|
||||
* -M : same as m, except no header
|
||||
* -h : help
|
||||
*
|
||||
* Options whose flag bits are set to GUC_NO_SHOW_ALL, GUC_NOT_IN_SAMPLE,
|
||||
* or GUC_DISALLOW_IN_FILE are not displayed, unless the user specifically
|
||||
* requests that variable by name
|
||||
*
|
||||
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/misc/help_config.c,v 1.1 2003/07/04 16:41:21 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#include "postgres.h"
|
||||
|
||||
#include <fcntl.h>
|
||||
#ifdef HAVE_GETOPT_H
|
||||
#include <getopt.h>
|
||||
#endif
|
||||
#include <errno.h>
|
||||
#include <float.h>
|
||||
#include <limits.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "utils/guc.h"
|
||||
#include "utils/guc_tables.h"
|
||||
#include "utils/help_config.h"
|
||||
|
||||
extern int optind;
|
||||
extern char *optarg;
|
||||
|
||||
|
||||
/*
|
||||
* The following char constructs provide the different formats the variables
|
||||
* can be outputted in.
|
||||
*/
|
||||
enum outputFormat
|
||||
{
|
||||
HUMAN_OUTPUT,
|
||||
MACHINE_OUTPUT
|
||||
};
|
||||
|
||||
static const char * const GENERIC_FORMAT[] = {
|
||||
gettext_noop("Name : %-20s \nContext : %-20s \nGroup : %-20s\n"),
|
||||
gettext_noop("%s\t%s\t%s\t")
|
||||
};
|
||||
static const char * const GENERIC_DESC[] = {
|
||||
gettext_noop("Description: %s\n%s\n"),
|
||||
gettext_noop("%s %s\n")
|
||||
};
|
||||
static const char * const BOOL_FORMAT[] = {
|
||||
gettext_noop("Type : BOOL\nReset Value: %-s \n"),
|
||||
gettext_noop("BOOL\t%s\t\t\t")
|
||||
};
|
||||
static const char * const INT_FORMAT[] = {
|
||||
gettext_noop("Type : INT\nReset Value: %-20d \nMin Value : %-20d \nMax Value : %-20d \n"),
|
||||
gettext_noop("INT\t%d\t%d\t%d\t")
|
||||
};
|
||||
static const char * const REAL_FORMAT[] = {
|
||||
gettext_noop("Type : REAL\nReset Value: %-20g \nMin Value : %-20g \nMax Value : %-20g \n"),
|
||||
gettext_noop("REAL\t%g\t%g\t%g\t")
|
||||
};
|
||||
static const char * const STRING_FORMAT[] = {
|
||||
gettext_noop("Type : STRING\nReset Value: %-s \n"),
|
||||
gettext_noop("STRING\t%s\t\t\t")
|
||||
};
|
||||
static const char * const COLUMN_HEADER[] = {
|
||||
"",
|
||||
gettext_noop("NAME\tCONTEXT\tGROUP\tTYPE\tRESET_VALUE\tMIN\tMAX\tSHORT_DESCRIPTION\tLONG_DESCRIPTION\n")
|
||||
};
|
||||
static const char * const ROW_SEPARATOR[] = {
|
||||
"------------------------------------------------------------\n",
|
||||
""
|
||||
};
|
||||
|
||||
/*
|
||||
* Variables loaded from the command line
|
||||
*/
|
||||
static char *nameString = NULL; /* The var name pattern to match */
|
||||
static bool nameRegexBool = false; /* Match the name pattern as a
|
||||
* regex */
|
||||
static char *groupString = NULL; /* The var group pattern to match */
|
||||
static bool groupRegexBool = false; /* Match the group pattern as a
|
||||
* regex */
|
||||
static enum outputFormat outFormat = HUMAN_OUTPUT;
|
||||
static bool suppressAllHeaders = false; /* MACHINE_OUTPUT output, no column
|
||||
* headers */
|
||||
static bool groupResults = true; /* sort result list by groups */
|
||||
|
||||
|
||||
/*
|
||||
* This union allows us to mix the numerous different types of structs
|
||||
* that we are organizing.
|
||||
*/
|
||||
typedef union
|
||||
{
|
||||
struct config_generic generic;
|
||||
struct config_bool bool;
|
||||
struct config_real real;
|
||||
struct config_int integer;
|
||||
struct config_string string;
|
||||
} mixedStruct;
|
||||
|
||||
|
||||
/* function prototypes */
|
||||
static bool varMatches(mixedStruct * structToTest);
|
||||
static int compareMixedStructs(const void *, const void *);
|
||||
static mixedStruct **varsToDisplay(int *resultListSize);
|
||||
static const char *usageErrMsg(void);
|
||||
static void helpMessage(void);
|
||||
static void listAllGroups(void);
|
||||
static void printGenericHead(struct config_generic structToPrint);
|
||||
static void printGenericFoot(struct config_generic structToPrint);
|
||||
static void printMixedStruct(mixedStruct * structToPrint);
|
||||
static bool displayStruct(mixedStruct * structToDisplay);
|
||||
|
||||
/*
|
||||
* This array contains the display names for each of the GucContexts available
|
||||
*
|
||||
* Note: these strings are deliberately not localized.
|
||||
*/
|
||||
static const char *const GucContext_names[] = {
|
||||
"INTERNAL",
|
||||
"POSTMASTER",
|
||||
"SIGHUP",
|
||||
"BACKEND",
|
||||
"SUSET",
|
||||
"USERSET"
|
||||
};
|
||||
|
||||
/*
|
||||
* Reads in the the command line options and sets the state of the program
|
||||
* accordingly. Initializes the result list and sorts it.
|
||||
*/
|
||||
int
|
||||
GucInfoMain(int argc, char *argv[])
|
||||
{
|
||||
mixedStruct **varList;
|
||||
int resultListSize;
|
||||
int c;
|
||||
int i;
|
||||
|
||||
while ((c = getopt(argc, argv, "g:rGmMlh")) != -1)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case 'g':
|
||||
groupString = optarg;
|
||||
break;
|
||||
case 'r': /* not actually implemented yet */
|
||||
nameRegexBool = true;
|
||||
break;
|
||||
case 'G':
|
||||
groupResults = false;
|
||||
break;
|
||||
case 'm':
|
||||
outFormat = MACHINE_OUTPUT;
|
||||
break;
|
||||
case 'M':
|
||||
outFormat = MACHINE_OUTPUT;
|
||||
suppressAllHeaders = true;
|
||||
break;
|
||||
case 'l':
|
||||
listAllGroups();
|
||||
exit(0);
|
||||
case 'h':
|
||||
helpMessage();
|
||||
exit(0);
|
||||
|
||||
default:
|
||||
fprintf(stderr, gettext("%s \n Try -h for further details\n"), usageErrMsg());
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
if (optind < argc)
|
||||
nameString = argv[optind];
|
||||
|
||||
/* get the list of variables that match the user's specs. */
|
||||
varList = varsToDisplay(&resultListSize);
|
||||
|
||||
/* sort them by group if desired */
|
||||
/* (without this, we get the original sort by name from guc.c) */
|
||||
if (groupResults)
|
||||
qsort(varList, resultListSize,
|
||||
sizeof(mixedStruct *), compareMixedStructs);
|
||||
|
||||
/* output the results */
|
||||
if (!suppressAllHeaders)
|
||||
printf(gettext(COLUMN_HEADER[outFormat]));
|
||||
|
||||
for (i = 0; varList[i] != NULL; i++)
|
||||
{
|
||||
printf(gettext(ROW_SEPARATOR[outFormat]));
|
||||
printMixedStruct(varList[i]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* This function is used to compare two mixedStruct types. It compares based
|
||||
* on the value of the 'group' field, and then the name of the variable.
|
||||
* Each void* is expected to be a pointer to a pointer to a struct.
|
||||
* (This is because it is used by qsort to sort an array of struct pointers)
|
||||
*
|
||||
* Returns an integer less than, equal to, or greater than zero if the first
|
||||
* argument (struct1) is considered to be respectively less than, equal to,
|
||||
* or greater than the second (struct2). The comparison is made frist on the
|
||||
* value of struct{1,2}.generic.group and then struct{1,2}.generic.name. The
|
||||
* groups will display in the order they are defined in enum config_group
|
||||
*/
|
||||
static int
|
||||
compareMixedStructs(const void *struct1, const void *struct2)
|
||||
{
|
||||
mixedStruct *structVar1 = *(mixedStruct **) struct1;
|
||||
mixedStruct *structVar2 = *(mixedStruct **) struct2;
|
||||
|
||||
if (structVar1->generic.group > structVar2->generic.group)
|
||||
return 1;
|
||||
else if (structVar1->generic.group < structVar2->generic.group)
|
||||
return -1;
|
||||
else
|
||||
return strcmp(structVar1->generic.name, structVar2->generic.name);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* This function returns a complete list of all the variables to display,
|
||||
* according to what the user wants to see.
|
||||
*/
|
||||
static mixedStruct **
|
||||
varsToDisplay(int *resultListSize)
|
||||
{
|
||||
mixedStruct **resultList;
|
||||
int arrayIndex;
|
||||
int i;
|
||||
|
||||
/* Initialize the guc_variables[] array */
|
||||
build_guc_variables();
|
||||
|
||||
/* Extract just the ones we want to display */
|
||||
resultList = malloc((num_guc_variables + 1) * sizeof(mixedStruct *));
|
||||
arrayIndex = 0;
|
||||
|
||||
for (i = 0; i < num_guc_variables; i++)
|
||||
{
|
||||
mixedStruct *var = (mixedStruct *) guc_variables[i];
|
||||
|
||||
if (varMatches(var))
|
||||
resultList[arrayIndex++] = var;
|
||||
}
|
||||
|
||||
/* add an end marker */
|
||||
resultList[arrayIndex] = NULL;
|
||||
|
||||
*resultListSize = arrayIndex;
|
||||
return resultList;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* This function will return true if the struct passed to it
|
||||
* should be displayed to the user.
|
||||
*
|
||||
* The criteria to determine if the struct should not be displayed is:
|
||||
* + It's flag bits are set to GUC_NO_SHOW_ALL
|
||||
* + It's flag bits are set to GUC_NOT_IN_SAMPLE
|
||||
* + It's flag bits are set to GUC_DISALLOW_IN_FILE
|
||||
*/
|
||||
static bool
|
||||
displayStruct(mixedStruct * structToDisplay)
|
||||
{
|
||||
if (structToDisplay->generic.flags & (GUC_NO_SHOW_ALL |
|
||||
GUC_NOT_IN_SAMPLE |
|
||||
GUC_DISALLOW_IN_FILE))
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Used to determine if a variable matches the user's specifications (stored in
|
||||
* global variables). Returns true if this particular variable information should
|
||||
* be returned to the user.
|
||||
*/
|
||||
static bool
|
||||
varMatches(mixedStruct * structToTest)
|
||||
{
|
||||
bool matches = false;
|
||||
bool specificSearch = false; /* This is true if the user
|
||||
* searched for a variable in
|
||||
* particular. */
|
||||
|
||||
if (nameString != NULL && !nameRegexBool)
|
||||
{
|
||||
if (strstr(structToTest->generic.name, nameString) != NULL)
|
||||
{
|
||||
matches = true;
|
||||
specificSearch = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (nameString != NULL && nameRegexBool)
|
||||
{
|
||||
/* We do not support this option yet */
|
||||
}
|
||||
|
||||
if (groupString != NULL && !groupRegexBool)
|
||||
{
|
||||
if (strstr(config_group_names[structToTest->generic.group], groupString) != NULL)
|
||||
{
|
||||
if (nameString != NULL)
|
||||
matches = (matches && true);
|
||||
else
|
||||
matches = true;
|
||||
}
|
||||
else
|
||||
matches = false;
|
||||
}
|
||||
|
||||
if (groupString != NULL && groupRegexBool)
|
||||
{
|
||||
/* We do not support this option yet */
|
||||
}
|
||||
|
||||
/* return all variables */
|
||||
if (nameString == NULL && groupString == NULL)
|
||||
matches = true;
|
||||
|
||||
if (specificSearch)
|
||||
return matches;
|
||||
else
|
||||
return matches && displayStruct(structToTest);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* This function prints out the generic struct passed to it. It will print out
|
||||
* a different format, depending on what the user wants to see.
|
||||
*/
|
||||
static void
|
||||
printMixedStruct(mixedStruct * structToPrint)
|
||||
{
|
||||
printGenericHead(structToPrint->generic);
|
||||
|
||||
switch (structToPrint->generic.vartype)
|
||||
{
|
||||
|
||||
case PGC_BOOL:
|
||||
printf(gettext(BOOL_FORMAT[outFormat]),
|
||||
(structToPrint->bool.reset_val == 0) ?
|
||||
gettext("FALSE") : gettext("TRUE"));
|
||||
break;
|
||||
|
||||
case PGC_INT:
|
||||
printf(gettext(INT_FORMAT[outFormat]),
|
||||
structToPrint->integer.reset_val,
|
||||
structToPrint->integer.min,
|
||||
structToPrint->integer.max);
|
||||
break;
|
||||
|
||||
case PGC_REAL:
|
||||
printf(gettext(REAL_FORMAT[outFormat]),
|
||||
structToPrint->real.reset_val,
|
||||
structToPrint->real.min,
|
||||
structToPrint->real.max);
|
||||
break;
|
||||
|
||||
case PGC_STRING:
|
||||
printf(gettext(STRING_FORMAT[outFormat]),
|
||||
structToPrint->string.boot_val);
|
||||
break;
|
||||
|
||||
default:
|
||||
printf(gettext("Unrecognized variable type!\n"));
|
||||
break;
|
||||
}
|
||||
|
||||
printGenericFoot(structToPrint->generic);
|
||||
}
|
||||
|
||||
static void
|
||||
printGenericHead(struct config_generic structToPrint)
|
||||
{
|
||||
printf(gettext(GENERIC_FORMAT[outFormat]),
|
||||
structToPrint.name,
|
||||
GucContext_names[structToPrint.context],
|
||||
gettext(config_group_names[structToPrint.group]));
|
||||
}
|
||||
|
||||
static void
|
||||
printGenericFoot(struct config_generic sPrint)
|
||||
{
|
||||
printf(gettext(GENERIC_DESC[outFormat]),
|
||||
(sPrint.short_desc == NULL) ? "" : gettext(sPrint.short_desc),
|
||||
(sPrint.long_desc == NULL) ? "" : gettext(sPrint.long_desc));
|
||||
}
|
||||
|
||||
static void
|
||||
listAllGroups(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
printf(gettext("All currently defined groups\n"));
|
||||
printf(gettext("----------------------------\n"));
|
||||
for (i = 0; config_group_names[i] != NULL; i++)
|
||||
printf(gettext("%s\n"), gettext(config_group_names[i]));
|
||||
}
|
||||
|
||||
static const char *
|
||||
usageErrMsg(void)
|
||||
{
|
||||
return gettext("Usage for --help-config option: [-h] [-g <group>] [-l] [-G] [-m] [-M] [string]\n");
|
||||
}
|
||||
|
||||
static void
|
||||
helpMessage(void)
|
||||
{
|
||||
printf(gettext("Description:\n"
|
||||
"--help-config displays all the runtime options available in PostgreSQL.\n"
|
||||
"It groups them by category and sorts them by name. If available, it will\n"
|
||||
"present a short description, default, max and min values as well as other\n"
|
||||
"information about each option.\n\n"
|
||||
"With no options specified, it will output all available runtime options\n"
|
||||
"in human friendly format, grouped by category and sorted by name.\n\n"
|
||||
|
||||
"%s\n"
|
||||
|
||||
"General Options:\n"
|
||||
" [string] All options with names that match this string\n"
|
||||
" -g GROUP All options in categories that match GROUP\n"
|
||||
" -l Prints list of all groups / subgroups\n"
|
||||
" -h Prints this help message\n"
|
||||
"\nOutput Options:\n"
|
||||
" -G Do not group by category\n"
|
||||
" -m Machine friendly format: tab separated fields\n"
|
||||
" -M Same as m, except header with column names is suppressed\n"),
|
||||
usageErrMsg()
|
||||
);
|
||||
}
|
||||
@@ -27,70 +27,83 @@
|
||||
#
|
||||
# Connection Parameters
|
||||
#
|
||||
|
||||
# CONNECTIONS AND AUTHENTICATION
|
||||
# ----------------------------------
|
||||
# Connection Settings
|
||||
|
||||
#tcpip_socket = false
|
||||
#ssl = false
|
||||
|
||||
#max_connections = 32
|
||||
# note: increasing max_connections costs about 500 bytes of shared
|
||||
# memory per connection slot, in addition to costs from shared_buffers
|
||||
# and max_locks_per_transaction.
|
||||
#superuser_reserved_connections = 2
|
||||
|
||||
#port = 5432
|
||||
|
||||
#port = 5432
|
||||
#unix_socket_directory = ''
|
||||
#unix_socket_group = ''
|
||||
#unix_socket_permissions = 0777 # octal
|
||||
|
||||
#virtual_host = ''
|
||||
|
||||
# Security & Authentication
|
||||
|
||||
#authentication_timeout = 60 # 1-600, in seconds
|
||||
#ssl = false
|
||||
#password_encryption = true
|
||||
#krb_server_keyfile = ''
|
||||
#db_user_namespace = false
|
||||
|
||||
|
||||
#
|
||||
# Shared Memory Size
|
||||
#
|
||||
# RESOURCE USAGE (except WAL)
|
||||
# ---------------------------------
|
||||
# Memory
|
||||
|
||||
#shared_buffers = 64 # min 16, at least max_connections*2, 8KB each
|
||||
#max_locks_per_transaction = 64 # min 10, ~260*max_connections bytes each
|
||||
#wal_buffers = 8 # min 4, 8KB each
|
||||
# fsm = free space map
|
||||
#max_fsm_relations = 1000 # min 100, ~50 bytes each
|
||||
#max_fsm_pages = 20000 # min max_fsm_relations*16, 6 bytes each
|
||||
# note: increasing max_connections also costs about 500 bytes each,
|
||||
# in addition to costs from shared_buffers and max_locks_per_transaction.
|
||||
|
||||
|
||||
#
|
||||
# Non-shared Memory Sizes
|
||||
#
|
||||
#sort_mem = 1024 # min 64, size in KB
|
||||
#vacuum_mem = 8192 # min 1024, size in KB
|
||||
|
||||
# Free Space Map
|
||||
|
||||
#max_fsm_pages = 20000 # min max_fsm_relations*16, 6 bytes each
|
||||
#max_fsm_relations = 1000 # min 100, ~50 bytes each
|
||||
|
||||
# Kernel Resource Usage
|
||||
|
||||
#max_files_per_process = 1000 # min 25
|
||||
#preload_libraries = ''
|
||||
|
||||
|
||||
# WRITE AHEAD LOG
|
||||
# ---------------------------------
|
||||
# Settings
|
||||
|
||||
#fsync = true # turns forced synchronization on or off
|
||||
#wal_sync_method = fsync # the default varies across platforms:
|
||||
# fsync, fdatasync, open_sync, or open_datasync
|
||||
#wal_buffers = 8 # min 4, 8KB each
|
||||
|
||||
# Checkpoints
|
||||
|
||||
#
|
||||
# Write-ahead log (WAL)
|
||||
#
|
||||
#checkpoint_segments = 3 # in logfile segments, min 1, 16MB each
|
||||
#checkpoint_timeout = 300 # range 30-3600, in seconds
|
||||
#checkpoint_warning = 30 # 0 is off, in seconds
|
||||
#
|
||||
#commit_delay = 0 # range 0-100000, in microseconds
|
||||
#commit_siblings = 5 # range 1-1000
|
||||
#
|
||||
#fsync = true
|
||||
#wal_sync_method = fsync # the default varies across platforms:
|
||||
# # fsync, fdatasync, open_sync, or open_datasync
|
||||
#wal_debug = 0 # range 0-16
|
||||
|
||||
|
||||
#
|
||||
# Optimizer Parameters
|
||||
#
|
||||
#enable_seqscan = true
|
||||
#enable_indexscan = true
|
||||
#enable_tidscan = true
|
||||
#enable_sort = true
|
||||
# QUERY TUNING
|
||||
# --------------------------------
|
||||
# Planner Method Enabling
|
||||
|
||||
#enable_hashagg = true
|
||||
#enable_nestloop = true
|
||||
#enable_mergejoin = true
|
||||
#enable_hashjoin = true
|
||||
#enable_indexscan = true
|
||||
#enable_mergejoin = true
|
||||
#enable_nestloop = true
|
||||
#enable_seqscan = true
|
||||
#enable_sort = true
|
||||
#enable_tidscan = true
|
||||
|
||||
# Planner Cost Constants
|
||||
|
||||
#effective_cache_size = 1000 # typically 8KB each
|
||||
#random_page_cost = 4 # units are one sequential page fetch cost
|
||||
@@ -98,117 +111,127 @@
|
||||
#cpu_index_tuple_cost = 0.001 # (same)
|
||||
#cpu_operator_cost = 0.0025 # (same)
|
||||
|
||||
# Genetic Query Optimizer
|
||||
|
||||
#geqo = true
|
||||
#geqo_threshold = 11
|
||||
#geqo_effort = 1
|
||||
#geqo_generations = 0
|
||||
#geqo_pool_size = 0 # default based on tables in statement,
|
||||
# range 128-1024
|
||||
#geqo_random_seed = -1 # -1 = use variable seed
|
||||
#geqo_selection_bias = 2.0 # range 1.5-2.0
|
||||
|
||||
# Other Planner Options
|
||||
|
||||
#default_statistics_target = 10 # range 1-1000
|
||||
#from_collapse_limit = 8
|
||||
#join_collapse_limit = 8 # 1 disables collapsing of explicit JOINs
|
||||
|
||||
#default_statistics_target = 10 # range 1-1000
|
||||
|
||||
#
|
||||
# GEQO Optimizer Parameters
|
||||
#
|
||||
#geqo = true
|
||||
#geqo_selection_bias = 2.0 # range 1.5-2.0
|
||||
#geqo_threshold = 11
|
||||
#geqo_pool_size = 0 # default based on tables in statement,
|
||||
# range 128-1024
|
||||
#geqo_effort = 1
|
||||
#geqo_generations = 0
|
||||
#geqo_random_seed = -1 # auto-compute seed
|
||||
# ERROR REPORTING AND LOGGING
|
||||
# ------------------------------------
|
||||
# Syslog
|
||||
|
||||
#syslog = 0 # range 0-2
|
||||
#syslog_facility = 'LOCAL0'
|
||||
#syslog_ident = 'postgres'
|
||||
|
||||
# When to Log
|
||||
|
||||
#
|
||||
# Message display
|
||||
#
|
||||
#client_min_messages = notice # Values, in order of decreasing detail:
|
||||
# debug5, debug4, debug3, debug2, debug1,
|
||||
# log, info, notice, warning, error
|
||||
|
||||
#log_min_messages = notice # Values, in order of decreasing detail:
|
||||
# debug5, debug4, debug3, debug2, debug1,
|
||||
# info, notice, warning, error, log, fatal,
|
||||
# panic
|
||||
|
||||
#log_error_verbosity = default # terse, default, or verbose messages
|
||||
|
||||
#silent_mode = false
|
||||
|
||||
#log_connections = false
|
||||
#log_hostname = false
|
||||
#log_source_port = false
|
||||
#log_pid = false
|
||||
#log_statement = false
|
||||
#log_duration = false
|
||||
#log_timestamp = false
|
||||
#log_error_verbosity = default # terse, default, or verbose messages
|
||||
|
||||
#log_min_error_statement = panic # Values in order of increasing severity:
|
||||
# debug5, debug4, debug3, debug2, debug1,
|
||||
# info, notice, warning, error, panic(off)
|
||||
|
||||
|
||||
#log_min_duration_statement = 0 # Log all statements whose
|
||||
# execution time exceeds the value, in
|
||||
# milliseconds. Zero disables.
|
||||
|
||||
#silent_mode = false # DO NOT USE without Syslog!
|
||||
|
||||
# What to Log
|
||||
|
||||
#debug_print_parse = false
|
||||
#debug_print_rewritten = false
|
||||
#debug_print_plan = false
|
||||
#debug_pretty_print = false
|
||||
#log_connections = false
|
||||
#log_duration = false
|
||||
#log_pid = false
|
||||
#log_statement = false
|
||||
#log_timestamp = false
|
||||
#log_hostname = false
|
||||
#log_source_port = false
|
||||
|
||||
#explain_pretty_print = true
|
||||
# RUNTIME STATISTICS
|
||||
# -------------------------------------
|
||||
# Statistics Monitoring
|
||||
|
||||
# requires USE_ASSERT_CHECKING
|
||||
#debug_assertions = true
|
||||
|
||||
|
||||
#
|
||||
# Syslog
|
||||
#
|
||||
#syslog = 0 # range 0-2
|
||||
#syslog_facility = 'LOCAL0'
|
||||
#syslog_ident = 'postgres'
|
||||
|
||||
|
||||
#
|
||||
# Statistics
|
||||
#
|
||||
#log_parser_stats = false
|
||||
#log_planner_stats = false
|
||||
#log_executor_stats = false
|
||||
#log_statement_stats = false
|
||||
|
||||
# requires BTREE_BUILD_STATS
|
||||
#log_btree_build_stats = false
|
||||
# Query/Index Statistics Collector
|
||||
|
||||
|
||||
#
|
||||
# Access statistics collection
|
||||
#
|
||||
#stats_start_collector = true
|
||||
#stats_reset_on_server_start = true
|
||||
#stats_command_string = false
|
||||
#stats_row_level = false
|
||||
#stats_block_level = false
|
||||
#stats_row_level = false
|
||||
#stats_reset_on_server_start = true
|
||||
|
||||
|
||||
#
|
||||
# Misc
|
||||
#
|
||||
#dynamic_library_path = '$libdir'
|
||||
# CLIENT CONNECTION DEFAULTS
|
||||
# -------------------------------------
|
||||
# Statement Behavior
|
||||
|
||||
#search_path = '$user,public' # schema names
|
||||
#default_transaction_isolation = 'read committed'
|
||||
#default_transaction_read_only = false
|
||||
#statement_timeout = 0 # 0 is disabled, in milliseconds
|
||||
|
||||
# Locale and Formatting
|
||||
|
||||
#datestyle = 'iso, us'
|
||||
#timezone = unknown # actually, defaults to TZ environment setting
|
||||
#australian_timezones = false
|
||||
#client_encoding = sql_ascii # actually, defaults to database encoding
|
||||
#authentication_timeout = 60 # 1-600, in seconds
|
||||
#deadlock_timeout = 1000 # in milliseconds
|
||||
#default_transaction_isolation = 'read committed'
|
||||
#default_transaction_read_only = false
|
||||
#extra_float_digits = 0 # min -15, max 2
|
||||
#client_encoding = sql_ascii # actually, defaults to database encoding
|
||||
|
||||
# These settings are initialized by initdb -- they may be changed
|
||||
|
||||
# Other Defaults
|
||||
|
||||
#explain_pretty_print = true
|
||||
#dynamic_library_path = '$libdir'
|
||||
#max_expr_depth = 10000 # min 10
|
||||
#max_files_per_process = 1000 # min 25
|
||||
#password_encryption = true
|
||||
|
||||
# LOCK MANAGEMENT
|
||||
# -----------------------------------------
|
||||
|
||||
#deadlock_timeout = 1000 # in milliseconds
|
||||
#max_locks_per_transaction = 64 # min 10, ~260*max_connections bytes each
|
||||
|
||||
|
||||
# VERSION/PLATFORM COMPATIBILITY
|
||||
# -----------------------------------------
|
||||
# Previous Postgres Versions
|
||||
|
||||
#add_missing_from = true
|
||||
#regex_flavor = advanced # advanced, extended, or basic
|
||||
#sql_inheritance = true
|
||||
|
||||
# Other Platforms & Clients
|
||||
|
||||
#transform_null_equals = false
|
||||
#statement_timeout = 0 # 0 is disabled, in milliseconds
|
||||
#db_user_namespace = false
|
||||
#preload_libraries = ''
|
||||
#add_missing_from = true
|
||||
|
||||
Reference in New Issue
Block a user