| 1 | /*------------------------------------------------------------------------ |
| 2 | * PostgreSQL manual configuration settings |
| 3 | * |
| 4 | * This file contains various configuration symbols and limits. In |
| 5 | * all cases, changing them is only useful in very rare situations or |
| 6 | * for developers. If you edit any of these, be sure to do a *full* |
| 7 | * rebuild (and an initdb if noted). |
| 8 | * |
| 9 | * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group |
| 10 | * Portions Copyright (c) 1994, Regents of the University of California |
| 11 | * |
| 12 | * src/include/pg_config_manual.h |
| 13 | *------------------------------------------------------------------------ |
| 14 | */ |
| 15 | |
| 16 | /* |
| 17 | * This is the default value for wal_segment_size to be used when initdb is run |
| 18 | * without the --wal-segsize option. It must be a valid segment size. |
| 19 | */ |
| 20 | #define DEFAULT_XLOG_SEG_SIZE (16*1024*1024) |
| 21 | |
| 22 | /* |
| 23 | * Maximum length for identifiers (e.g. table names, column names, |
| 24 | * function names). Names actually are limited to one less byte than this, |
| 25 | * because the length must include a trailing zero byte. |
| 26 | * |
| 27 | * Changing this requires an initdb. |
| 28 | */ |
| 29 | #define NAMEDATALEN 64 |
| 30 | |
| 31 | /* |
| 32 | * Maximum number of arguments to a function. |
| 33 | * |
| 34 | * The minimum value is 8 (GIN indexes use 8-argument support functions). |
| 35 | * The maximum possible value is around 600 (limited by index tuple size in |
| 36 | * pg_proc's index; BLCKSZ larger than 8K would allow more). Values larger |
| 37 | * than needed will waste memory and processing time, but do not directly |
| 38 | * cost disk space. |
| 39 | * |
| 40 | * Changing this does not require an initdb, but it does require a full |
| 41 | * backend recompile (including any user-defined C functions). |
| 42 | */ |
| 43 | #define FUNC_MAX_ARGS 100 |
| 44 | |
| 45 | /* |
| 46 | * Maximum number of columns in an index. There is little point in making |
| 47 | * this anything but a multiple of 32, because the main cost is associated |
| 48 | * with index tuple header size (see access/itup.h). |
| 49 | * |
| 50 | * Changing this requires an initdb. |
| 51 | */ |
| 52 | #define INDEX_MAX_KEYS 32 |
| 53 | |
| 54 | /* |
| 55 | * Maximum number of columns in a partition key |
| 56 | */ |
| 57 | #define PARTITION_MAX_KEYS 32 |
| 58 | |
| 59 | /* |
| 60 | * When we don't have native spinlocks, we use semaphores to simulate them. |
| 61 | * Decreasing this value reduces consumption of OS resources; increasing it |
| 62 | * may improve performance, but supplying a real spinlock implementation is |
| 63 | * probably far better. |
| 64 | */ |
| 65 | #define NUM_SPINLOCK_SEMAPHORES 128 |
| 66 | |
| 67 | /* |
| 68 | * When we have neither spinlocks nor atomic operations support we're |
| 69 | * implementing atomic operations on top of spinlock on top of semaphores. To |
| 70 | * be safe against atomic operations while holding a spinlock separate |
| 71 | * semaphores have to be used. |
| 72 | */ |
| 73 | #define NUM_ATOMICS_SEMAPHORES 64 |
| 74 | |
| 75 | /* |
| 76 | * MAXPGPATH: standard size of a pathname buffer in PostgreSQL (hence, |
| 77 | * maximum usable pathname length is one less). |
| 78 | * |
| 79 | * We'd use a standard system header symbol for this, if there weren't |
| 80 | * so many to choose from: MAXPATHLEN, MAX_PATH, PATH_MAX are all |
| 81 | * defined by different "standards", and often have different values |
| 82 | * on the same platform! So we just punt and use a reasonably |
| 83 | * generous setting here. |
| 84 | */ |
| 85 | #define MAXPGPATH 1024 |
| 86 | |
| 87 | /* |
| 88 | * PG_SOMAXCONN: maximum accept-queue length limit passed to |
| 89 | * listen(2). You'd think we should use SOMAXCONN from |
| 90 | * <sys/socket.h>, but on many systems that symbol is much smaller |
| 91 | * than the kernel's actual limit. In any case, this symbol need be |
| 92 | * twiddled only if you have a kernel that refuses large limit values, |
| 93 | * rather than silently reducing the value to what it can handle |
| 94 | * (which is what most if not all Unixen do). |
| 95 | */ |
| 96 | #define PG_SOMAXCONN 10000 |
| 97 | |
| 98 | /* |
| 99 | * You can try changing this if you have a machine with bytes of |
| 100 | * another size, but no guarantee... |
| 101 | */ |
| 102 | #define BITS_PER_BYTE 8 |
| 103 | |
| 104 | /* |
| 105 | * Preferred alignment for disk I/O buffers. On some CPUs, copies between |
| 106 | * user space and kernel space are significantly faster if the user buffer |
| 107 | * is aligned on a larger-than-MAXALIGN boundary. Ideally this should be |
| 108 | * a platform-dependent value, but for now we just hard-wire it. |
| 109 | */ |
| 110 | #define ALIGNOF_BUFFER 32 |
| 111 | |
| 112 | /* |
| 113 | * Disable UNIX sockets for certain operating systems. |
| 114 | */ |
| 115 | #if defined(WIN32) |
| 116 | #undef HAVE_UNIX_SOCKETS |
| 117 | #endif |
| 118 | |
| 119 | /* |
| 120 | * Define this if your operating system supports link() |
| 121 | */ |
| 122 | #if !defined(WIN32) && !defined(__CYGWIN__) |
| 123 | #define HAVE_WORKING_LINK 1 |
| 124 | #endif |
| 125 | |
| 126 | /* |
| 127 | * USE_POSIX_FADVISE controls whether Postgres will attempt to use the |
| 128 | * posix_fadvise() kernel call. Usually the automatic configure tests are |
| 129 | * sufficient, but some older Linux distributions had broken versions of |
| 130 | * posix_fadvise(). If necessary you can remove the #define here. |
| 131 | */ |
| 132 | #if HAVE_DECL_POSIX_FADVISE && defined(HAVE_POSIX_FADVISE) |
| 133 | #define USE_POSIX_FADVISE |
| 134 | #endif |
| 135 | |
| 136 | /* |
| 137 | * USE_PREFETCH code should be compiled only if we have a way to implement |
| 138 | * prefetching. (This is decoupled from USE_POSIX_FADVISE because there |
| 139 | * might in future be support for alternative low-level prefetch APIs. |
| 140 | * If you change this, you probably need to adjust the error message in |
| 141 | * check_effective_io_concurrency.) |
| 142 | */ |
| 143 | #ifdef USE_POSIX_FADVISE |
| 144 | #define USE_PREFETCH |
| 145 | #endif |
| 146 | |
| 147 | /* |
| 148 | * Default and maximum values for backend_flush_after, bgwriter_flush_after |
| 149 | * and checkpoint_flush_after; measured in blocks. Currently, these are |
| 150 | * enabled by default if sync_file_range() exists, ie, only on Linux. Perhaps |
| 151 | * we could also enable by default if we have mmap and msync(MS_ASYNC)? |
| 152 | */ |
| 153 | #ifdef HAVE_SYNC_FILE_RANGE |
| 154 | #define DEFAULT_BACKEND_FLUSH_AFTER 0 /* never enabled by default */ |
| 155 | #define DEFAULT_BGWRITER_FLUSH_AFTER 64 |
| 156 | #define DEFAULT_CHECKPOINT_FLUSH_AFTER 32 |
| 157 | #else |
| 158 | #define DEFAULT_BACKEND_FLUSH_AFTER 0 |
| 159 | #define DEFAULT_BGWRITER_FLUSH_AFTER 0 |
| 160 | #define DEFAULT_CHECKPOINT_FLUSH_AFTER 0 |
| 161 | #endif |
| 162 | /* upper limit for all three variables */ |
| 163 | #define WRITEBACK_MAX_PENDING_FLUSHES 256 |
| 164 | |
| 165 | /* |
| 166 | * USE_SSL code should be compiled only when compiling with an SSL |
| 167 | * implementation. (Currently, only OpenSSL is supported, but we might add |
| 168 | * more implementations in the future.) |
| 169 | */ |
| 170 | #ifdef USE_OPENSSL |
| 171 | #define USE_SSL |
| 172 | #endif |
| 173 | |
| 174 | /* |
| 175 | * This is the default directory in which AF_UNIX socket files are |
| 176 | * placed. Caution: changing this risks breaking your existing client |
| 177 | * applications, which are likely to continue to look in the old |
| 178 | * directory. But if you just hate the idea of sockets in /tmp, |
| 179 | * here's where to twiddle it. You can also override this at runtime |
| 180 | * with the postmaster's -k switch. |
| 181 | */ |
| 182 | #define DEFAULT_PGSOCKET_DIR "/tmp" |
| 183 | |
| 184 | /* |
| 185 | * This is the default event source for Windows event log. |
| 186 | */ |
| 187 | #define DEFAULT_EVENT_SOURCE "PostgreSQL" |
| 188 | |
| 189 | /* |
| 190 | * The random() function is expected to yield values between 0 and |
| 191 | * MAX_RANDOM_VALUE. Currently, all known implementations yield |
| 192 | * 0..2^31-1, so we just hardwire this constant. We could do a |
| 193 | * configure test if it proves to be necessary. CAUTION: Think not to |
| 194 | * replace this with RAND_MAX. RAND_MAX defines the maximum value of |
| 195 | * the older rand() function, which is often different from --- and |
| 196 | * considerably inferior to --- random(). |
| 197 | */ |
| 198 | #define MAX_RANDOM_VALUE PG_INT32_MAX |
| 199 | |
| 200 | /* |
| 201 | * On PPC machines, decide whether to use the mutex hint bit in LWARX |
| 202 | * instructions. Setting the hint bit will slightly improve spinlock |
| 203 | * performance on POWER6 and later machines, but does nothing before that, |
| 204 | * and will result in illegal-instruction failures on some pre-POWER4 |
| 205 | * machines. By default we use the hint bit when building for 64-bit PPC, |
| 206 | * which should be safe in nearly all cases. You might want to override |
| 207 | * this if you are building 32-bit code for a known-recent PPC machine. |
| 208 | */ |
| 209 | #ifdef HAVE_PPC_LWARX_MUTEX_HINT /* must have assembler support in any case */ |
| 210 | #if defined(__ppc64__) || defined(__powerpc64__) |
| 211 | #define USE_PPC_LWARX_MUTEX_HINT |
| 212 | #endif |
| 213 | #endif |
| 214 | |
| 215 | /* |
| 216 | * On PPC machines, decide whether to use LWSYNC instructions in place of |
| 217 | * ISYNC and SYNC. This provides slightly better performance, but will |
| 218 | * result in illegal-instruction failures on some pre-POWER4 machines. |
| 219 | * By default we use LWSYNC when building for 64-bit PPC, which should be |
| 220 | * safe in nearly all cases. |
| 221 | */ |
| 222 | #if defined(__ppc64__) || defined(__powerpc64__) |
| 223 | #define USE_PPC_LWSYNC |
| 224 | #endif |
| 225 | |
| 226 | /* |
| 227 | * Assumed cache line size. This doesn't affect correctness, but can be used |
| 228 | * for low-level optimizations. Currently, this is used to pad some data |
| 229 | * structures in xlog.c, to ensure that highly-contended fields are on |
| 230 | * different cache lines. Too small a value can hurt performance due to false |
| 231 | * sharing, while the only downside of too large a value is a few bytes of |
| 232 | * wasted memory. The default is 128, which should be large enough for all |
| 233 | * supported platforms. |
| 234 | */ |
| 235 | #define PG_CACHE_LINE_SIZE 128 |
| 236 | |
| 237 | /* |
| 238 | *------------------------------------------------------------------------ |
| 239 | * The following symbols are for enabling debugging code, not for |
| 240 | * controlling user-visible features or resource limits. |
| 241 | *------------------------------------------------------------------------ |
| 242 | */ |
| 243 | |
| 244 | /* |
| 245 | * Include Valgrind "client requests", mostly in the memory allocator, so |
| 246 | * Valgrind understands PostgreSQL memory contexts. This permits detecting |
| 247 | * memory errors that Valgrind would not detect on a vanilla build. See also |
| 248 | * src/tools/valgrind.supp. "make installcheck" runs 20-30x longer under |
| 249 | * Valgrind. Note that USE_VALGRIND slowed older versions of Valgrind by an |
| 250 | * additional order of magnitude; Valgrind 3.8.1 does not have this problem. |
| 251 | * The client requests fall in hot code paths, so USE_VALGRIND also slows |
| 252 | * native execution by a few percentage points. |
| 253 | * |
| 254 | * You should normally use MEMORY_CONTEXT_CHECKING with USE_VALGRIND; |
| 255 | * instrumentation of repalloc() is inferior without it. |
| 256 | */ |
| 257 | /* #define USE_VALGRIND */ |
| 258 | |
| 259 | /* |
| 260 | * Define this to cause pfree()'d memory to be cleared immediately, to |
| 261 | * facilitate catching bugs that refer to already-freed values. |
| 262 | * Right now, this gets defined automatically if --enable-cassert. |
| 263 | */ |
| 264 | #ifdef USE_ASSERT_CHECKING |
| 265 | #define CLOBBER_FREED_MEMORY |
| 266 | #endif |
| 267 | |
| 268 | /* |
| 269 | * Define this to check memory allocation errors (scribbling on more |
| 270 | * bytes than were allocated). Right now, this gets defined |
| 271 | * automatically if --enable-cassert or USE_VALGRIND. |
| 272 | */ |
| 273 | #if defined(USE_ASSERT_CHECKING) || defined(USE_VALGRIND) |
| 274 | #define MEMORY_CONTEXT_CHECKING |
| 275 | #endif |
| 276 | |
| 277 | /* |
| 278 | * Define this to cause palloc()'d memory to be filled with random data, to |
| 279 | * facilitate catching code that depends on the contents of uninitialized |
| 280 | * memory. Caution: this is horrendously expensive. |
| 281 | */ |
| 282 | /* #define RANDOMIZE_ALLOCATED_MEMORY */ |
| 283 | |
| 284 | /* |
| 285 | * Define this to force all parse and plan trees to be passed through |
| 286 | * copyObject(), to facilitate catching errors and omissions in |
| 287 | * copyObject(). |
| 288 | */ |
| 289 | /* #define COPY_PARSE_PLAN_TREES */ |
| 290 | |
| 291 | /* |
| 292 | * Define this to force all parse and plan trees to be passed through |
| 293 | * outfuncs.c/readfuncs.c, to facilitate catching errors and omissions in |
| 294 | * those modules. |
| 295 | */ |
| 296 | /* #define WRITE_READ_PARSE_PLAN_TREES */ |
| 297 | |
| 298 | /* |
| 299 | * Define this to force all raw parse trees for DML statements to be scanned |
| 300 | * by raw_expression_tree_walker(), to facilitate catching errors and |
| 301 | * omissions in that function. |
| 302 | */ |
| 303 | /* #define RAW_EXPRESSION_COVERAGE_TEST */ |
| 304 | |
| 305 | /* |
| 306 | * Enable debugging print statements for lock-related operations. |
| 307 | */ |
| 308 | /* #define LOCK_DEBUG */ |
| 309 | |
| 310 | /* |
| 311 | * Enable debugging print statements for WAL-related operations; see |
| 312 | * also the wal_debug GUC var. |
| 313 | */ |
| 314 | /* #define WAL_DEBUG */ |
| 315 | |
| 316 | /* |
| 317 | * Enable tracing of resource consumption during sort operations; |
| 318 | * see also the trace_sort GUC var. For 8.1 this is enabled by default. |
| 319 | */ |
| 320 | #define TRACE_SORT 1 |
| 321 | |
| 322 | /* |
| 323 | * Enable tracing of syncscan operations (see also the trace_syncscan GUC var). |
| 324 | */ |
| 325 | /* #define TRACE_SYNCSCAN */ |
| 326 | |
| 327 | /* |
| 328 | * Other debug #defines (documentation, anyone?) |
| 329 | */ |
| 330 | /* #define HEAPDEBUGALL */ |
| 331 | /* #define ACLDEBUG */ |
| 332 | |