PostgreSQL Source Code  git master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
miscadmin.h File Reference
#include "pgtime.h"
Include dependency graph for miscadmin.h:

Go to the source code of this file.

Macros

#define PG_BACKEND_VERSIONSTR   "postgres (PostgreSQL) " PG_VERSION "\n"
 
#define InvalidPid   (-1)
 
#define CHECK_FOR_INTERRUPTS()
 
#define HOLD_INTERRUPTS()   (InterruptHoldoffCount++)
 
#define RESUME_INTERRUPTS()
 
#define HOLD_CANCEL_INTERRUPTS()   (QueryCancelHoldoffCount++)
 
#define RESUME_CANCEL_INTERRUPTS()
 
#define START_CRIT_SECTION()   (CritSectionCount++)
 
#define END_CRIT_SECTION()
 
#define USE_POSTGRES_DATES   0
 
#define USE_ISO_DATES   1
 
#define USE_SQL_DATES   2
 
#define USE_GERMAN_DATES   3
 
#define USE_XSD_DATES   4
 
#define DATEORDER_YMD   0
 
#define DATEORDER_DMY   1
 
#define DATEORDER_MDY   2
 
#define INTSTYLE_POSTGRES   0
 
#define INTSTYLE_POSTGRES_VERBOSE   1
 
#define INTSTYLE_SQL_STANDARD   2
 
#define INTSTYLE_ISO_8601   3
 
#define MAXTZLEN   10 /* max TZ name len, not counting tr. null */
 
#define SECURITY_LOCAL_USERID_CHANGE   0x0001
 
#define SECURITY_RESTRICTED_OPERATION   0x0002
 
#define SECURITY_ROW_LEVEL_DISABLED   0x0004
 
#define IsBootstrapProcessingMode()   (Mode == BootstrapProcessing)
 
#define IsInitProcessingMode()   (Mode == InitProcessing)
 
#define IsNormalProcessingMode()   (Mode == NormalProcessing)
 
#define GetProcessingMode()   Mode
 
#define SetProcessingMode(mode)
 
#define AmBootstrapProcess()   (MyAuxProcType == BootstrapProcess)
 
#define AmStartupProcess()   (MyAuxProcType == StartupProcess)
 
#define AmBackgroundWriterProcess()   (MyAuxProcType == BgWriterProcess)
 
#define AmCheckpointerProcess()   (MyAuxProcType == CheckpointerProcess)
 
#define AmWalWriterProcess()   (MyAuxProcType == WalWriterProcess)
 
#define AmWalReceiverProcess()   (MyAuxProcType == WalReceiverProcess)
 
#define LOCK_FILE_LINE_PID   1
 
#define LOCK_FILE_LINE_DATA_DIR   2
 
#define LOCK_FILE_LINE_START_TIME   3
 
#define LOCK_FILE_LINE_PORT   4
 
#define LOCK_FILE_LINE_SOCKET_DIR   5
 
#define LOCK_FILE_LINE_LISTEN_ADDR   6
 
#define LOCK_FILE_LINE_SHMEM_KEY   7
 

Typedefs

typedef char * pg_stack_base_t
 
typedef enum ProcessingMode ProcessingMode
 

Enumerations

enum  ProcessingMode { BootstrapProcessing, InitProcessing, NormalProcessing }
 
enum  AuxProcType {
  NotAnAuxProcess = -1, CheckerProcess = 0, BootstrapProcess, StartupProcess,
  BgWriterProcess, CheckpointerProcess, WalWriterProcess, WalReceiverProcess,
  NUM_AUXPROCTYPES
}
 

Functions

void ProcessInterrupts (void)
 
pg_stack_base_t set_stack_base (void)
 
void restore_stack_base (pg_stack_base_t base)
 
void check_stack_depth (void)
 
void PreventCommandIfReadOnly (const char *cmdname)
 
void PreventCommandIfParallelMode (const char *cmdname)
 
void PreventCommandDuringRecovery (const char *cmdname)
 
int trace_recovery (int trace_level)
 
void InitPostmasterChild (void)
 
void InitStandaloneProcess (const char *argv0)
 
void SetDatabasePath (const char *path)
 
char * GetUserNameFromId (Oid roleid, bool noerr)
 
Oid GetUserId (void)
 
Oid GetOuterUserId (void)
 
Oid GetSessionUserId (void)
 
Oid GetAuthenticatedUserId (void)
 
void GetUserIdAndSecContext (Oid *userid, int *sec_context)
 
void SetUserIdAndSecContext (Oid userid, int sec_context)
 
bool InLocalUserIdChange (void)
 
bool InSecurityRestrictedOperation (void)
 
void GetUserIdAndContext (Oid *userid, bool *sec_def_context)
 
void SetUserIdAndContext (Oid userid, bool sec_def_context)
 
void InitializeSessionUserId (const char *rolename, Oid useroid)
 
void InitializeSessionUserIdStandalone (void)
 
void SetSessionAuthorization (Oid userid, bool is_superuser)
 
Oid GetCurrentRoleId (void)
 
void SetCurrentRoleId (Oid roleid, bool is_superuser)
 
void SetDataDir (const char *dir)
 
void ChangeToDataDir (void)
 
void SwitchToSharedLatch (void)
 
void SwitchBackToLocalLatch (void)
 
bool superuser (void)
 
bool superuser_arg (Oid roleid)
 
void pg_split_opts (char **argv, int *argcp, const char *optstr)
 
void InitializeMaxBackends (void)
 
void InitPostgres (const char *in_dbname, Oid dboid, const char *username, Oid useroid, char *out_dbname)
 
void BaseInit (void)
 
void CreateDataDirLockFile (bool amPostmaster)
 
void CreateSocketLockFile (const char *socketfile, bool amPostmaster, const char *socketDir)
 
void TouchSocketLockFiles (void)
 
void AddToDataDirLockFile (int target_line, const char *str)
 
void ValidatePgVersion (const char *path)
 
void process_shared_preload_libraries (void)
 
void process_session_preload_libraries (void)
 
void pg_bindtextdomain (const char *domain)
 
bool has_rolreplication (Oid roleid)
 
bool BackupInProgress (void)
 
void CancelBackup (void)
 

Variables

PGDLLIMPORT volatile bool InterruptPending
 
PGDLLIMPORT volatile bool QueryCancelPending
 
PGDLLIMPORT volatile bool ProcDiePending
 
volatile bool ClientConnectionLost
 
PGDLLIMPORT volatile uint32 InterruptHoldoffCount
 
PGDLLIMPORT volatile uint32 QueryCancelHoldoffCount
 
PGDLLIMPORT volatile uint32 CritSectionCount
 
pid_t PostmasterPid
 
bool IsPostmasterEnvironment
 
PGDLLIMPORT bool IsUnderPostmaster
 
bool IsBackgroundWorker
 
PGDLLIMPORT bool IsBinaryUpgrade
 
bool ExitOnAnyError
 
PGDLLIMPORT char * DataDir
 
PGDLLIMPORT int NBuffers
 
int MaxBackends
 
int MaxConnections
 
int max_worker_processes
 
PGDLLIMPORT int MyProcPid
 
PGDLLIMPORT pg_time_t MyStartTime
 
PGDLLIMPORT struct PortMyProcPort
 
PGDLLIMPORT struct LatchMyLatch
 
long MyCancelKey
 
int MyPMChildSlot
 
char OutputFileName []
 
PGDLLIMPORT char my_exec_path []
 
char pkglib_path []
 
PGDLLIMPORT Oid MyDatabaseId
 
PGDLLIMPORT Oid MyDatabaseTableSpace
 
PGDLLIMPORT int DateStyle
 
PGDLLIMPORT int DateOrder
 
PGDLLIMPORT int IntervalStyle
 
bool enableFsync
 
bool allowSystemTableMods
 
PGDLLIMPORT int work_mem
 
PGDLLIMPORT int maintenance_work_mem
 
int VacuumCostPageHit
 
int VacuumCostPageMiss
 
int VacuumCostPageDirty
 
int VacuumCostLimit
 
int VacuumCostDelay
 
int VacuumPageHit
 
int VacuumPageMiss
 
int VacuumPageDirty
 
int VacuumCostBalance
 
bool VacuumCostActive
 
int trace_recovery_messages
 
char * DatabasePath
 
ProcessingMode Mode
 
AuxProcType MyAuxProcType
 
bool IgnoreSystemIndexes
 
PGDLLIMPORT bool process_shared_preload_libraries_in_progress
 
char * session_preload_libraries_string
 
char * shared_preload_libraries_string
 
char * local_preload_libraries_string
 

Macro Definition Documentation

#define AmBackgroundWriterProcess ( )    (MyAuxProcType == BgWriterProcess)

Definition at line 399 of file miscadmin.h.

Referenced by ForwardFsyncRequest().

#define AmBootstrapProcess ( )    (MyAuxProcType == BootstrapProcess)

Definition at line 397 of file miscadmin.h.

#define AmCheckpointerProcess ( )    (MyAuxProcType == CheckpointerProcess)
#define AmStartupProcess ( )    (MyAuxProcType == StartupProcess)

Definition at line 398 of file miscadmin.h.

Referenced by HotStandbyActiveInReplay(), mdinit(), and TruncateMultiXact().

#define AmWalReceiverProcess ( )    (MyAuxProcType == WalReceiverProcess)

Definition at line 402 of file miscadmin.h.

Referenced by get_sync_bit().

#define AmWalWriterProcess ( )    (MyAuxProcType == WalWriterProcess)

Definition at line 401 of file miscadmin.h.

#define CHECK_FOR_INTERRUPTS ( )
Value:
do { \
} while(0)
PGDLLIMPORT volatile bool InterruptPending
Definition: globals.c:29
void ProcessInterrupts(void)
Definition: postgres.c:2844

Definition at line 96 of file miscadmin.h.

Referenced by _bt_buildadd(), _bt_steppage(), _bt_walk_left(), _hash_metapinit(), _hash_readnext(), _hash_readprev(), add_path(), analyze_rel(), ATRewriteTable(), backend_read_statsfile(), BipartiteMatch(), brin_evacuate_page(), brin_getinsertbuffer(), bringetbitmap(), brinGetTupleForHeapBlock(), brininsert(), brinsummarize(), btree_xlog_delete_get_latestRemovedXid(), calculate_database_size(), calculate_relation_size(), calculate_tablespace_size(), ClientAuthentication(), cluster_rel(), copy_file(), copy_heap_data(), copy_messages(), copy_relation_data(), copydir(), CopyFrom(), CopyTo(), count_nondeletable_pages(), CountOtherDBBackends(), db_dir_size(), DecodingContextFindStartpoint(), do_autovacuum(), do_pg_stop_backup(), errfinish(), exec_execute_message(), exec_parse_message(), exec_replication_command(), exec_simple_query(), exec_stmt(), exec_stmts(), ExecHashJoin(), ExecMakeTableFunctionResult(), ExecProcNode(), ExecScan(), fsm_vacuum_page(), get_query_def(), get_rule_expr(), get_setop_query(), GetMultiXactIdMembers(), GetNewOidWithIndex(), GetNewRelFileNode(), getNextNearest(), ginbuild(), ginBuildCallback(), gingetbitmap(), ginInsertCleanup(), gistgetbitmap(), gistgettuple(), gistProcessItup(), HandleFunctionRequest(), HandleParallelMessages(), heap_lock_updated_tuple_rec(), heap_multi_insert(), heapgetpage(), hypothetical_dense_rank_final(), hypothetical_rank_common(), ident_inet(), IndexBuildHeapRangeScan(), IndexCheckExclusion(), interactive_getc(), lazy_truncate_heap(), logical_read_local_xlog_page(), make_bounded_heap(), md5_crypt_verify(), mode_final(), mq_putmessage(), MultiExecBitmapIndexScan(), MultiExecProcNode(), numeric_fac(), pg_logical_slot_get_changes_guts(), pg_prewarm(), pg_sleep(), PGSemaphoreLock(), pgstat_collect_oids(), pgstat_get_backend_current_activity(), pgstat_heap(), pgstat_index(), pgstat_read_current_status(), pgstat_vacuum_stat(), pgstatindex_impl(), plperl_spi_prepare(), PortalRunMulti(), postgresAcquireSampleRowsFunc(), PostgresMain(), predicate_implied_by_simple_clause(), predicate_refuted_by_simple_clause(), ProcessClientReadInterrupt(), ProcessClientWriteInterrupt(), ProcessWalRcvInterrupts(), ProcSleep(), ProcWaitForSignal(), puttuple_common(), random_relative_prime(), RE_compile_and_cache(), RE_wchar_execute(), refresh_matview_datafill(), regexp_fixed_prefix(), replace_text(), replace_text_regexp(), replorigin_create(), RequestCheckpoint(), revmap_extend_and_get_blkno(), sendAuthRequest(), sendDir(), shm_mq_receive_bytes(), shm_mq_send_bytes(), shm_mq_wait_internal(), spgdoinsert(), spgWalk(), statapprox_heap(), storeQueryResult(), summarize_range(), tablesample_getnext(), test_shm_mq_pipelined(), text_to_array_internal(), throttle(), toast_save_datum(), tuplesort_heap_insert(), tuplesort_heap_siftup(), tuplesort_skiptuples(), tuplestore_skiptuples(), vacuum_delay_point(), vacuum_rel(), validate_index_heapscan(), wait_for_workers_to_become_ready(), wait_pid(), WaitForBackgroundWorkerShutdown(), WaitForBackgroundWorkerStartup(), WaitForParallelWorkersToFinish(), walkdir(), WalSndLoop(), WalSndWaitForWal(), and WalSndWriteData().

#define DATEORDER_DMY   1
#define DATEORDER_MDY   2

Definition at line 216 of file miscadmin.h.

Referenced by check_datestyle(), locale_date_order(), and setup_config().

#define DATEORDER_YMD   0

Definition at line 214 of file miscadmin.h.

Referenced by check_datestyle(), DecodeNumber(), locale_date_order(), and setup_config().

#define END_CRIT_SECTION ( )
Value:
do { \
} while(0)
#define Assert(condition)
Definition: c.h:648
PGDLLIMPORT volatile uint32 CritSectionCount
Definition: globals.c:35

Definition at line 131 of file miscadmin.h.

Referenced by _bt_delitems_delete(), _bt_delitems_vacuum(), _bt_getroot(), _bt_insertonpg(), _bt_mark_page_halfdead(), _bt_newroot(), _bt_split(), _bt_unlink_halfdead_page(), _hash_expandtable(), AbsorbFsyncRequests(), addLeafTuple(), AlterSequence(), brin_doinsert(), brin_doupdate(), brinbuildempty(), CreateCheckPoint(), CreateEndOfRecoveryRecord(), createPostingTree(), CreateSlotOnDisk(), do_setval(), doPickSplit(), EndPrepare(), fill_seq_with_data(), ginbuild(), ginbuildempty(), ginbulkdelete(), ginDeletePage(), ginHeapTupleFastInsert(), ginPlaceToPage(), ginUpdateStats(), ginVacuumPostingTreeLeaf(), gistbuild(), gistbuildempty(), gistbulkdelete(), gistplacetopage(), heap_abort_speculative(), heap_delete(), heap_finish_speculative(), heap_inplace_update(), heap_insert(), heap_lock_tuple(), heap_lock_updated_tuple_rec(), heap_multi_insert(), heap_page_prune(), heap_update(), lazy_scan_heap(), lazy_vacuum_page(), moveLeafs(), MultiXactIdCreateFromMembers(), nextval_internal(), PostPrepare_Locks(), RecordTransactionAbort(), RecordTransactionAbortPrepared(), RecordTransactionCommit(), RecordTransactionCommitPrepared(), ReplicationSlotDropAcquired(), RestoreSlotFromDisk(), revmap_physical_extend(), SaveSlotToPath(), shiftList(), SlruPhysicalWritePage(), spgAddNodeAction(), spgbuild(), spgSplitNodeAction(), UpdateFullPageWrites(), vacuumLeafPage(), vacuumLeafRoot(), vacuumRedirectAndPlaceholder(), visibilitymap_set(), write_relmap_file(), writeListPage(), XLogBackgroundFlush(), XLogFlush(), and XLogInsertRecord().

#define GetProcessingMode ( )    Mode

Definition at line 364 of file miscadmin.h.

#define HOLD_CANCEL_INTERRUPTS ( )    (QueryCancelHoldoffCount++)

Definition at line 121 of file miscadmin.h.

Referenced by CopyGetData(), and SocketBackend().

#define INTSTYLE_ISO_8601   3

Definition at line 231 of file miscadmin.h.

Referenced by EncodeInterval().

#define INTSTYLE_POSTGRES   0

Definition at line 228 of file miscadmin.h.

Referenced by EncodeInterval(), and set_transmission_modes().

#define INTSTYLE_POSTGRES_VERBOSE   1

Definition at line 229 of file miscadmin.h.

Referenced by DecodeInterval(), EncodeInterval(), and PGTYPESinterval_to_asc().

#define INTSTYLE_SQL_STANDARD   2

Definition at line 230 of file miscadmin.h.

Referenced by DecodeInterval(), and EncodeInterval().

#define IsInitProcessingMode ( )    (Mode == InitProcessing)
#define IsNormalProcessingMode ( )    (Mode == NormalProcessing)
#define LOCK_FILE_LINE_DATA_DIR   2

Definition at line 442 of file miscadmin.h.

#define LOCK_FILE_LINE_LISTEN_ADDR   6

Definition at line 446 of file miscadmin.h.

Referenced by PostmasterMain(), and test_postmaster_connection().

#define LOCK_FILE_LINE_PID   1

Definition at line 441 of file miscadmin.h.

Referenced by test_postmaster_connection().

#define LOCK_FILE_LINE_PORT   4

Definition at line 444 of file miscadmin.h.

Referenced by get_sock_dir(), and test_postmaster_connection().

#define LOCK_FILE_LINE_SHMEM_KEY   7

Definition at line 447 of file miscadmin.h.

Referenced by CreateLockFile(), and InternalIpcMemoryCreate().

#define LOCK_FILE_LINE_SOCKET_DIR   5

Definition at line 445 of file miscadmin.h.

Referenced by get_sock_dir(), PostmasterMain(), and test_postmaster_connection().

#define LOCK_FILE_LINE_START_TIME   3

Definition at line 443 of file miscadmin.h.

Referenced by test_postmaster_connection().

#define MAXTZLEN   10 /* max TZ name len, not counting tr. null */

Definition at line 235 of file miscadmin.h.

Referenced by abstime2tm(), and EncodeDateTime().

#define PG_BACKEND_VERSIONSTR   "postgres (PostgreSQL) " PG_VERSION "\n"

Definition at line 29 of file miscadmin.h.

Referenced by adjust_data_dir(), do_start(), getInstallationPaths(), and setup_bin_paths().

#define RESUME_CANCEL_INTERRUPTS ( )
Value:
do { \
} while(0)
PGDLLIMPORT volatile uint32 QueryCancelHoldoffCount
Definition: globals.c:34
#define Assert(condition)
Definition: c.h:648

Definition at line 123 of file miscadmin.h.

Referenced by CopyGetData(), and SocketBackend().

#define SECURITY_RESTRICTED_OPERATION   0x0002
#define SECURITY_ROW_LEVEL_DISABLED   0x0004

Definition at line 289 of file miscadmin.h.

Referenced by CreateCachedPlan(), get_row_security_policies(), and ri_PlanCheck().

#define SetProcessingMode (   mode)
#define START_CRIT_SECTION ( )    (CritSectionCount++)

Definition at line 129 of file miscadmin.h.

Referenced by _bt_delitems_delete(), _bt_delitems_vacuum(), _bt_getroot(), _bt_insertonpg(), _bt_mark_page_halfdead(), _bt_newroot(), _bt_split(), _bt_unlink_halfdead_page(), _hash_expandtable(), AbsorbFsyncRequests(), addLeafTuple(), AlterSequence(), brin_doinsert(), brin_doupdate(), brinbuildempty(), CreateCheckPoint(), CreateEndOfRecoveryRecord(), createPostingTree(), CreateSlotOnDisk(), dataPlaceToPageInternal(), dataPlaceToPageLeaf(), do_setval(), doPickSplit(), EndPrepare(), entryPlaceToPage(), fill_seq_with_data(), GetNewMultiXactId(), ginbuild(), ginbuildempty(), ginbulkdelete(), ginDeletePage(), ginHeapTupleFastInsert(), ginPlaceToPage(), ginUpdateStats(), ginVacuumPostingTreeLeaf(), gistbuild(), gistbuildempty(), gistbulkdelete(), gistplacetopage(), heap_abort_speculative(), heap_delete(), heap_finish_speculative(), heap_inplace_update(), heap_insert(), heap_lock_tuple(), heap_lock_updated_tuple_rec(), heap_multi_insert(), heap_page_prune(), heap_update(), lazy_scan_heap(), lazy_vacuum_page(), moveLeafs(), nextval_internal(), PostPrepare_Locks(), RecordTransactionAbort(), RecordTransactionAbortPrepared(), RecordTransactionCommit(), RecordTransactionCommitPrepared(), ReplicationSlotDropAcquired(), RestoreSlotFromDisk(), revmap_physical_extend(), SaveSlotToPath(), shiftList(), SlruPhysicalWritePage(), spgAddNodeAction(), spgbuild(), spgSplitNodeAction(), UpdateFullPageWrites(), vacuumLeafPage(), vacuumLeafRoot(), vacuumRedirectAndPlaceholder(), visibilitymap_set(), write_relmap_file(), writeListPage(), XLogBackgroundFlush(), XLogFlush(), and XLogInsertRecord().

#define USE_GERMAN_DATES   3

Definition at line 210 of file miscadmin.h.

Referenced by check_datestyle(), EncodeDateOnly(), and EncodeDateTime().

#define USE_ISO_DATES   1
#define USE_POSTGRES_DATES   0

Definition at line 207 of file miscadmin.h.

Referenced by check_datestyle(), EncodeDateOnly(), and EncodeDateTime().

#define USE_SQL_DATES   2

Definition at line 209 of file miscadmin.h.

Referenced by check_datestyle(), EncodeDateOnly(), and EncodeDateTime().

#define USE_XSD_DATES   4

Typedef Documentation

Definition at line 265 of file miscadmin.h.

Enumeration Type Documentation

Enumerator
NotAnAuxProcess 
CheckerProcess 
BootstrapProcess 
StartupProcess 
BgWriterProcess 
CheckpointerProcess 
WalWriterProcess 
WalReceiverProcess 
NUM_AUXPROCTYPES 

Definition at line 381 of file miscadmin.h.

Enumerator
BootstrapProcessing 
InitProcessing 
NormalProcessing 

Definition at line 351 of file miscadmin.h.

352 {
353  BootstrapProcessing, /* bootstrap creation of template database */
354  InitProcessing, /* initializing system */
355  NormalProcessing /* normal processing */
ProcessingMode
Definition: miscadmin.h:351

Function Documentation

void AddToDataDirLockFile ( int  target_line,
const char *  str 
)

Definition at line 1099 of file miscinit.c.

References close, DIRECTORY_LOCK_FILE, elog, ereport, errcode_for_file_access(), errmsg(), fd(), LOG, NULL, PG_BINARY, pg_fsync(), read, snprintf(), and write.

Referenced by InternalIpcMemoryCreate(), and PostmasterMain().

1100 {
1101  int fd;
1102  int len;
1103  int lineno;
1104  char *srcptr;
1105  char *destptr;
1106  char srcbuffer[BLCKSZ];
1107  char destbuffer[BLCKSZ];
1108 
1109  fd = open(DIRECTORY_LOCK_FILE, O_RDWR | PG_BINARY, 0);
1110  if (fd < 0)
1111  {
1112  ereport(LOG,
1114  errmsg("could not open file \"%s\": %m",
1116  return;
1117  }
1118  len = read(fd, srcbuffer, sizeof(srcbuffer) - 1);
1119  if (len < 0)
1120  {
1121  ereport(LOG,
1123  errmsg("could not read from file \"%s\": %m",
1125  close(fd);
1126  return;
1127  }
1128  srcbuffer[len] = '\0';
1129 
1130  /*
1131  * Advance over lines we are not supposed to rewrite, then copy them to
1132  * destbuffer.
1133  */
1134  srcptr = srcbuffer;
1135  for (lineno = 1; lineno < target_line; lineno++)
1136  {
1137  if ((srcptr = strchr(srcptr, '\n')) == NULL)
1138  {
1139  elog(LOG, "incomplete data in \"%s\": found only %d newlines while trying to add line %d",
1140  DIRECTORY_LOCK_FILE, lineno - 1, target_line);
1141  close(fd);
1142  return;
1143  }
1144  srcptr++;
1145  }
1146  memcpy(destbuffer, srcbuffer, srcptr - srcbuffer);
1147  destptr = destbuffer + (srcptr - srcbuffer);
1148 
1149  /*
1150  * Write or rewrite the target line.
1151  */
1152  snprintf(destptr, destbuffer + sizeof(destbuffer) - destptr, "%s\n", str);
1153  destptr += strlen(destptr);
1154 
1155  /*
1156  * If there are more lines in the old file, append them to destbuffer.
1157  */
1158  if ((srcptr = strchr(srcptr, '\n')) != NULL)
1159  {
1160  srcptr++;
1161  snprintf(destptr, destbuffer + sizeof(destbuffer) - destptr, "%s",
1162  srcptr);
1163  }
1164 
1165  /*
1166  * And rewrite the data. Since we write in a single kernel call, this
1167  * update should appear atomic to onlookers.
1168  */
1169  len = strlen(destbuffer);
1170  errno = 0;
1171  if (lseek(fd, (off_t) 0, SEEK_SET) != 0 ||
1172  (int) write(fd, destbuffer, len) != len)
1173  {
1174  /* if write didn't set errno, assume problem is no disk space */
1175  if (errno == 0)
1176  errno = ENOSPC;
1177  ereport(LOG,
1179  errmsg("could not write to file \"%s\": %m",
1181  close(fd);
1182  return;
1183  }
1184  if (pg_fsync(fd) != 0)
1185  {
1186  ereport(LOG,
1188  errmsg("could not write to file \"%s\": %m",
1190  }
1191  if (close(fd) != 0)
1192  {
1193  ereport(LOG,
1195  errmsg("could not write to file \"%s\": %m",
1197  }
1198 }
#define write(a, b, c)
Definition: win32.h:19
#define DIRECTORY_LOCK_FILE
Definition: miscinit.c:52
int snprintf(char *str, size_t count, const char *fmt,...) pg_attribute_printf(3
#define LOG
Definition: elog.h:26
static int fd(const char *x, int i)
Definition: preproc-init.c:105
#define PG_BINARY
Definition: c.h:1027
int errcode_for_file_access(void)
Definition: elog.c:592
#define ereport(elevel, rest)
Definition: elog.h:132
#define NULL
Definition: c.h:202
int errmsg(const char *fmt,...)
Definition: elog.c:791
int pg_fsync(int fd)
Definition: fd.c:316
#define elog
Definition: elog.h:228
#define close(a)
Definition: win32.h:17
#define read(a, b, c)
Definition: win32.h:18
bool BackupInProgress ( void  )

Definition at line 10833 of file xlog.c.

References BACKUP_LABEL_FILE.

Referenced by pg_is_in_backup(), and PostmasterStateMachine().

10834 {
10835  struct stat stat_buf;
10836 
10837  return (stat(BACKUP_LABEL_FILE, &stat_buf) == 0);
10838 }
struct stat stat_buf
Definition: pg_standby.c:101
#define BACKUP_LABEL_FILE
Definition: xlog.h:284
void BaseInit ( void  )

Definition at line 515 of file postinit.c.

References DebugFileOpen(), InitBufferPoolAccess(), InitCommunication(), InitFileAccess(), and smgrinit().

Referenced by AutoVacLauncherMain(), AutoVacWorkerMain(), AuxiliaryProcessMain(), PostgresMain(), and StartBackgroundWorker().

516 {
517  /*
518  * Attach to shared memory and semaphores, and initialize our
519  * input/output/debugging file descriptors.
520  */
522  DebugFileOpen();
523 
524  /* Do local initialization of file, storage and buffer managers */
525  InitFileAccess();
526  smgrinit();
528 }
static void InitCommunication(void)
Definition: postinit.c:407
void InitBufferPoolAccess(void)
Definition: bufmgr.c:2098
void DebugFileOpen(void)
Definition: elog.c:1838
void smgrinit(void)
Definition: smgr.c:100
void InitFileAccess(void)
Definition: fd.c:472
void CancelBackup ( void  )

Definition at line 10853 of file xlog.c.

References BACKUP_LABEL_FILE, BACKUP_LABEL_OLD, ereport, errcode_for_file_access(), errdetail(), errmsg(), LOG, TABLESPACE_MAP, TABLESPACE_MAP_OLD, unlink(), and WARNING.

Referenced by PostmasterStateMachine().

10854 {
10855  struct stat stat_buf;
10856 
10857  /* if the file is not there, return */
10858  if (stat(BACKUP_LABEL_FILE, &stat_buf) < 0)
10859  return;
10860 
10861  /* remove leftover file from previously canceled backup if it exists */
10863 
10864  if (rename(BACKUP_LABEL_FILE, BACKUP_LABEL_OLD) == 0)
10865  {
10866  ereport(LOG,
10867  (errmsg("online backup mode canceled"),
10868  errdetail("\"%s\" was renamed to \"%s\".",
10870  }
10871  else
10872  {
10873  ereport(WARNING,
10875  errmsg("online backup mode was not canceled"),
10876  errdetail("Could not rename \"%s\" to \"%s\": %m.",
10878  }
10879 
10880  /* if the tablespace_map file is not there, return */
10881  if (stat(TABLESPACE_MAP, &stat_buf) < 0)
10882  return;
10883 
10884  /* remove leftover file from previously canceled backup if it exists */
10886 
10887  if (rename(TABLESPACE_MAP, TABLESPACE_MAP_OLD) == 0)
10888  {
10889  ereport(LOG,
10890  (errmsg("online backup mode canceled"),
10891  errdetail("\"%s\" was renamed to \"%s\".",
10893  }
10894  else
10895  {
10896  ereport(WARNING,
10898  errmsg("online backup mode was not canceled"),
10899  errdetail("Could not rename \"%s\" to \"%s\": %m.",
10901  }
10902 }
#define LOG
Definition: elog.h:26
#define BACKUP_LABEL_OLD
Definition: xlog.h:285
#define TABLESPACE_MAP
Definition: xlog.h:287
struct stat stat_buf
Definition: pg_standby.c:101
int errdetail(const char *fmt,...)
Definition: elog.c:864
int errcode_for_file_access(void)
Definition: elog.c:592
int unlink(const char *filename)
#define ereport(elevel, rest)
Definition: elog.h:132
#define WARNING
Definition: elog.h:38
#define TABLESPACE_MAP_OLD
Definition: xlog.h:288
int errmsg(const char *fmt,...)
Definition: elog.c:791
#define BACKUP_LABEL_FILE
Definition: xlog.h:284
void ChangeToDataDir ( void  )

Definition at line 113 of file miscinit.c.

References AssertState, DataDir, ereport, errcode_for_file_access(), errmsg(), and FATAL.

Referenced by AuxiliaryProcessMain(), PostgresMain(), and PostmasterMain().

114 {
116 
117  if (chdir(DataDir) < 0)
118  ereport(FATAL,
120  errmsg("could not change directory to \"%s\": %m",
121  DataDir)));
122 }
#define AssertState(condition)
Definition: c.h:651
#define FATAL
Definition: elog.h:50
int errcode_for_file_access(void)
Definition: elog.c:592
#define ereport(elevel, rest)
Definition: elog.h:132
int errmsg(const char *fmt,...)
Definition: elog.c:791
char * DataDir
Definition: globals.c:58
void check_stack_depth ( void  )

Definition at line 3089 of file postgres.c.

References ereport, errcode(), errhint(), errmsg(), ERROR, max_stack_depth, max_stack_depth_bytes, NULL, and stack_base_ptr.

Referenced by addone(), clean_fakeval_intree(), clean_NOT_intree(), cntsize(), contains_required_value(), convertJsonbValue(), copyObject(), Cover(), dofindsubquery(), EventTriggerInvoke(), ExecInitExpr(), ExecMakeFunctionResult(), ExecMakeFunctionResultNoSets(), execute(), expression_tree_mutator(), expression_tree_walker(), fillQT(), findoprnd(), findoprnd_recurse(), flatten_grouping_sets(), freetree(), get_query_def(), get_rule_expr(), get_setop_query(), gistSplit(), hk_depth_search(), infix(), inline_set_returning_function(), JsonbDeepContains(), JumbleExpr(), makepol(), plainnode(), plperl_hash_from_tuple(), plperl_sv_to_datum(), QT2QTN(), QTNBinary(), QTNClearFlags(), QTNCopy(), QTNFree(), QTNodeCompare(), QTNSort(), QTNTernary(), raw_expression_tree_walker(), split_array(), transformExprRecurse(), transformSetOperationTree(), TS_execute(), TS_execute_ternary(), tsquery_opr_selec(), and tsquery_requires_match().

3090 {
3091  char stack_top_loc;
3092  long stack_depth;
3093 
3094  /*
3095  * Compute distance from reference point to my local variables
3096  */
3097  stack_depth = (long) (stack_base_ptr - &stack_top_loc);
3098 
3099  /*
3100  * Take abs value, since stacks grow up on some machines, down on others
3101  */
3102  if (stack_depth < 0)
3103  stack_depth = -stack_depth;
3104 
3105  /*
3106  * Trouble?
3107  *
3108  * The test on stack_base_ptr prevents us from erroring out if called
3109  * during process setup or in a non-backend process. Logically it should
3110  * be done first, but putting it here avoids wasting cycles during normal
3111  * cases.
3112  */
3113  if (stack_depth > max_stack_depth_bytes &&
3114  stack_base_ptr != NULL)
3115  {
3116  ereport(ERROR,
3117  (errcode(ERRCODE_STATEMENT_TOO_COMPLEX),
3118  errmsg("stack depth limit exceeded"),
3119  errhint("Increase the configuration parameter \"max_stack_depth\" (currently %dkB), "
3120  "after ensuring the platform's stack depth limit is adequate.",
3121  max_stack_depth)));
3122  }
3123 
3124  /*
3125  * On IA64 there is a separate "register" stack that requires its own
3126  * independent check. For this, we have to measure the change in the
3127  * "BSP" pointer from PostgresMain to here. Logic is just as above,
3128  * except that we know IA64's register stack grows up.
3129  *
3130  * Note we assume that the same max_stack_depth applies to both stacks.
3131  */
3132 #if defined(__ia64__) || defined(__ia64)
3133  stack_depth = (long) (ia64_get_bsp() - register_stack_base_ptr);
3134 
3135  if (stack_depth > max_stack_depth_bytes &&
3136  register_stack_base_ptr != NULL)
3137  {
3138  ereport(ERROR,
3139  (errcode(ERRCODE_STATEMENT_TOO_COMPLEX),
3140  errmsg("stack depth limit exceeded"),
3141  errhint("Increase the configuration parameter \"max_stack_depth\" (currently %dkB), "
3142  "after ensuring the platform's stack depth limit is adequate.",
3143  max_stack_depth)));
3144  }
3145 #endif /* IA64 */
3146 }
int errhint(const char *fmt,...)
Definition: elog.c:978
int errcode(int sqlerrcode)
Definition: elog.c:569
#define ERROR
Definition: elog.h:41
#define ereport(elevel, rest)
Definition: elog.h:132
int max_stack_depth
Definition: postgres.c:94
static long max_stack_depth_bytes
Definition: postgres.c:107
#define NULL
Definition: c.h:202
char * stack_base_ptr
Definition: postgres.c:115
int errmsg(const char *fmt,...)
Definition: elog.c:791
void CreateDataDirLockFile ( bool  amPostmaster)

Definition at line 1023 of file miscinit.c.

References CreateLockFile(), DataDir, and DIRECTORY_LOCK_FILE.

Referenced by AuxiliaryProcessMain(), PostgresMain(), and PostmasterMain().

1024 {
1025  CreateLockFile(DIRECTORY_LOCK_FILE, amPostmaster, "", true, DataDir);
1026 }
#define DIRECTORY_LOCK_FILE
Definition: miscinit.c:52
static void CreateLockFile(const char *filename, bool amPostmaster, const char *socketDir, bool isDDLock, const char *refName)
Definition: miscinit.c:722
char * DataDir
Definition: globals.c:58
void CreateSocketLockFile ( const char *  socketfile,
bool  amPostmaster,
const char *  socketDir 
)

Definition at line 1032 of file miscinit.c.

References CreateLockFile(), MAXPGPATH, and snprintf().

1034 {
1035  char lockfile[MAXPGPATH];
1036 
1037  snprintf(lockfile, sizeof(lockfile), "%s.lock", socketfile);
1038  CreateLockFile(lockfile, amPostmaster, socketDir, false, socketfile);
1039 }
int snprintf(char *str, size_t count, const char *fmt,...) pg_attribute_printf(3
static void CreateLockFile(const char *filename, bool amPostmaster, const char *socketDir, bool isDDLock, const char *refName)
Definition: miscinit.c:722
#define MAXPGPATH
Oid GetAuthenticatedUserId ( void  )

Definition at line 333 of file miscinit.c.

References AssertState, AuthenticatedUserId, and OidIsValid.

Referenced by InitializeParallelDSM().

334 {
336  return AuthenticatedUserId;
337 }
#define AssertState(condition)
Definition: c.h:651
#define OidIsValid(objectId)
Definition: c.h:511
static Oid AuthenticatedUserId
Definition: miscinit.c:153
Oid GetCurrentRoleId ( void  )

Definition at line 600 of file miscinit.c.

References InvalidOid, OuterUserId, and SetRoleIsActive.

Referenced by show_role().

601 {
602  if (SetRoleIsActive)
603  return OuterUserId;
604  else
605  return InvalidOid;
606 }
static Oid OuterUserId
Definition: miscinit.c:155
#define InvalidOid
Definition: postgres_ext.h:36
static bool SetRoleIsActive
Definition: miscinit.c:165
Oid GetOuterUserId ( void  )

Definition at line 285 of file miscinit.c.

References AssertState, OidIsValid, and OuterUserId.

Referenced by DropRole(), and RenameRole().

286 {
288  return OuterUserId;
289 }
#define AssertState(condition)
Definition: c.h:651
static Oid OuterUserId
Definition: miscinit.c:155
#define OidIsValid(objectId)
Definition: c.h:511
Oid GetSessionUserId ( void  )

Definition at line 308 of file miscinit.c.

References AssertState, OidIsValid, and SessionUserId.

Referenced by check_role(), DropRole(), get_rolespec_oid(), get_rolespec_tuple(), InitPostgres(), is_admin_of_role(), pgstat_bestart(), RenameRole(), and session_user().

309 {
311  return SessionUserId;
312 }
#define AssertState(condition)
Definition: c.h:651
static Oid SessionUserId
Definition: miscinit.c:154
#define OidIsValid(objectId)
Definition: c.h:511
Oid GetUserId ( void  )

Definition at line 274 of file miscinit.c.

References AssertState, CurrentUserId, and OidIsValid.

Referenced by AddRoleMems(), AggregateCreate(), AlterDatabase(), AlterDatabaseOwner(), AlterDatabaseSet(), AlterEventTrigger(), AlterEventTriggerOwner_internal(), AlterExtensionNamespace(), AlterForeignServer(), AlterForeignServerOwner_internal(), AlterFunction(), AlterObjectNamespace_internal(), AlterObjectOwner_internal(), AlterObjectRename_internal(), AlterOpFamilyAdd(), AlterRole(), AlterRoleSet(), AlterSchemaOwner_internal(), AlterSequence(), AlterTableMoveAll(), AlterTableSpaceOptions(), AlterTSConfiguration(), AlterTSDictionary(), AlterTypeNamespace_oid(), AlterTypeOwner(), analyze_rel(), ATExecAddColumn(), ATExecChangeOwner(), ATPrepAlterColumnType(), ATPrepSetStatistics(), ATPrepSetTableSpace(), ATSimplePermissions(), binary_upgrade_create_empty_extension(), BuildDescForRelation(), BuildIndexValueDescription(), calculate_database_size(), calculate_tablespace_size(), check_enable_rls(), check_permissions(), check_temp_tablespaces(), checkDomainOwner(), checkEnumOwner(), checkFkeyPermissions(), CheckFunctionValidatorAccess(), CheckMyDatabase(), cluster_rel(), CommentObject(), compile_plperl_function(), compile_pltcl_function(), compute_return_type(), CreateCast(), CreateConversionCommand(), createdb(), CreateEventTrigger(), CreateExtension(), CreateForeignDataWrapper(), CreateForeignServer(), CreateForeignTable(), CreateFunction(), CreateOpFamily(), CreateProceduralLanguage(), CreateRole(), CreateTableSpace(), CreateTransform(), CreateTrigger(), current_user(), currtid_byrelname(), currtid_byreloid(), currval_oid(), DefineAggregate(), DefineCollation(), DefineDomain(), DefineEnum(), DefineIndex(), DefineOpClass(), DefineOperator(), DefineOpFamily(), DefineQueryRewrite(), DefineRange(), DefineRelation(), DefineTSConfiguration(), DefineTSDictionary(), DefineType(), DelRoleMems(), do_setval(), dropdb(), DropOwnedObjects(), DropRole(), DropTableSpace(), EnableDisableRule(), ExecAlterDefaultPrivilegesStmt(), ExecAlterExtensionContentsStmt(), ExecAlterExtensionStmt(), ExecBuildSlotValueDescription(), ExecCheckRTEPerms(), ExecEvalArrayCoerceExpr(), ExecGrant_Attribute(), ExecGrant_Database(), ExecGrant_Fdw(), ExecGrant_ForeignServer(), ExecGrant_Function(), ExecGrant_Language(), ExecGrant_Largeobject(), ExecGrant_Namespace(), ExecGrant_Relation(), ExecGrant_Tablespace(), ExecGrant_Type(), ExecInitAgg(), ExecInitWindowAgg(), ExecSecLabelStmt(), ExecuteDoStmt(), ExecuteTruncate(), findRangeCanonicalFunction(), findRangeSubtypeDiffFunction(), FinishPreparedTransaction(), get_connect_string(), get_other_operator(), get_rel_from_relname(), get_rolespec_oid(), get_rolespec_tuple(), get_row_security_policies(), get_tables_to_cluster(), GrantRole(), HandleFunctionRequest(), has_any_column_privilege_id(), has_any_column_privilege_name(), has_column_privilege_id_attnum(), has_column_privilege_id_name(), has_column_privilege_name_attnum(), has_column_privilege_name_name(), has_database_privilege_id(), has_database_privilege_name(), has_foreign_data_wrapper_privilege_id(), has_foreign_data_wrapper_privilege_name(), has_function_privilege_id(), has_function_privilege_name(), has_language_privilege_id(), has_language_privilege_name(), has_schema_privilege_id(), has_schema_privilege_name(), has_sequence_privilege_id(), has_sequence_privilege_name(), has_server_privilege_id(), has_server_privilege_name(), has_table_privilege_id(), has_table_privilege_name(), has_tablespace_privilege_id(), has_tablespace_privilege_name(), has_type_privilege_id(), has_type_privilege_name(), have_createdb_privilege(), have_createrole_privilege(), ImportForeignSchema(), init_fcache(), InitializeSearchPath(), InitPostgres(), InitTempTableNamespace(), inline_function(), inline_set_returning_function(), insert_username(), interpret_function_parameter_list(), inv_create(), LargeObjectCreate(), lastval(), lo_get_fragment_internal(), lo_read(), lo_truncate_internal(), lo_unlink(), lo_write(), LockTableAclCheck(), lookup_agg_function(), LookupCreationNamespace(), LookupExplicitNamespace(), MergeAttributes(), movedb(), nextval_internal(), OperatorCreate(), OperatorShellMake(), pg_has_role_id(), pg_has_role_name(), pg_prewarm(), pg_sequence_parameters(), pg_signal_backend(), pg_start_backup(), pg_stat_get_activity(), pg_stat_get_backend_activity(), pg_stat_get_backend_activity_start(), pg_stat_get_backend_client_addr(), pg_stat_get_backend_client_port(), pg_stat_get_backend_start(), pg_stat_get_backend_waiting(), pg_stat_get_backend_xact_start(), pg_stat_statements_internal(), pg_stop_backup(), pgrowlocks(), pgss_store(), pgstat_get_backend_current_activity(), pltcl_fetch_interp(), postgresBeginForeignModify(), postgresBeginForeignScan(), postgresGetForeignRelSize(), postgresImportForeignSchema(), PrepareTempTablespaces(), PrepareTransaction(), RangeVarCallbackForAlterRelation(), RangeVarCallbackForDropRelation(), RangeVarCallbackForPolicy(), RangeVarCallbackForReindexIndex(), RangeVarCallbackForRenameRule(), RangeVarCallbackForRenameTrigger(), RangeVarCallbackOwnsRelation(), RangeVarCallbackOwnsTable(), RangeVarGetAndCheckCreationNamespace(), ReassignOwnedObjects(), recomputeNamespacePath(), ReindexMultipleTables(), RemoveObjects(), renameatt_check(), RenameDatabase(), RenameSchema(), RenameTableSpace(), RenameType(), RevalidateCachedQuery(), RI_Initial_Check(), ri_ReportViolation(), select_perl_context(), superuser(), timetravel(), transformTableLikeClause(), truncate_check_rel(), user_mapping_ddl_aclcheck(), and vacuum_rel().

275 {
277  return CurrentUserId;
278 }
#define AssertState(condition)
Definition: c.h:651
#define OidIsValid(objectId)
Definition: c.h:511
static Oid CurrentUserId
Definition: miscinit.c:156
void GetUserIdAndContext ( Oid userid,
bool sec_def_context 
)

Definition at line 412 of file miscinit.c.

References CurrentUserId, and InLocalUserIdChange().

413 {
414  *userid = CurrentUserId;
415  *sec_def_context = InLocalUserIdChange();
416 }
bool InLocalUserIdChange(void)
Definition: miscinit.c:390
static Oid CurrentUserId
Definition: miscinit.c:156
void GetUserIdAndSecContext ( Oid userid,
int *  sec_context 
)
char* GetUserNameFromId ( Oid  roleid,
bool  noerr 
)

Definition at line 656 of file miscinit.c.

References AUTHOID, ereport, errcode(), errmsg(), ERROR, GETSTRUCT, HeapTupleIsValid, NameStr, NULL, ObjectIdGetDatum, pstrdup(), ReleaseSysCache(), and SearchSysCache1.

Referenced by check_is_member_of_role(), current_user(), getObjectDescription(), getObjectIdentityParts(), insert_username(), regroleout(), session_user(), and timetravel().

657 {
658  HeapTuple tuple;
659  char *result;
660 
661  tuple = SearchSysCache1(AUTHOID, ObjectIdGetDatum(roleid));
662  if (!HeapTupleIsValid(tuple))
663  {
664  if (!noerr)
665  ereport(ERROR,
666  (errcode(ERRCODE_UNDEFINED_OBJECT),
667  errmsg("invalid role OID: %u", roleid)));
668  result = NULL;
669  }
670  else
671  {
672  result = pstrdup(NameStr(((Form_pg_authid) GETSTRUCT(tuple))->rolname));
673  ReleaseSysCache(tuple);
674  }
675  return result;
676 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:631
char * pstrdup(const char *in)
Definition: mcxt.c:1080
int errcode(int sqlerrcode)
Definition: elog.c:569
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:143
FormData_pg_authid * Form_pg_authid
Definition: pg_authid.h:72
#define ObjectIdGetDatum(X)
Definition: postgres.h:515
#define ERROR
Definition: elog.h:41
#define ereport(elevel, rest)
Definition: elog.h:132
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1012
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define NULL
Definition: c.h:202
int errmsg(const char *fmt,...)
Definition: elog.c:791
#define NameStr(name)
Definition: c.h:475
bool has_rolreplication ( Oid  roleid)

Definition at line 439 of file miscinit.c.

References AUTHOID, GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum, ReleaseSysCache(), and SearchSysCache1.

Referenced by check_permissions(), InitPostgres(), pg_start_backup(), and pg_stop_backup().

440 {
441  bool result = false;
442  HeapTuple utup;
443 
444  utup = SearchSysCache1(AUTHOID, ObjectIdGetDatum(roleid));
445  if (HeapTupleIsValid(utup))
446  {
447  result = ((Form_pg_authid) GETSTRUCT(utup))->rolreplication;
448  ReleaseSysCache(utup);
449  }
450  return result;
451 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:631
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:143
FormData_pg_authid * Form_pg_authid
Definition: pg_authid.h:72
#define ObjectIdGetDatum(X)
Definition: postgres.h:515
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1012
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
void InitializeMaxBackends ( void  )

Definition at line 493 of file postinit.c.

References Assert, autovacuum_max_workers, elog, ERROR, MAX_BACKENDS, max_worker_processes, MaxBackends, and MaxConnections.

Referenced by AuxiliaryProcessMain(), PostgresMain(), and PostmasterMain().

494 {
495  Assert(MaxBackends == 0);
496 
497  /* the extra unit accounts for the autovacuum launcher */
500 
501  /* internal error because the values were all checked previously */
503  elog(ERROR, "too many backends configured");
504 }
#define ERROR
Definition: elog.h:41
#define MAX_BACKENDS
Definition: postmaster.h:72
int MaxBackends
Definition: globals.c:121
int MaxConnections
Definition: globals.c:119
int autovacuum_max_workers
Definition: autovacuum.c:111
#define Assert(condition)
Definition: c.h:648
int max_worker_processes
Definition: globals.c:120
#define elog
Definition: elog.h:228
void InitializeSessionUserId ( const char *  rolename,
Oid  useroid 
)

Definition at line 457 of file miscinit.c.

References AssertState, AuthenticatedUserId, AuthenticatedUserIsSuperuser, AUTHNAME, AUTHOID, CountUserBackends(), ereport, errcode(), errmsg(), FATAL, GETSTRUCT, HeapTupleGetOid, HeapTupleIsValid, IsBootstrapProcessingMode, IsUnderPostmaster, MyProc, NULL, ObjectIdGetDatum, OidIsValid, PGC_BACKEND, PGC_INTERNAL, PGC_S_OVERRIDE, PointerGetDatum, ReleaseSysCache(), PGPROC::roleId, SearchSysCache1, SetConfigOption(), and SetSessionUserId().

Referenced by InitPostgres().

458 {
459  HeapTuple roleTup;
460  Form_pg_authid rform;
461 
462  /*
463  * Don't do scans if we're bootstrapping, none of the system catalogs
464  * exist yet, and they should be owned by postgres anyway.
465  */
467 
468  /* call only once */
470 
471  if (rolename != NULL)
472  roleTup = SearchSysCache1(AUTHNAME, PointerGetDatum(rolename));
473  else
474  roleTup = SearchSysCache1(AUTHOID, ObjectIdGetDatum(roleid));
475  if (!HeapTupleIsValid(roleTup))
476  ereport(FATAL,
477  (errcode(ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION),
478  errmsg("role \"%s\" does not exist", rolename)));
479 
480  rform = (Form_pg_authid) GETSTRUCT(roleTup);
481  roleid = HeapTupleGetOid(roleTup);
482 
483  AuthenticatedUserId = roleid;
484  AuthenticatedUserIsSuperuser = rform->rolsuper;
485 
486  /* This sets OuterUserId/CurrentUserId too */
488 
489  /* Also mark our PGPROC entry with the authenticated user id */
490  /* (We assume this is an atomic store so no lock is needed) */
491  MyProc->roleId = roleid;
492 
493  /*
494  * These next checks are not enforced when in standalone mode, so that
495  * there is a way to recover from sillinesses like "UPDATE pg_authid SET
496  * rolcanlogin = false;".
497  */
498  if (IsUnderPostmaster)
499  {
500  /*
501  * Is role allowed to login at all?
502  */
503  if (!rform->rolcanlogin)
504  ereport(FATAL,
505  (errcode(ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION),
506  errmsg("role \"%s\" is not permitted to log in",
507  rolename)));
508 
509  /*
510  * Check connection limit for this role.
511  *
512  * There is a race condition here --- we create our PGPROC before
513  * checking for other PGPROCs. If two backends did this at about the
514  * same time, they might both think they were over the limit, while
515  * ideally one should succeed and one fail. Getting that to work
516  * exactly seems more trouble than it is worth, however; instead we
517  * just document that the connection limit is approximate.
518  */
519  if (rform->rolconnlimit >= 0 &&
521  CountUserBackends(roleid) > rform->rolconnlimit)
522  ereport(FATAL,
523  (errcode(ERRCODE_TOO_MANY_CONNECTIONS),
524  errmsg("too many connections for role \"%s\"",
525  rolename)));
526  }
527 
528  /* Record username and superuser status as GUC settings too */
529  SetConfigOption("session_authorization", rolename,
531  SetConfigOption("is_superuser",
532  AuthenticatedUserIsSuperuser ? "on" : "off",
534 
535  ReleaseSysCache(roleTup);
536 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:631
#define AssertState(condition)
Definition: c.h:651
PGPROC * MyProc
Definition: proc.c:63
#define PointerGetDatum(X)
Definition: postgres.h:564
Oid roleId
Definition: proc.h:96
int errcode(int sqlerrcode)
Definition: elog.c:569
#define OidIsValid(objectId)
Definition: c.h:511
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:143
FormData_pg_authid * Form_pg_authid
Definition: pg_authid.h:72
#define ObjectIdGetDatum(X)
Definition: postgres.h:515
#define FATAL
Definition: elog.h:50
void SetConfigOption(const char *name, const char *value, GucContext context, GucSource source)
Definition: guc.c:6405
bool IsUnderPostmaster
Definition: globals.c:97
static bool AuthenticatedUserIsSuperuser
Definition: miscinit.c:159
#define ereport(elevel, rest)
Definition: elog.h:132
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1012
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define NULL
Definition: c.h:202
int CountUserBackends(Oid roleid)
Definition: procarray.c:2601
#define IsBootstrapProcessingMode()
Definition: miscadmin.h:360
int errmsg(const char *fmt,...)
Definition: elog.c:791
#define HeapTupleGetOid(tuple)
Definition: htup_details.h:670
static void SetSessionUserId(Oid userid, bool is_superuser)
Definition: miscinit.c:316
static Oid AuthenticatedUserId
Definition: miscinit.c:153
void InitializeSessionUserIdStandalone ( void  )

Definition at line 543 of file miscinit.c.

References AssertState, AuthenticatedUserId, AuthenticatedUserIsSuperuser, BOOTSTRAP_SUPERUSERID, IsAutoVacuumWorkerProcess(), IsBackgroundWorker, IsUnderPostmaster, OidIsValid, and SetSessionUserId().

Referenced by InitPostgres().

544 {
545  /*
546  * This function should only be called in single-user mode, in autovacuum
547  * workers, and in background workers.
548  */
550 
551  /* call only once */
553 
556 
558 }
#define AssertState(condition)
Definition: c.h:651
#define OidIsValid(objectId)
Definition: c.h:511
bool IsBackgroundWorker
Definition: globals.c:99
bool IsUnderPostmaster
Definition: globals.c:97
static bool AuthenticatedUserIsSuperuser
Definition: miscinit.c:159
bool IsAutoVacuumWorkerProcess(void)
Definition: autovacuum.c:2893
#define BOOTSTRAP_SUPERUSERID
Definition: pg_authid.h:100
static void SetSessionUserId(Oid userid, bool is_superuser)
Definition: miscinit.c:316
static Oid AuthenticatedUserId
Definition: miscinit.c:153
void InitPostgres ( const char *  in_dbname,
Oid  dboid,
const char *  username,
Oid  useroid,
char *  out_dbname 
)

Definition at line 556 of file postinit.c.

References am_db_walsender, am_walsender, Assert, before_shmem_exit(), CAC_WAITBACKUP, Port::canAcceptConnections, CheckDeadLockAlert(), CheckMyDatabase(), CommitTransactionCommand(), PGPROC::databaseId, DatabaseRelationId, dbname, DEADLOCK_TIMEOUT, DEBUG3, DEFAULTTABLESPACE_OID, elog, EnablePortalManager(), ereport, errcode(), errcode_for_file_access(), errdetail(), errhint(), errmsg(), FATAL, GetDatabasePath(), GetDatabaseTuple(), GetDatabaseTupleByOid(), GetSessionUserId(), GETSTRUCT, GetTransactionSnapshot(), GetUserId(), has_rolreplication(), HaveNFreeProcs(), HeapTupleGetOid, HeapTupleIsValid, InitBufferPoolBackend(), InitCatalogCache(), initialize_acl(), InitializeClientEncoding(), InitializeSearchPath(), InitializeSessionUserId(), InitializeSessionUserIdStandalone(), InitPlanCache(), InitProcessPhase2(), InvalidateCatalogSnapshot(), InvalidBackendId, IsAutoVacuumLauncherProcess(), IsAutoVacuumWorkerProcess(), IsBackgroundWorker, IsBinaryUpgrade, IsBootstrapProcessingMode, IsUnderPostmaster, LOCK_TIMEOUT, LockSharedObject(), LockTimeoutHandler(), MaxBackends, MyBackendId, MyDatabaseId, MyDatabaseTableSpace, MyProc, MyProcPort, NAMEDATALEN, NameStr, NULL, OidIsValid, on_shmem_exit(), PerformAuthentication(), pg_usleep(), pgstat_bestart(), pgstat_initialize(), PostAuthDelay, process_settings(), process_startup_options(), ProcSignalInit(), RecoveryInProgress(), RegisterTimeout(), RelationCacheInitialize(), RelationCacheInitializePhase2(), RelationCacheInitializePhase3(), ReservedBackends, RowExclusiveLock, SetCurrentStatementStartTimestamp(), SetDatabasePath(), SharedInvalBackendInit(), ShutdownPostgres(), ShutdownXLOG(), StartTransactionCommand(), StartupXLOG(), STATEMENT_TIMEOUT, StatementTimeoutHandler(), strlcpy(), superuser(), TemplateDbOid, ThereIsAtLeastOneRole(), ValidatePgVersion(), WARNING, XACT_READ_COMMITTED, and XactIsoLevel.

Referenced by AutoVacLauncherMain(), AutoVacWorkerMain(), BackgroundWorkerInitializeConnection(), BackgroundWorkerInitializeConnectionByOid(), BootstrapModeMain(), and PostgresMain().

558 {
559  bool bootstrap = IsBootstrapProcessingMode();
560  bool am_superuser;
561  char *fullpath;
562  char dbname[NAMEDATALEN];
563 
564  elog(DEBUG3, "InitPostgres");
565 
566  /*
567  * Add my PGPROC struct to the ProcArray.
568  *
569  * Once I have done this, I am visible to other backends!
570  */
572 
573  /*
574  * Initialize my entry in the shared-invalidation manager's array of
575  * per-backend data.
576  *
577  * Sets up MyBackendId, a unique backend identifier.
578  */
580 
581  SharedInvalBackendInit(false);
582 
583  if (MyBackendId > MaxBackends || MyBackendId <= 0)
584  elog(FATAL, "bad backend ID: %d", MyBackendId);
585 
586  /* Now that we have a BackendId, we can participate in ProcSignal */
588 
589  /*
590  * Also set up timeout handlers needed for backend operation. We need
591  * these in every case except bootstrap.
592  */
593  if (!bootstrap)
594  {
598  }
599 
600  /*
601  * bufmgr needs another initialization call too
602  */
604 
605  /*
606  * Initialize local process's access to XLOG.
607  */
608  if (IsUnderPostmaster)
609  {
610  /*
611  * The postmaster already started the XLOG machinery, but we need to
612  * call InitXLOGAccess(), if the system isn't in hot-standby mode.
613  * This is handled by calling RecoveryInProgress and ignoring the
614  * result.
615  */
616  (void) RecoveryInProgress();
617  }
618  else
619  {
620  /*
621  * We are either a bootstrap process or a standalone backend. Either
622  * way, start up the XLOG machinery, and register to have it closed
623  * down at exit.
624  */
625  StartupXLOG();
627  }
628 
629  /*
630  * Initialize the relation cache and the system catalog caches. Note that
631  * no catalog access happens here; we only set up the hashtable structure.
632  * We must do this before starting a transaction because transaction abort
633  * would try to touch these hashtables.
634  */
637  InitPlanCache();
638 
639  /* Initialize portal manager */
641 
642  /* Initialize stats collection --- must happen before first xact */
643  if (!bootstrap)
645 
646  /*
647  * Load relcache entries for the shared system catalogs. This must create
648  * at least entries for pg_database and catalogs used for authentication.
649  */
651 
652  /*
653  * Set up process-exit callback to do pre-shutdown cleanup. This is the
654  * first before_shmem_exit callback we register; thus, this will be the
655  * last thing we do before low-level modules like the buffer manager begin
656  * to close down. We need to have this in place before we begin our first
657  * transaction --- if we fail during the initialization transaction, as is
658  * entirely possible, we need the AbortTransaction call to clean up.
659  */
661 
662  /* The autovacuum launcher is done here */
664  return;
665 
666  /*
667  * Start a new transaction here before first access to db, and get a
668  * snapshot. We don't have a use for the snapshot itself, but we're
669  * interested in the secondary effect that it sets RecentGlobalXmin. (This
670  * is critical for anything that reads heap pages, because HOT may decide
671  * to prune them even if the process doesn't attempt to modify any
672  * tuples.)
673  */
674  if (!bootstrap)
675  {
676  /* statement_timestamp must be set for timeouts to work correctly */
679 
680  /*
681  * transaction_isolation will have been set to the default by the
682  * above. If the default is "serializable", and we are in hot
683  * standby, we will fail if we don't change it to something lower.
684  * Fortunately, "read committed" is plenty good enough.
685  */
687 
688  (void) GetTransactionSnapshot();
689  }
690 
691  /*
692  * Perform client authentication if necessary, then figure out our
693  * postgres user ID, and see if we are a superuser.
694  *
695  * In standalone mode and in autovacuum worker processes, we use a fixed
696  * ID, otherwise we figure it out from the authenticated user name.
697  */
698  if (bootstrap || IsAutoVacuumWorkerProcess())
699  {
701  am_superuser = true;
702  }
703  else if (!IsUnderPostmaster)
704  {
706  am_superuser = true;
707  if (!ThereIsAtLeastOneRole())
709  (errcode(ERRCODE_UNDEFINED_OBJECT),
710  errmsg("no roles are defined in this database system"),
711  errhint("You should immediately run CREATE USER \"%s\" SUPERUSER;.",
712  username != NULL ? username : "postgres")));
713  }
714  else if (IsBackgroundWorker)
715  {
716  if (username == NULL && !OidIsValid(useroid))
717  {
719  am_superuser = true;
720  }
721  else
722  {
724  am_superuser = superuser();
725  }
726  }
727  else
728  {
729  /* normal multiuser case */
730  Assert(MyProcPort != NULL);
733  am_superuser = superuser();
734  }
735 
736  /*
737  * If we're trying to shut down, only superusers can connect, and new
738  * replication connections are not allowed.
739  */
740  if ((!am_superuser || am_walsender) &&
741  MyProcPort != NULL &&
743  {
744  if (am_walsender)
745  ereport(FATAL,
746  (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
747  errmsg("new replication connections are not allowed during database shutdown")));
748  else
749  ereport(FATAL,
750  (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
751  errmsg("must be superuser to connect during database shutdown")));
752  }
753 
754  /*
755  * Binary upgrades only allowed super-user connections
756  */
757  if (IsBinaryUpgrade && !am_superuser)
758  {
759  ereport(FATAL,
760  (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
761  errmsg("must be superuser to connect in binary upgrade mode")));
762  }
763 
764  /*
765  * The last few connections slots are reserved for superusers. Although
766  * replication connections currently require superuser privileges, we
767  * don't allow them to consume the reserved slots, which are intended for
768  * interactive use.
769  */
770  if ((!am_superuser || am_walsender) &&
771  ReservedBackends > 0 &&
773  ereport(FATAL,
774  (errcode(ERRCODE_TOO_MANY_CONNECTIONS),
775  errmsg("remaining connection slots are reserved for non-replication superuser connections")));
776 
777  /* Check replication permissions needed for walsender processes. */
778  if (am_walsender)
779  {
780  Assert(!bootstrap);
781 
782  if (!superuser() && !has_rolreplication(GetUserId()))
783  ereport(FATAL,
784  (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
785  errmsg("must be superuser or replication role to start walsender")));
786  }
787 
788  /*
789  * If this is a plain walsender only supporting physical replication, we
790  * don't want to connect to any particular database. Just finish the
791  * backend startup by processing any options from the startup packet, and
792  * we're done.
793  */
795  {
796  /* process any options passed in the startup packet */
797  if (MyProcPort != NULL)
798  process_startup_options(MyProcPort, am_superuser);
799 
800  /* Apply PostAuthDelay as soon as we've read all options */
801  if (PostAuthDelay > 0)
802  pg_usleep(PostAuthDelay * 1000000L);
803 
804  /* initialize client encoding */
806 
807  /* report this backend in the PgBackendStatus array */
808  pgstat_bestart();
809 
810  /* close the transaction we started above */
812 
813  return;
814  }
815 
816  /*
817  * Set up the global variables holding database id and default tablespace.
818  * But note we won't actually try to touch the database just yet.
819  *
820  * We take a shortcut in the bootstrap case, otherwise we have to look up
821  * the db's entry in pg_database.
822  */
823  if (bootstrap)
824  {
827  }
828  else if (in_dbname != NULL)
829  {
830  HeapTuple tuple;
831  Form_pg_database dbform;
832 
833  tuple = GetDatabaseTuple(in_dbname);
834  if (!HeapTupleIsValid(tuple))
835  ereport(FATAL,
836  (errcode(ERRCODE_UNDEFINED_DATABASE),
837  errmsg("database \"%s\" does not exist", in_dbname)));
838  dbform = (Form_pg_database) GETSTRUCT(tuple);
839  MyDatabaseId = HeapTupleGetOid(tuple);
840  MyDatabaseTableSpace = dbform->dattablespace;
841  /* take database name from the caller, just for paranoia */
842  strlcpy(dbname, in_dbname, sizeof(dbname));
843  }
844  else if (OidIsValid(dboid))
845  {
846  /* caller specified database by OID */
847  HeapTuple tuple;
848  Form_pg_database dbform;
849 
850  tuple = GetDatabaseTupleByOid(dboid);
851  if (!HeapTupleIsValid(tuple))
852  ereport(FATAL,
853  (errcode(ERRCODE_UNDEFINED_DATABASE),
854  errmsg("database %u does not exist", dboid)));
855  dbform = (Form_pg_database) GETSTRUCT(tuple);
856  MyDatabaseId = HeapTupleGetOid(tuple);
857  MyDatabaseTableSpace = dbform->dattablespace;
858  Assert(MyDatabaseId == dboid);
859  strlcpy(dbname, NameStr(dbform->datname), sizeof(dbname));
860  /* pass the database name back to the caller */
861  if (out_dbname)
862  strcpy(out_dbname, dbname);
863  }
864  else
865  {
866  /*
867  * If this is a background worker not bound to any particular
868  * database, we're done now. Everything that follows only makes
869  * sense if we are bound to a specific database. We do need to
870  * close the transaction we started before returning.
871  */
872  if (!bootstrap)
874  return;
875  }
876 
877  /*
878  * Now, take a writer's lock on the database we are trying to connect to.
879  * If there is a concurrently running DROP DATABASE on that database, this
880  * will block us until it finishes (and has committed its update of
881  * pg_database).
882  *
883  * Note that the lock is not held long, only until the end of this startup
884  * transaction. This is OK since we will advertise our use of the
885  * database in the ProcArray before dropping the lock (in fact, that's the
886  * next thing to do). Anyone trying a DROP DATABASE after this point will
887  * see us in the array once they have the lock. Ordering is important for
888  * this because we don't want to advertise ourselves as being in this
889  * database until we have the lock; otherwise we create what amounts to a
890  * deadlock with CountOtherDBBackends().
891  *
892  * Note: use of RowExclusiveLock here is reasonable because we envision
893  * our session as being a concurrent writer of the database. If we had a
894  * way of declaring a session as being guaranteed-read-only, we could use
895  * AccessShareLock for such sessions and thereby not conflict against
896  * CREATE DATABASE.
897  */
898  if (!bootstrap)
901 
902  /*
903  * Now we can mark our PGPROC entry with the database ID.
904  *
905  * We assume this is an atomic store so no lock is needed; though actually
906  * things would work fine even if it weren't atomic. Anyone searching the
907  * ProcArray for this database's ID should hold the database lock, so they
908  * would not be executing concurrently with this store. A process looking
909  * for another database's ID could in theory see a chance match if it read
910  * a partially-updated databaseId value; but as long as all such searches
911  * wait and retry, as in CountOtherDBBackends(), they will certainly see
912  * the correct value on their next try.
913  */
915 
916  /*
917  * We established a catalog snapshot while reading pg_authid and/or
918  * pg_database; but until we have set up MyDatabaseId, we won't react to
919  * incoming sinval messages for unshared catalogs, so we won't realize it
920  * if the snapshot has been invalidated. Assume it's no good anymore.
921  */
923 
924  /*
925  * Recheck pg_database to make sure the target database hasn't gone away.
926  * If there was a concurrent DROP DATABASE, this ensures we will die
927  * cleanly without creating a mess.
928  */
929  if (!bootstrap)
930  {
931  HeapTuple tuple;
932 
933  tuple = GetDatabaseTuple(dbname);
934  if (!HeapTupleIsValid(tuple) ||
935  MyDatabaseId != HeapTupleGetOid(tuple) ||
936  MyDatabaseTableSpace != ((Form_pg_database) GETSTRUCT(tuple))->dattablespace)
937  ereport(FATAL,
938  (errcode(ERRCODE_UNDEFINED_DATABASE),
939  errmsg("database \"%s\" does not exist", dbname),
940  errdetail("It seems to have just been dropped or renamed.")));
941  }
942 
943  /*
944  * Now we should be able to access the database directory safely. Verify
945  * it's there and looks reasonable.
946  */
948 
949  if (!bootstrap)
950  {
951  if (access(fullpath, F_OK) == -1)
952  {
953  if (errno == ENOENT)
954  ereport(FATAL,
955  (errcode(ERRCODE_UNDEFINED_DATABASE),
956  errmsg("database \"%s\" does not exist",
957  dbname),
958  errdetail("The database subdirectory \"%s\" is missing.",
959  fullpath)));
960  else
961  ereport(FATAL,
963  errmsg("could not access directory \"%s\": %m",
964  fullpath)));
965  }
966 
967  ValidatePgVersion(fullpath);
968  }
969 
970  SetDatabasePath(fullpath);
971 
972  /*
973  * It's now possible to do real access to the system catalogs.
974  *
975  * Load relcache entries for the system catalogs. This must create at
976  * least the minimum set of "nailed-in" cache entries.
977  */
979 
980  /* set up ACL framework (so CheckMyDatabase can check permissions) */
981  initialize_acl();
982 
983  /*
984  * Re-read the pg_database row for our database, check permissions and set
985  * up database-specific GUC settings. We can't do this until all the
986  * database-access infrastructure is up. (Also, it wants to know if the
987  * user is a superuser, so the above stuff has to happen first.)
988  */
989  if (!bootstrap)
990  CheckMyDatabase(dbname, am_superuser);
991 
992  /*
993  * Now process any command-line switches and any additional GUC variable
994  * settings passed in the startup packet. We couldn't do this before
995  * because we didn't know if client is a superuser.
996  */
997  if (MyProcPort != NULL)
998  process_startup_options(MyProcPort, am_superuser);
999 
1000  /* Process pg_db_role_setting options */
1002 
1003  /* Apply PostAuthDelay as soon as we've read all options */
1004  if (PostAuthDelay > 0)
1005  pg_usleep(PostAuthDelay * 1000000L);
1006 
1007  /*
1008  * Initialize various default states that can't be set up until we've
1009  * selected the active user and gotten the right GUC settings.
1010  */
1011 
1012  /* set default namespace search path */
1014 
1015  /* initialize client encoding */
1017 
1018  /* report this backend in the PgBackendStatus array */
1019  if (!bootstrap)
1020  pgstat_bestart();
1021 
1022  /* close the transaction we started above */
1023  if (!bootstrap)
1025 }
int errhint(const char *fmt,...)
Definition: elog.c:978
BackendId MyBackendId
Definition: globals.c:71
#define GETSTRUCT(TUP)
Definition: htup_details.h:631
struct Port * MyProcPort
Definition: globals.c:39
CAC_state canAcceptConnections
Definition: libpq-be.h:136
void SharedInvalBackendInit(bool sendOnly)
Definition: sinvaladt.c:258
#define DEBUG3
Definition: elog.h:23
Oid GetUserId(void)
Definition: miscinit.c:274
FormData_pg_database * Form_pg_database
Definition: pg_database.h:57
PGPROC * MyProc
Definition: proc.c:63
static HeapTuple GetDatabaseTuple(const char *dbname)
Definition: postinit.c:93
#define DatabaseRelationId
Definition: pg_database.h:29
void CommitTransactionCommand(void)
Definition: xact.c:2707
void ValidatePgVersion(const char *path)
Definition: miscinit.c:1213
void RelationCacheInitializePhase2(void)
Definition: relcache.c:3172
static void PerformAuthentication(Port *port)
Definition: postinit.c:182
static void LockTimeoutHandler(void)
Definition: postinit.c:1170
int errcode(int sqlerrcode)
Definition: elog.c:569
bool superuser(void)
Definition: superuser.c:47
static void CheckMyDatabase(const char *name, bool am_superuser)
Definition: postinit.c:286
void initialize_acl(void)
Definition: acl.c:4610
bool RecoveryInProgress(void)
Definition: xlog.c:7473
Snapshot GetTransactionSnapshot(void)
Definition: snapmgr.c:187
#define OidIsValid(objectId)
Definition: c.h:511
Oid GetSessionUserId(void)
Definition: miscinit.c:308
bool HaveNFreeProcs(int n)
Definition: proc.c:612
bool IsBinaryUpgrade
Definition: globals.c:98
Oid MyDatabaseTableSpace
Definition: globals.c:75
bool IsBackgroundWorker
Definition: globals.c:99
void RelationCacheInitializePhase3(void)
Definition: relcache.c:3227
#define NAMEDATALEN
#define RowExclusiveLock
Definition: lock.h:146
bool am_walsender
Definition: walsender.c:101
void pg_usleep(long microsec)
Definition: signal.c:52
int ReservedBackends
Definition: postmaster.c:206
#define FATAL
Definition: elog.h:50
void InitializeSearchPath(void)
Definition: namespace.c:3936
int MaxBackends
Definition: globals.c:121
#define TemplateDbOid
Definition: pg_database.h:80
void on_shmem_exit(pg_on_exit_callback function, Datum arg)
Definition: ipc.c:348
bool IsUnderPostmaster
Definition: globals.c:97
#define DEFAULTTABLESPACE_OID
Definition: pg_tablespace.h:63
int errdetail(const char *fmt,...)
Definition: elog.c:864
int errcode_for_file_access(void)
Definition: elog.c:592
void before_shmem_exit(pg_on_exit_callback function, Datum arg)
Definition: ipc.c:320
Oid databaseId
Definition: proc.h:95
void pgstat_initialize(void)
Definition: pgstat.c:2623
static bool ThereIsAtLeastOneRole(void)
Definition: postinit.c:1184
void StartupXLOG(void)
Definition: xlog.c:5869
bool IsAutoVacuumWorkerProcess(void)
Definition: autovacuum.c:2893
#define ereport(elevel, rest)
Definition: elog.h:132
char * GetDatabasePath(Oid dbNode, Oid spcNode)
Definition: relpath.c:108
void SetDatabasePath(const char *path)
Definition: miscinit.c:80
void InvalidateCatalogSnapshot()
Definition: snapmgr.c:348
#define WARNING
Definition: elog.h:38
void ShutdownXLOG(int code, Datum arg)
Definition: xlog.c:7886
static HeapTuple GetDatabaseTupleByOid(Oid dboid)
Definition: postinit.c:136
#define InvalidBackendId
Definition: backendid.h:23
bool am_db_walsender
Definition: walsender.c:104
Oid MyDatabaseId
Definition: globals.c:73
int PostAuthDelay
Definition: postgres.c:97
void LockSharedObject(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:836
void EnablePortalManager(void)
Definition: portalmem.c:102
static void ShutdownPostgres(int code, Datum arg)
Definition: postinit.c:1131
static char * username
Definition: initdb.c:124
size_t strlcpy(char *dst, const char *src, size_t siz)
Definition: strlcpy.c:45
TimeoutId RegisterTimeout(TimeoutId id, timeout_handler_proc handler)
Definition: timeout.c:373
bool IsAutoVacuumLauncherProcess(void)
Definition: autovacuum.c:2887
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define NULL
Definition: c.h:202
#define Assert(condition)
Definition: c.h:648
void InitializeSessionUserIdStandalone(void)
Definition: miscinit.c:543
void StartTransactionCommand(void)
Definition: xact.c:2637
#define XACT_READ_COMMITTED
Definition: xact.h:29
void InitializeSessionUserId(const char *rolename, Oid roleid)
Definition: miscinit.c:457
char * dbname
Definition: streamutil.c:40
static void process_startup_options(Port *port, bool am_superuser)
Definition: postinit.c:1032
int XactIsoLevel
Definition: xact.c:72
bool has_rolreplication(Oid roleid)
Definition: miscinit.c:439
void InitializeClientEncoding(void)
Definition: mbutils.c:293
void InitPlanCache(void)
Definition: plancache.c:115
void InitProcessPhase2(void)
Definition: proc.c:424
#define IsBootstrapProcessingMode()
Definition: miscadmin.h:360
void RelationCacheInitialize(void)
Definition: relcache.c:3135
void ProcSignalInit(int pss_idx)
Definition: procsignal.c:112
void InitCatalogCache(void)
Definition: syscache.c:896
static void StatementTimeoutHandler(void)
Definition: postinit.c:1148
void SetCurrentStatementStartTimestamp(void)
Definition: xact.c:737
int errmsg(const char *fmt,...)
Definition: elog.c:791
void pgstat_bestart(void)
Definition: pgstat.c:2643
#define NameStr(name)
Definition: c.h:475
static void process_settings(Oid databaseid, Oid roleid)
Definition: postinit.c:1097
void CheckDeadLockAlert(void)
Definition: proc.c:1594
void InitBufferPoolBackend(void)
Definition: bufmgr.c:2122
#define elog
Definition: elog.h:228
#define HeapTupleGetOid(tuple)
Definition: htup_details.h:670
void InitPostmasterChild ( void  )

Definition at line 173 of file miscinit.c.

References elog, FATAL, InitializeLatchSupport(), InitLatch(), IsUnderPostmaster, LocalLatchData, MyLatch, MyProcPid, MyStartTime, NULL, and on_exit_reset().

Referenced by BackendStartup(), do_start_bgworker(), pgarch_start(), pgstat_start(), StartAutoVacLauncher(), StartAutoVacWorker(), StartChildProcess(), and SysLogger_Start().

174 {
175  IsUnderPostmaster = true; /* we are a postmaster subprocess now */
176 
177  MyProcPid = getpid(); /* reset MyProcPid */
178 
179  MyStartTime = time(NULL); /* set our start time in case we call elog */
180 
181  /*
182  * make sure stderr is in binary mode before anything can possibly be
183  * written to it, in case it's actually the syslogger pipe, so the pipe
184  * chunking protocol isn't disturbed. Non-logpipe data gets translated on
185  * redirection (e.g. via pg_ctl -l) anyway.
186  */
187 #ifdef WIN32
188  _setmode(fileno(stderr), _O_BINARY);
189 #endif
190 
191  /* We don't want the postmaster's proc_exit() handlers */
192  on_exit_reset();
193 
194  /* Initialize process-local latch support */
198 
199  /*
200  * If possible, make this process a group leader, so that the postmaster
201  * can signal any child processes too. Not all processes will have
202  * children, but for consistency we , but for consistency we make all
203  * postmaster child processes do this.
204  */
205 #ifdef HAVE_SETSID
206  if (setsid() < 0)
207  elog(FATAL, "setsid() failed: %m");
208 #endif
209 }
void InitLatch(volatile Latch *latch)
Definition: unix_latch.c:106
int MyProcPid
Definition: globals.c:37
pg_time_t MyStartTime
Definition: globals.c:38
void on_exit_reset(void)
Definition: ipc.c:396
static Latch LocalLatchData
Definition: miscinit.c:59
#define FATAL
Definition: elog.h:50
bool IsUnderPostmaster
Definition: globals.c:97
void InitializeLatchSupport(void)
Definition: unix_latch.c:78
#define NULL
Definition: c.h:202
struct Latch * MyLatch
Definition: globals.c:50
#define elog
Definition: elog.h:228
void InitStandaloneProcess ( const char *  argv0)

Definition at line 217 of file miscinit.c.

References Assert, elog, FATAL, find_my_exec(), get_pkglib_path(), InitializeLatchSupport(), InitLatch(), IsPostmasterEnvironment, LocalLatchData, my_exec_path, MyLatch, MyProcPid, MyStartTime, NULL, and pkglib_path.

Referenced by AuxiliaryProcessMain(), and PostgresMain().

218 {
220 
221  MyProcPid = getpid(); /* reset MyProcPid */
222 
223  MyStartTime = time(NULL); /* set our start time in case we call elog */
224 
225  /* Initialize process-local latch support */
229 
230  /* Compute paths, no postmaster to inherit from */
231  if (my_exec_path[0] == '\0')
232  {
233  if (find_my_exec(argv0, my_exec_path) < 0)
234  elog(FATAL, "%s: could not locate my own executable path",
235  argv0);
236  }
237 
238  if (pkglib_path[0] == '\0')
240 }
void InitLatch(volatile Latch *latch)
Definition: unix_latch.c:106
bool IsPostmasterEnvironment
Definition: globals.c:96
static char * argv0
Definition: pg_ctl.c:96
int MyProcPid
Definition: globals.c:37
pg_time_t MyStartTime
Definition: globals.c:38
void get_pkglib_path(const char *my_exec_path, char *ret_path)
Definition: path.c:724
static Latch LocalLatchData
Definition: miscinit.c:59
#define FATAL
Definition: elog.h:50
int find_my_exec(const char *argv0, char *retpath)
Definition: exec.c:119
void InitializeLatchSupport(void)
Definition: unix_latch.c:78
char my_exec_path[MAXPGPATH]
Definition: globals.c:62
#define NULL
Definition: c.h:202
#define Assert(condition)
Definition: c.h:648
struct Latch * MyLatch
Definition: globals.c:50
#define elog
Definition: elog.h:228
char pkglib_path[MAXPGPATH]
Definition: globals.c:63
bool InLocalUserIdChange ( void  )

Definition at line 390 of file miscinit.c.

References SECURITY_LOCAL_USERID_CHANGE, and SecurityRestrictionContext.

Referenced by GetUserIdAndContext(), is_admin_of_role(), and set_config_option().

391 {
393 }
static int SecurityRestrictionContext
Definition: miscinit.c:162
#define SECURITY_LOCAL_USERID_CHANGE
Definition: miscadmin.h:287
bool InSecurityRestrictedOperation ( void  )

Definition at line 399 of file miscinit.c.

References SECURITY_RESTRICTED_OPERATION, and SecurityRestrictionContext.

Referenced by CheckRestrictedOperation(), DefineRelation(), is_admin_of_role(), set_config_option(), and SetUserIdAndContext().

400 {
402 }
#define SECURITY_RESTRICTED_OPERATION
Definition: miscadmin.h:288
static int SecurityRestrictionContext
Definition: miscinit.c:162
void pg_bindtextdomain ( const char *  domain)

Definition at line 1369 of file miscinit.c.

References get_locale_path(), MAXPGPATH, and my_exec_path.

Referenced by _PG_init().

1370 {
1371 #ifdef ENABLE_NLS
1372  if (my_exec_path[0] != '\0')
1373  {
1374  char locale_path[MAXPGPATH];
1375 
1376  get_locale_path(my_exec_path, locale_path);
1377  bindtextdomain(domain, locale_path);
1378  pg_bind_textdomain_codeset(domain);
1379  }
1380 #endif
1381 }
#define MAXPGPATH
char my_exec_path[MAXPGPATH]
Definition: globals.c:62
void get_locale_path(const char *my_exec_path, char *ret_path)
Definition: path.c:733
void pg_split_opts ( char **  argv,
int *  argcp,
const char *  optstr 
)

Definition at line 434 of file postinit.c.

References appendStringInfoChar(), StringInfoData::data, initStringInfo(), pfree(), pstrdup(), and resetStringInfo().

Referenced by BackendRun(), and process_startup_options().

435 {
436  StringInfoData s;
437 
438  initStringInfo(&s);
439 
440  while (*optstr)
441  {
442  bool last_was_escape = false;
443 
444  resetStringInfo(&s);
445 
446  /* skip over leading space */
447  while (isspace((unsigned char) *optstr))
448  optstr++;
449 
450  if (*optstr == '\0')
451  break;
452 
453  /*
454  * Parse a single option, stopping at the first space, unless it's
455  * escaped.
456  */
457  while (*optstr)
458  {
459  if (isspace((unsigned char) *optstr) && !last_was_escape)
460  break;
461 
462  if (!last_was_escape && *optstr == '\\')
463  last_was_escape = true;
464  else
465  {
466  last_was_escape = false;
467  appendStringInfoChar(&s, *optstr);
468  }
469 
470  optstr++;
471  }
472 
473  /* now store the option in the next argv[] position */
474  argv[(*argcp)++] = pstrdup(s.data);
475  }
476 
477  pfree(s.data);
478 }
char * pstrdup(const char *in)
Definition: mcxt.c:1080
void pfree(void *pointer)
Definition: mcxt.c:913
void resetStringInfo(StringInfo str)
Definition: stringinfo.c:62
void appendStringInfoChar(StringInfo str, char ch)
Definition: stringinfo.c:169
void initStringInfo(StringInfo str)
Definition: stringinfo.c:46
void PreventCommandDuringRecovery ( const char *  cmdname)

Definition at line 264 of file utility.c.

References ereport, errcode(), errmsg(), ERROR, and RecoveryInProgress().

Referenced by LockTableCommand(), pg_notify(), standard_ProcessUtility(), and txid_current().

265 {
266  if (RecoveryInProgress())
267  ereport(ERROR,
268  (errcode(ERRCODE_READ_ONLY_SQL_TRANSACTION),
269  /* translator: %s is name of a SQL command, eg CREATE */
270  errmsg("cannot execute %s during recovery",
271  cmdname)));
272 }
int errcode(int sqlerrcode)
Definition: elog.c:569
bool RecoveryInProgress(void)
Definition: xlog.c:7473
#define ERROR
Definition: elog.h:41
#define ereport(elevel, rest)
Definition: elog.h:132
int errmsg(const char *fmt,...)
Definition: elog.c:791
void PreventCommandIfParallelMode ( const char *  cmdname)

Definition at line 245 of file utility.c.

References ereport, errcode(), errmsg(), ERROR, and IsInParallelMode().

Referenced by _SPI_execute_plan(), check_xact_readonly(), do_setval(), DoCopy(), ExecCheckXactReadOnly(), init_execution_state(), nextval_internal(), and SPI_cursor_open_internal().

246 {
247  if (IsInParallelMode())
248  ereport(ERROR,
249  (errcode(ERRCODE_INVALID_TRANSACTION_STATE),
250  /* translator: %s is name of a SQL command, eg CREATE */
251  errmsg("cannot execute %s during a parallel operation",
252  cmdname)));
253 }
int errcode(int sqlerrcode)
Definition: elog.c:569
bool IsInParallelMode(void)
Definition: xact.c:910
#define ERROR
Definition: elog.h:41
#define ereport(elevel, rest)
Definition: elog.h:132
int errmsg(const char *fmt,...)
Definition: elog.c:791
void PreventCommandIfReadOnly ( const char *  cmdname)

Definition at line 227 of file utility.c.

References ereport, errcode(), errmsg(), ERROR, and XactReadOnly.

Referenced by check_xact_readonly(), do_setval(), DoCopy(), ExecCheckXactReadOnly(), and nextval_internal().

228 {
229  if (XactReadOnly)
230  ereport(ERROR,
231  (errcode(ERRCODE_READ_ONLY_SQL_TRANSACTION),
232  /* translator: %s is name of a SQL command, eg CREATE */
233  errmsg("cannot execute %s in a read-only transaction",
234  cmdname)));
235 }
int errcode(int sqlerrcode)
Definition: elog.c:569
#define ERROR
Definition: elog.h:41
#define ereport(elevel, rest)
Definition: elog.h:132
bool XactReadOnly
Definition: xact.c:75
int errmsg(const char *fmt,...)
Definition: elog.c:791
void process_session_preload_libraries ( void  )

Definition at line 1358 of file miscinit.c.

References load_libraries(), local_preload_libraries_string, and session_preload_libraries_string.

Referenced by PostgresMain().

1359 {
1361  "session_preload_libraries",
1362  false);
1364  "local_preload_libraries",
1365  true);
1366 }
static void load_libraries(const char *libraries, const char *gucname, bool restricted)
Definition: miscinit.c:1290
char * local_preload_libraries_string
Definition: miscinit.c:1278
char * session_preload_libraries_string
Definition: miscinit.c:1276
void process_shared_preload_libraries ( void  )

Definition at line 1345 of file miscinit.c.

References load_libraries(), process_shared_preload_libraries_in_progress, and shared_preload_libraries_string.

Referenced by PostmasterMain().

1346 {
1349  "shared_preload_libraries",
1350  false);
1352 }
bool process_shared_preload_libraries_in_progress
Definition: miscinit.c:1281
char * shared_preload_libraries_string
Definition: miscinit.c:1277
static void load_libraries(const char *libraries, const char *gucname, bool restricted)
Definition: miscinit.c:1290
void ProcessInterrupts ( void  )

Definition at line 2844 of file postgres.c.

References Assert, ClientAuthInProgress, ClientConnectionLost, CritSectionCount, DestNone, DestRemote, DoingCommandRead, ereport, errcode(), errdetail_recovery_conflict(), errhint(), errmsg(), ERROR, FATAL, get_timeout_indicator(), HandleParallelMessages(), InterruptHoldoffCount, InterruptPending, IsAutoVacuumWorkerProcess(), LOCK_TIMEOUT, LockErrorCleanup(), ParallelMessagePending, pgstat_report_recovery_conflict(), ProcDiePending, PROCSIG_RECOVERY_CONFLICT_DATABASE, QueryCancelHoldoffCount, QueryCancelPending, RecoveryConflictPending, RecoveryConflictReason, RecoveryConflictRetryable, STATEMENT_TIMEOUT, and whereToSendOutput.

Referenced by die().

2845 {
2846  /* OK to accept any interrupts now? */
2847  if (InterruptHoldoffCount != 0 || CritSectionCount != 0)
2848  return;
2849  InterruptPending = false;
2850 
2851  if (ProcDiePending)
2852  {
2853  ProcDiePending = false;
2854  QueryCancelPending = false; /* ProcDie trumps QueryCancel */
2855  LockErrorCleanup();
2856  /* As in quickdie, don't risk sending to client during auth */
2860  ereport(FATAL,
2861  (errcode(ERRCODE_QUERY_CANCELED),
2862  errmsg("canceling authentication due to timeout")));
2863  else if (IsAutoVacuumWorkerProcess())
2864  ereport(FATAL,
2865  (errcode(ERRCODE_ADMIN_SHUTDOWN),
2866  errmsg("terminating autovacuum process due to administrator command")));
2868  {
2870  ereport(FATAL,
2871  (errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),
2872  errmsg("terminating connection due to conflict with recovery"),
2874  }
2875  else if (RecoveryConflictPending)
2876  {
2877  /* Currently there is only one non-retryable recovery conflict */
2880  ereport(FATAL,
2881  (errcode(ERRCODE_DATABASE_DROPPED),
2882  errmsg("terminating connection due to conflict with recovery"),
2884  }
2885  else
2886  ereport(FATAL,
2887  (errcode(ERRCODE_ADMIN_SHUTDOWN),
2888  errmsg("terminating connection due to administrator command")));
2889  }
2891  {
2892  QueryCancelPending = false; /* lost connection trumps QueryCancel */
2893  LockErrorCleanup();
2894  /* don't send to client, we already know the connection to be dead. */
2896  ereport(FATAL,
2897  (errcode(ERRCODE_CONNECTION_FAILURE),
2898  errmsg("connection to client lost")));
2899  }
2900 
2901  /*
2902  * If a recovery conflict happens while we are waiting for input from the
2903  * client, the client is presumably just sitting idle in a transaction,
2904  * preventing recovery from making progress. Terminate the connection to
2905  * dislodge it.
2906  */
2908  {
2909  QueryCancelPending = false; /* this trumps QueryCancel */
2910  RecoveryConflictPending = false;
2911  LockErrorCleanup();
2913  ereport(FATAL,
2914  (errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),
2915  errmsg("terminating connection due to conflict with recovery"),
2917  errhint("In a moment you should be able to reconnect to the"
2918  " database and repeat your command.")));
2919  }
2920 
2921  if (QueryCancelPending)
2922  {
2923  /*
2924  * Don't allow query cancel interrupts while reading input from the
2925  * client, because we might lose sync in the FE/BE protocol. (Die
2926  * interrupts are OK, because we won't read any further messages from
2927  * the client in that case.)
2928  */
2929  if (QueryCancelHoldoffCount != 0)
2930  {
2931  /*
2932  * Re-arm InterruptPending so that we process the cancel request
2933  * as soon as we're done reading the message.
2934  */
2935  InterruptPending = true;
2936  return;
2937  }
2938 
2939  QueryCancelPending = false;
2940 
2941  /*
2942  * If LOCK_TIMEOUT and STATEMENT_TIMEOUT indicators are both set, we
2943  * prefer to report the former; but be sure to clear both.
2944  */
2946  {
2948  LockErrorCleanup();
2949  ereport(ERROR,
2950  (errcode(ERRCODE_LOCK_NOT_AVAILABLE),
2951  errmsg("canceling statement due to lock timeout")));
2952  }
2954  {
2955  LockErrorCleanup();
2956  ereport(ERROR,
2957  (errcode(ERRCODE_QUERY_CANCELED),
2958  errmsg("canceling statement due to statement timeout")));
2959  }
2961  {
2962  LockErrorCleanup();
2963  ereport(ERROR,
2964  (errcode(ERRCODE_QUERY_CANCELED),
2965  errmsg("canceling autovacuum task")));
2966  }
2968  {
2969  RecoveryConflictPending = false;
2970  LockErrorCleanup();
2972  ereport(ERROR,
2973  (errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),
2974  errmsg("canceling statement due to conflict with recovery"),
2976  }
2977 
2978  /*
2979  * If we are reading a command from the client, just ignore the cancel
2980  * request --- sending an extra error message won't accomplish
2981  * anything. Otherwise, go ahead and throw the error.
2982  */
2983  if (!DoingCommandRead)
2984  {
2985  LockErrorCleanup();
2986  ereport(ERROR,
2987  (errcode(ERRCODE_QUERY_CANCELED),
2988  errmsg("canceling statement due to user request")));
2989  }
2990  }
2991 
2994 }
volatile uint32 InterruptHoldoffCount
Definition: globals.c:33
int errhint(const char *fmt,...)
Definition: elog.c:978
void pgstat_report_recovery_conflict(int reason)
Definition: pgstat.c:1407
volatile uint32 QueryCancelHoldoffCount
Definition: globals.c:34
int errcode(int sqlerrcode)
Definition: elog.c:569
volatile bool QueryCancelPending
Definition: globals.c:30
volatile bool ClientConnectionLost
Definition: globals.c:32
bool ClientAuthInProgress
Definition: postmaster.c:335
#define ERROR
Definition: elog.h:41
#define FATAL
Definition: elog.h:50
void HandleParallelMessages(void)
Definition: parallel.c:620
Definition: dest.h:88
volatile uint32 CritSectionCount
Definition: globals.c:35
bool IsAutoVacuumWorkerProcess(void)
Definition: autovacuum.c:2893
#define ereport(elevel, rest)
Definition: elog.h:132
void LockErrorCleanup(void)
Definition: proc.c:655
static ProcSignalReason RecoveryConflictReason
Definition: postgres.c:176
static bool RecoveryConflictPending
Definition: postgres.c:174
static bool RecoveryConflictRetryable
Definition: postgres.c:175
bool get_timeout_indicator(TimeoutId id, bool reset_indicator)
Definition: timeout.c:633
static int errdetail_recovery_conflict(void)
Definition: postgres.c:2257
volatile bool InterruptPending
Definition: globals.c:29
#define Assert(condition)
Definition: c.h:648
static bool DoingCommandRead
Definition: postgres.c:142
bool ParallelMessagePending
Definition: parallel.c:96
volatile bool ProcDiePending
Definition: globals.c:31
int errmsg(const char *fmt,...)
Definition: elog.c:791
CommandDest whereToSendOutput
Definition: postgres.c:86
void restore_stack_base ( pg_stack_base_t  base)

Definition at line 3070 of file postgres.c.

References stack_base_ptr.

3071 {
3072 #if defined(__ia64__) || defined(__ia64)
3073  stack_base_ptr = base.stack_base_ptr;
3074  register_stack_base_ptr = base.register_stack_base_ptr;
3075 #else
3076  stack_base_ptr = base;
3077 #endif
3078 }
char * stack_base_ptr
Definition: postgres.c:115
pg_stack_base_t set_stack_base ( void  )

Definition at line 3039 of file postgres.c.

References stack_base_ptr.

Referenced by PostmasterMain().

3040 {
3041  char stack_base;
3042  pg_stack_base_t old;
3043 
3044 #if defined(__ia64__) || defined(__ia64)
3045  old.stack_base_ptr = stack_base_ptr;
3046  old.register_stack_base_ptr = register_stack_base_ptr;
3047 #else
3048  old = stack_base_ptr;
3049 #endif
3050 
3051  /* Set up reference point for stack depth checking */
3052  stack_base_ptr = &stack_base;
3053 #if defined(__ia64__) || defined(__ia64)
3054  register_stack_base_ptr = ia64_get_bsp();
3055 #endif
3056 
3057  return old;
3058 }
char * stack_base_ptr
Definition: postgres.c:115
char * pg_stack_base_t
Definition: miscadmin.h:265
void SetCurrentRoleId ( Oid  roleid,
bool  is_superuser 
)

Definition at line 621 of file miscinit.c.

References OidIsValid, PGC_INTERNAL, PGC_S_OVERRIDE, SessionUserId, SessionUserIsSuperuser, SetConfigOption(), SetOuterUserId(), and SetRoleIsActive.

Referenced by assign_role().

622 {
623  /*
624  * Get correct info if it's SET ROLE NONE
625  *
626  * If SessionUserId hasn't been set yet, just do nothing --- the eventual
627  * SetSessionUserId call will fix everything. This is needed since we
628  * will get called during GUC initialization.
629  */
630  if (!OidIsValid(roleid))
631  {
633  return;
634 
635  roleid = SessionUserId;
637 
638  SetRoleIsActive = false;
639  }
640  else
641  SetRoleIsActive = true;
642 
643  SetOuterUserId(roleid);
644 
645  SetConfigOption("is_superuser",
646  is_superuser ? "on" : "off",
648 }
static Oid SessionUserId
Definition: miscinit.c:154
static void SetOuterUserId(Oid userid)
Definition: miscinit.c:293
#define OidIsValid(objectId)
Definition: c.h:511
void SetConfigOption(const char *name, const char *value, GucContext context, GucSource source)
Definition: guc.c:6405
static bool SetRoleIsActive
Definition: miscinit.c:165
static bool SessionUserIsSuperuser
Definition: miscinit.c:160
bool is_superuser(void)
Definition: common.c:1730
void SetDatabasePath ( const char *  path)

Definition at line 80 of file miscinit.c.

References Assert, DatabasePath, MemoryContextStrdup(), and TopMemoryContext.

Referenced by InitPostgres().

81 {
82  /* This should happen only once per process */
85 }
MemoryContext TopMemoryContext
Definition: mcxt.c:46
char * DatabasePath
Definition: globals.c:81
#define Assert(condition)
Definition: c.h:648
char * MemoryContextStrdup(MemoryContext context, const char *string)
Definition: mcxt.c:1067
void SetDataDir ( const char *  dir)

Definition at line 92 of file miscinit.c.

References AssertArg, DataDir, free, and make_absolute_path().

Referenced by SelectConfigFiles().

93 {
94  char *new;
95 
96  AssertArg(dir);
97 
98  /* If presented path is relative, convert to absolute */
99  new = make_absolute_path(dir);
100 
101  if (DataDir)
102  free(DataDir);
103  DataDir = new;
104 }
char * make_absolute_path(const char *path)
Definition: path.c:574
#define AssertArg(condition)
Definition: c.h:650
#define free(a)
Definition: header.h:60
char * DataDir
Definition: globals.c:58
void SetSessionAuthorization ( Oid  userid,
bool  is_superuser 
)

Definition at line 575 of file miscinit.c.

References AssertState, AuthenticatedUserId, AuthenticatedUserIsSuperuser, ereport, errcode(), errmsg(), ERROR, OidIsValid, PGC_INTERNAL, PGC_S_OVERRIDE, SetConfigOption(), and SetSessionUserId().

Referenced by assign_session_authorization().

576 {
577  /* Must have authenticated already, else can't make permission check */
579 
580  if (userid != AuthenticatedUserId &&
582  ereport(ERROR,
583  (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
584  errmsg("permission denied to set session authorization")));
585 
587 
588  SetConfigOption("is_superuser",
589  is_superuser ? "on" : "off",
591 }
#define AssertState(condition)
Definition: c.h:651
int errcode(int sqlerrcode)
Definition: elog.c:569
#define OidIsValid(objectId)
Definition: c.h:511
#define ERROR
Definition: elog.h:41
void SetConfigOption(const char *name, const char *value, GucContext context, GucSource source)
Definition: guc.c:6405
static bool AuthenticatedUserIsSuperuser
Definition: miscinit.c:159
#define ereport(elevel, rest)
Definition: elog.h:132
bool is_superuser(void)
Definition: common.c:1730
int errmsg(const char *fmt,...)
Definition: elog.c:791
static void SetSessionUserId(Oid userid, bool is_superuser)
Definition: miscinit.c:316
static Oid AuthenticatedUserId
Definition: miscinit.c:153
void SetUserIdAndContext ( Oid  userid,
bool  sec_def_context 
)

Definition at line 419 of file miscinit.c.

References CurrentUserId, ereport, errcode(), errmsg(), ERROR, InSecurityRestrictedOperation(), SECURITY_LOCAL_USERID_CHANGE, and SecurityRestrictionContext.

420 {
421  /* We throw the same error SET ROLE would. */
423  ereport(ERROR,
424  (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
425  errmsg("cannot set parameter \"%s\" within security-restricted operation",
426  "role")));
427  CurrentUserId = userid;
428  if (sec_def_context)
430  else
432 }
int errcode(int sqlerrcode)
Definition: elog.c:569
#define ERROR
Definition: elog.h:41
static int SecurityRestrictionContext
Definition: miscinit.c:162
#define ereport(elevel, rest)
Definition: elog.h:132
#define SECURITY_LOCAL_USERID_CHANGE
Definition: miscadmin.h:287
static Oid CurrentUserId
Definition: miscinit.c:156
bool InSecurityRestrictedOperation(void)
Definition: miscinit.c:399
int errmsg(const char *fmt,...)
Definition: elog.c:791
void SetUserIdAndSecContext ( Oid  userid,
int  sec_context 
)
bool superuser ( void  )

Definition at line 47 of file superuser.c.

References GetUserId(), and superuser_arg().

Referenced by AddRoleMems(), AlterForeignDataWrapper(), AlterForeignDataWrapperOwner_internal(), AlterForeignServerOwner_internal(), AlterFunction(), AlterObjectNamespace_internal(), AlterObjectOwner_internal(), AlterObjectRename_internal(), AlterOpFamily(), AlterRole(), AlterRoleSet(), AlterSystemSetConfigFile(), AlterTypeOwner(), ATExecChangeOwner(), brin_page_items(), brin_revmap_data(), bt_metap(), bt_page_items(), bt_page_stats(), check_conn_params(), check_encoding_locale_matches(), check_permissions(), connect_pg_server(), CreateCast(), CreateEventTrigger(), CreateForeignDataWrapper(), CreateFunction(), CreateProceduralLanguage(), CreateRole(), CreateTableSpace(), dblink_connstr_check(), dblink_security_check(), DefineAggregate(), DefineOpClass(), DefineOpFamily(), DefineTSParser(), DefineTSTemplate(), DefineType(), DelRoleMems(), DoCopy(), DropRole(), dummy_object_relabel(), EnableDisableTrigger(), ExecSetVariableStmt(), execute_extension_script(), ExecuteDoStmt(), file_fdw_validator(), fmgr_security_definer(), fsm_page_contents(), get_raw_page_internal(), GetConfigOption(), GetConfigOptionByName(), GetConfigOptionByNum(), GetConfigOptionResetString(), gin_leafpage_items(), gin_metapage_info(), gin_page_opaque_info(), GUCArrayReset(), have_createdb_privilege(), heap_page_items(), InitPostgres(), lo_export(), lo_import_internal(), main(), page_header(), pg_create_restore_point(), pg_logdir_ls(), pg_ls_dir(), pg_read_binary_file(), pg_read_file(), pg_reload_conf(), pg_relpages(), pg_relpagesbyid(), pg_rotate_logfile(), pg_signal_backend(), pg_start_backup(), pg_stat_file(), pg_stat_get_wal_senders(), pg_stat_statements_internal(), pg_stop_backup(), pg_switch_xlog(), pg_xlog_replay_pause(), pg_xlog_replay_resume(), pgstat_get_backend_current_activity(), pgstat_reset_counters(), pgstat_reset_shared_counters(), pgstat_reset_single_counter(), pgstatginindex(), pgstatindex(), pgstatindexbyid(), pgstattuple(), pgstattuple_approx(), pgstattuplebyid(), ProcedureCreate(), regress_putenv(), RenameRole(), replorigin_check_prerequisites(), requireSuperuser(), sepgsql_restorecon(), set_config_by_name(), SetPGVariable(), ShowAllGUCConfig(), standard_ProcessUtility(), validate_option_array_item(), and wait_pid().

48 {
49  return superuser_arg(GetUserId());
50 }
Oid GetUserId(void)
Definition: miscinit.c:274
bool superuser_arg(Oid roleid)
Definition: superuser.c:57
bool superuser_arg ( Oid  roleid)

Definition at line 57 of file superuser.c.

References AUTHOID, BOOTSTRAP_SUPERUSERID, CacheRegisterSyscacheCallback(), GETSTRUCT, HeapTupleIsValid, IsUnderPostmaster, last_roleid, last_roleid_is_super, ObjectIdGetDatum, OidIsValid, ReleaseSysCache(), roleid_callback_registered, RoleidCallback(), and SearchSysCache1.

Referenced by AddRoleMems(), AlterEventTriggerOwner_internal(), AlterForeignDataWrapperOwner_internal(), check_object_ownership(), DelRoleMems(), has_bypassrls_privilege(), has_createrole_privilege(), has_privs_of_role(), is_admin_of_role(), is_member_of_role(), LockGXact(), pg_class_aclmask(), pg_class_ownercheck(), pg_collation_ownercheck(), pg_conversion_ownercheck(), pg_database_aclmask(), pg_database_ownercheck(), pg_event_trigger_ownercheck(), pg_extension_ownercheck(), pg_foreign_data_wrapper_aclmask(), pg_foreign_data_wrapper_ownercheck(), pg_foreign_server_aclmask(), pg_foreign_server_ownercheck(), pg_language_aclmask(), pg_language_ownercheck(), pg_largeobject_aclmask_snapshot(), pg_largeobject_ownercheck(), pg_namespace_aclmask(), pg_namespace_ownercheck(), pg_opclass_ownercheck(), pg_oper_ownercheck(), pg_opfamily_ownercheck(), pg_proc_aclmask(), pg_proc_ownercheck(), pg_signal_backend(), pg_tablespace_aclmask(), pg_tablespace_ownercheck(), pg_ts_config_ownercheck(), pg_ts_dict_ownercheck(), pg_type_aclmask(), pg_type_ownercheck(), pltcl_init_load_unknown(), select_best_grantor(), and superuser().

58 {
59  bool result;
60  HeapTuple rtup;
61 
62  /* Quick out for cache hit */
63  if (OidIsValid(last_roleid) && last_roleid == roleid)
64  return last_roleid_is_super;
65 
66  /* Special escape path in case you deleted all your users. */
67  if (!IsUnderPostmaster && roleid == BOOTSTRAP_SUPERUSERID)
68  return true;
69 
70  /* OK, look up the information in pg_authid */
71  rtup = SearchSysCache1(AUTHOID, ObjectIdGetDatum(roleid));
72  if (HeapTupleIsValid(rtup))
73  {
74  result = ((Form_pg_authid) GETSTRUCT(rtup))->rolsuper;
75  ReleaseSysCache(rtup);
76  }
77  else
78  {
79  /* Report "not superuser" for invalid roleids */
80  result = false;
81  }
82 
83  /* If first time through, set up callback for cache flushes */
85  {
88  (Datum) 0);
90  }
91 
92  /* Cache the result for next time */
93  last_roleid = roleid;
94  last_roleid_is_super = result;
95 
96  return result;
97 }
static Oid last_roleid
Definition: superuser.c:36
#define GETSTRUCT(TUP)
Definition: htup_details.h:631
#define OidIsValid(objectId)
Definition: c.h:511
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:143
static void RoleidCallback(Datum arg, int cacheid, uint32 hashvalue)
Definition: superuser.c:104
FormData_pg_authid * Form_pg_authid
Definition: pg_authid.h:72
static bool last_roleid_is_super
Definition: superuser.c:37
#define ObjectIdGetDatum(X)
Definition: postgres.h:515
bool IsUnderPostmaster
Definition: globals.c:97
void CacheRegisterSyscacheCallback(int cacheid, SyscacheCallbackFunction func, Datum arg)
Definition: inval.c:1353
uintptr_t Datum
Definition: postgres.h:374
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:1012
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define BOOTSTRAP_SUPERUSERID
Definition: pg_authid.h:100
static bool roleid_callback_registered
Definition: superuser.c:38
void SwitchBackToLocalLatch ( void  )

Definition at line 259 of file miscinit.c.

References Assert, LocalLatchData, MyLatch, MyProc, NULL, PGPROC::procLatch, and SetLatch().

Referenced by AuxiliaryProcKill(), and ProcKill().

260 {
263 
265  SetLatch(MyLatch);
266 }
PGPROC * MyProc
Definition: proc.c:63
Latch procLatch
Definition: proc.h:85
static Latch LocalLatchData
Definition: miscinit.c:59
void SetLatch(volatile Latch *latch)
Definition: unix_latch.c:514
#define NULL
Definition: c.h:202
#define Assert(condition)
Definition: c.h:648
struct Latch * MyLatch
Definition: globals.c:50
void SwitchToSharedLatch ( void  )

Definition at line 243 of file miscinit.c.

References Assert, MyLatch, MyProc, NULL, PGPROC::procLatch, and SetLatch().

Referenced by InitAuxiliaryProcess(), and InitProcess().

244 {
246  Assert(MyProc != NULL);
247 
249 
250  /*
251  * Set the shared latch as the local one might have been set. This
252  * shouldn't normally be necessary as code is supposed to check the
253  * condition before waiting for the latch, but a bit care can't hurt.
254  */
255  SetLatch(MyLatch);
256 }
PGPROC * MyProc
Definition: proc.c:63
Latch procLatch
Definition: proc.h:85
static Latch LocalLatchData
Definition: miscinit.c:59
void SetLatch(volatile Latch *latch)
Definition: unix_latch.c:514
#define NULL
Definition: c.h:202
#define Assert(condition)
Definition: c.h:648
struct Latch * MyLatch
Definition: globals.c:50
void TouchSocketLockFiles ( void  )

Definition at line 1050 of file miscinit.c.

References close, DIRECTORY_LOCK_FILE, fd(), lfirst, NULL, PG_BINARY, and read.

Referenced by ServerLoop().

1051 {
1052  ListCell *l;
1053 
1054  foreach(l, lock_files)
1055  {
1056  char *socketLockFile = (char *) lfirst(l);
1057 
1058  /* No need to touch the data directory lock file, we trust */
1059  if (strcmp(socketLockFile, DIRECTORY_LOCK_FILE) == 0)
1060  continue;
1061 
1062  /*
1063  * utime() is POSIX standard, utimes() is a common alternative; if we
1064  * have neither, fall back to actually reading the file (which only
1065  * sets the access time not mod time, but that should be enough in
1066  * most cases). In all paths, we ignore errors.
1067  */
1068 #ifdef HAVE_UTIME
1069  utime(socketLockFile, NULL);
1070 #else /* !HAVE_UTIME */
1071 #ifdef HAVE_UTIMES
1072  utimes(socketLockFile, NULL);
1073 #else /* !HAVE_UTIMES */
1074  int fd;
1075  char buffer[1];
1076 
1077  fd = open(socketLockFile, O_RDONLY | PG_BINARY, 0);
1078  if (fd >= 0)
1079  {
1080  read(fd, buffer, sizeof(buffer));
1081  close(fd);
1082  }
1083 #endif /* HAVE_UTIMES */
1084 #endif /* HAVE_UTIME */
1085  }
1086 }
static List * lock_files
Definition: miscinit.c:57
#define DIRECTORY_LOCK_FILE
Definition: miscinit.c:52
static int fd(const char *x, int i)
Definition: preproc-init.c:105
#define PG_BINARY
Definition: c.h:1027
#define NULL
Definition: c.h:202
#define lfirst(lc)
Definition: pg_list.h:115
#define close(a)
Definition: win32.h:17
#define read(a, b, c)
Definition: win32.h:18
int trace_recovery ( int  trace_level)
void ValidatePgVersion ( const char *  path)

Definition at line 1213 of file miscinit.c.

References AllocateFile(), ereport, errcode(), errcode_for_file_access(), errdetail(), errhint(), errmsg(), FATAL, FreeFile(), MAXPGPATH, NULL, and snprintf().

Referenced by AuxiliaryProcessMain(), checkDataDir(), InitPostgres(), and PostgresMain().

1214 {
1215  char full_path[MAXPGPATH];
1216  FILE *file;
1217  int ret;
1218  long file_major,
1219  file_minor;
1220  long my_major = 0,
1221  my_minor = 0;
1222  char *endptr;
1223  const char *version_string = PG_VERSION;
1224 
1225  my_major = strtol(version_string, &endptr, 10);
1226  if (*endptr == '.')
1227  my_minor = strtol(endptr + 1, NULL, 10);
1228 
1229  snprintf(full_path, sizeof(full_path), "%s/PG_VERSION", path);
1230 
1231  file = AllocateFile(full_path, "r");
1232  if (!file)
1233  {
1234  if (errno == ENOENT)
1235  ereport(FATAL,
1236  (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1237  errmsg("\"%s\" is not a valid data directory",
1238  path),
1239  errdetail("File \"%s\" is missing.", full_path)));
1240  else
1241  ereport(FATAL,
1243  errmsg("could not open file \"%s\": %m", full_path)));
1244  }
1245 
1246  ret = fscanf(file, "%ld.%ld", &file_major, &file_minor);
1247  if (ret != 2)
1248  ereport(FATAL,
1249  (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1250  errmsg("\"%s\" is not a valid data directory",
1251  path),
1252  errdetail("File \"%s\" does not contain valid data.",
1253  full_path),
1254  errhint("You might need to initdb.")));
1255 
1256  FreeFile(file);
1257 
1258  if (my_major != file_major || my_minor != file_minor)
1259  ereport(FATAL,
1260  (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1261  errmsg("database files are incompatible with server"),
1262  errdetail("The data directory was initialized by PostgreSQL version %ld.%ld, "
1263  "which is not compatible with this version %s.",
1264  file_major, file_minor, version_string)));
1265 }
int errhint(const char *fmt,...)
Definition: elog.c:978
int errcode(int sqlerrcode)
Definition: elog.c:569
int snprintf(char *str, size_t count, const char *fmt,...) pg_attribute_printf(3
#define FATAL
Definition: elog.h:50
#define MAXPGPATH
int errdetail(const char *fmt,...)
Definition: elog.c:864
int errcode_for_file_access(void)
Definition: elog.c:592
FILE * AllocateFile(const char *name, const char *mode)
Definition: fd.c:1659
#define ereport(elevel, rest)
Definition: elog.h:132
#define NULL
Definition: c.h:202
int FreeFile(FILE *file)
Definition: fd.c:1842
int errmsg(const char *fmt,...)
Definition: elog.c:791

Variable Documentation

volatile bool ClientConnectionLost

Definition at line 32 of file globals.c.

Referenced by internal_flush(), and ProcessInterrupts().

PGDLLIMPORT int DateOrder
bool ExitOnAnyError

Definition at line 101 of file globals.c.

Referenced by BackgroundWriterMain(), CheckpointerMain(), and errstart().

bool IgnoreSystemIndexes
PGDLLIMPORT volatile uint32 InterruptHoldoffCount

Definition at line 33 of file globals.c.

Referenced by errfinish(), proc_exit_prepare(), and ProcessInterrupts().

PGDLLIMPORT int IntervalStyle
bool IsBackgroundWorker
PGDLLIMPORT bool IsUnderPostmaster

Definition at line 97 of file globals.c.

Referenced by _PG_init(), AutoVacuumShmemInit(), AuxiliaryProcessMain(), BackgroundWorkerShmemInit(), bootstrap_signals(), BootstrapModeMain(), BTreeShmemInit(), CheckMyDatabase(), CheckRecoveryConsistency(), CommitTsShmemInit(), CreateLWLocks(), CreateSharedMemoryAndSemaphores(), DebugFileOpen(), DetermineSafeOldestOffset(), dsm_attach(), dsm_create(), dsm_postmaster_startup(), EventTriggerDDLCommandEnd(), EventTriggerDDLCommandStart(), EventTriggerSQLDrop(), EventTriggerTableRewrite(), ForgetDatabaseFsyncRequests(), ForgetRelationFsyncRequests(), ForwardFsyncRequest(), GetNewMultiXactId(), GetNewTransactionId(), HandleStartupProcInterrupts(), heap_create_with_catalog(), init_ps_display(), InitCommunication(), InitializeSessionUserId(), InitializeSessionUserIdStandalone(), InitPostgres(), InitPostmasterChild(), InitProcess(), LWLockAcquireCommon(), mdinit(), MultiXactShmemInit(), PGSemaphoreCreate(), PGSharedMemoryReAttach(), pgss_shmem_startup(), PostgresMain(), process_postgres_switches(), process_settings(), ProcKill(), register_unlink(), RegisterBackgroundWorker(), RegisterDynamicBackgroundWorker(), RequestAddinLWLocks(), RequestAddinShmemSpace(), SendPostmasterSignal(), set_config_option(), set_config_sourcefile(), set_ps_display(), SetMultiXactIdLimit(), SetTransactionIdLimit(), ShmemInitStruct(), SimpleLruInit(), StartupXLOG(), superuser_arg(), SyncScanShmemInit(), TrimMultiXact(), TwoPhaseShmemInit(), verify_dictoptions(), XLogArchiveNotify(), and XLogWrite().

char* local_preload_libraries_string

Definition at line 1278 of file miscinit.c.

Referenced by process_session_preload_libraries().

Definition at line 54 of file miscinit.c.

AuxProcType MyAuxProcType

Definition at line 64 of file bootstrap.c.

Referenced by AuxiliaryProcessMain().

long MyCancelKey
PGDLLIMPORT Oid MyDatabaseId

Definition at line 73 of file globals.c.

Referenced by AfterTriggerSetState(), AlterDatabase(), AlterSchemaOwner_internal(), analyze_rel(), asyncQueueNotificationToEntry(), asyncQueueProcessPageEntries(), backend_read_statsfile(), CacheInvalidateCatalog(), CacheInvalidateHeapTuple(), CacheInvalidateRelcache(), CacheInvalidateRelcacheByTuple(), CheckLogicalDecodingRequirements(), CheckMyDatabase(), checkSharedDependencies(), classIdGetDbId(), CreateDecodingContext(), CreateInitDecodingContext(), CreateProceduralLanguage(), CreateSchemaCommand(), current_database(), database_to_xml_internal(), DeconstructQualifiedName(), do_analyze_rel(), do_autovacuum(), dropdb(), exec_object_restorecon(), ExpandColumnRefStar(), ExportSnapshot(), GetCurrentVirtualXIDs(), GetNewRelFileNode(), GetOldestXmin(), IdentifySystem(), ImportSnapshot(), InitializeParallelDSM(), InitPostgres(), InitTempTableNamespace(), lazy_vacuum_rel(), LocalExecuteInvalidationMessage(), LockDatabaseObject(), LockGXact(), logical_heap_rewrite_flush_mappings(), logical_rewrite_log_mapping(), map_sql_catalog_to_xmlschema_types(), map_sql_schema_to_xmlschema_types(), map_sql_table_to_xmlschema(), map_sql_type_to_xml_name(), movedb(), perform_relmap_update(), pg_namespace_aclmask(), pg_relation_filepath(), pgss_store(), pgstat_beshutdown_hook(), pgstat_bestart(), pgstat_fetch_stat_funcentry(), pgstat_fetch_stat_tabentry(), pgstat_report_analyze(), pgstat_report_deadlock(), pgstat_report_recovery_conflict(), pgstat_report_stat(), pgstat_report_tempfile(), pgstat_report_vacuum(), pgstat_reset_counters(), pgstat_reset_single_counter(), pgstat_send_funcstats(), pgstat_vacuum_stat(), PrepareToInvalidateCacheTuple(), PrepareTransaction(), ProcArrayInstallImportedXmin(), ProcArrayInstallRestoredXmin(), RangeVarGetAndCheckCreationNamespace(), RangeVarGetCreationNamespace(), RangeVarGetRelidExtended(), ReindexMultipleTables(), RelationInitLockInfo(), RelationInitPhysicalAddr(), RelationMapFinishBootstrap(), RenameDatabase(), RenameSchema(), ReplicationSlotCreate(), ScanPgRelation(), sepgsql_schema_post_create(), SetLocktagRelationOid(), shdepDropOwned(), shdepReassignOwned(), table_recheck_autovac(), transformColumnRef(), UnlockDatabaseObject(), UpdateLogicalMappings(), vac_truncate_clog(), vac_update_datfrozenxid(), vacuum_rel(), and XactLogCommitRecord().

PGDLLIMPORT int NBuffers

Definition at line 118 of file globals.c.

char OutputFileName[]

Definition at line 60 of file globals.c.

Referenced by AuxiliaryProcessMain(), DebugFileOpen(), and process_postgres_switches().

char pkglib_path[]

Definition at line 63 of file globals.c.

Referenced by getInstallationPaths(), InitStandaloneProcess(), and substitute_libpath_macro().

pid_t PostmasterPid
PGDLLIMPORT bool process_shared_preload_libraries_in_progress
PGDLLIMPORT volatile uint32 QueryCancelHoldoffCount

Definition at line 34 of file globals.c.

Referenced by errfinish(), and ProcessInterrupts().

char* session_preload_libraries_string

Definition at line 1276 of file miscinit.c.

Referenced by process_session_preload_libraries().

char* shared_preload_libraries_string

Definition at line 1277 of file miscinit.c.

Referenced by process_shared_preload_libraries().

int trace_recovery_messages

Definition at line 435 of file guc.c.

Referenced by StartupXLOG(), and trace_recovery().

bool VacuumCostActive
int VacuumCostBalance
int VacuumCostLimit
int VacuumCostPageDirty

Definition at line 125 of file globals.c.

Referenced by MarkBufferDirty(), and MarkBufferDirtyHint().

int VacuumCostPageHit

Definition at line 123 of file globals.c.

Referenced by ReadBuffer_common().

int VacuumCostPageMiss

Definition at line 124 of file globals.c.

Referenced by ReadBuffer_common().

int VacuumPageDirty

Definition at line 131 of file globals.c.

Referenced by lazy_vacuum_rel(), MarkBufferDirty(), MarkBufferDirtyHint(), and vacuum().

int VacuumPageHit

Definition at line 129 of file globals.c.

Referenced by lazy_vacuum_rel(), ReadBuffer_common(), and vacuum().

int VacuumPageMiss

Definition at line 130 of file globals.c.

Referenced by lazy_vacuum_rel(), ReadBuffer_common(), and vacuum().

PGDLLIMPORT int work_mem