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:
This graph shows which files directly or indirectly include this file:

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_NOFORCE_RLS   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)
 
bool stack_is_too_deep (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)
 
bool InNoForceRLSOperation (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)
 
bool RecheckDataDirLockFile (void)
 
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 401 of file miscadmin.h.

Referenced by ForwardFsyncRequest().

#define AmBootstrapProcess ( )    (MyAuxProcType == BootstrapProcess)

Definition at line 399 of file miscadmin.h.

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

Definition at line 400 of file miscadmin.h.

Referenced by HotStandbyActiveInReplay(), and mdinit().

#define AmWalReceiverProcess ( )    (MyAuxProcType == WalReceiverProcess)

Definition at line 404 of file miscadmin.h.

Referenced by get_sync_bit().

#define AmWalWriterProcess ( )    (MyAuxProcType == WalWriterProcess)

Definition at line 403 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:2833

Definition at line 96 of file miscadmin.h.

Referenced by _bt_buildadd(), _bt_steppage(), _bt_walk_left(), _crypt_blowfish_rn(), _hash_metapinit(), _hash_readnext(), _hash_readprev(), add_partial_path(), add_path(), analyze_rel(), ATRewriteTable(), backend_read_statsfile(), BipartiteMatch(), brin_evacuate_page(), brin_getinsertbuffer(), brin_vacuum_scan(), 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_des(), 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(), gather_readnext(), get_query_def(), get_rule_expr(), get_setop_query(), GetMultiXactIdMembers(), GetNewOidWithIndex(), GetNewRelFileNode(), getNextNearest(), ginbuild(), ginBuildCallback(), gingetbitmap(), 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(), lseg_inside_poly(), make_bounded_heap(), 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(), read_local_xlog_page(), refresh_matview_datafill(), regexp_fixed_prefix(), replace_text(), replace_text_regexp(), replorigin_create(), RequestCheckpoint(), revmap_extend_and_get_blkno(), sendAuthRequest(), sendDir(), set_rtable_names(), 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:656
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(), brin_initialize_empty_new_buffer(), 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(), gistvacuumpage(), 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(), TruncateMultiXact(), UpdateFullPageWrites(), vacuumLeafPage(), vacuumLeafRoot(), vacuumRedirectAndPlaceholder(), visibilitymap_set(), write_relmap_file(), writeListPage(), XLogBackgroundFlush(), XLogFlush(), and XLogInsertRecord().

#define GetProcessingMode ( )    Mode

Definition at line 366 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 444 of file miscadmin.h.

#define LOCK_FILE_LINE_LISTEN_ADDR   6

Definition at line 448 of file miscadmin.h.

Referenced by PostmasterMain(), and test_postmaster_connection().

#define LOCK_FILE_LINE_PID   1

Definition at line 443 of file miscadmin.h.

Referenced by test_postmaster_connection().

#define LOCK_FILE_LINE_PORT   4

Definition at line 446 of file miscadmin.h.

Referenced by get_sock_dir(), and test_postmaster_connection().

#define LOCK_FILE_LINE_SHMEM_KEY   7

Definition at line 449 of file miscadmin.h.

Referenced by CreateLockFile(), and InternalIpcMemoryCreate().

#define LOCK_FILE_LINE_SOCKET_DIR   5

Definition at line 447 of file miscadmin.h.

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

#define LOCK_FILE_LINE_START_TIME   3

Definition at line 445 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:656

Definition at line 123 of file miscadmin.h.

Referenced by CopyGetData(), and SocketBackend().

#define SECURITY_NOFORCE_RLS   0x0004

Definition at line 290 of file miscadmin.h.

Referenced by InNoForceRLSOperation(), ri_PerformCheck(), and ri_PlanCheck().

#define SECURITY_RESTRICTED_OPERATION   0x0002
#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(), brin_initialize_empty_new_buffer(), 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(), gistvacuumpage(), 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(), TruncateMultiXact(), 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 383 of file miscadmin.h.

Enumerator
BootstrapProcessing 
InitProcessing 
NormalProcessing 

Definition at line 353 of file miscadmin.h.

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

Function Documentation

void AddToDataDirLockFile ( int  target_line,
const char *  str 
)

Definition at line 1119 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().

1120 {
1121  int fd;
1122  int len;
1123  int lineno;
1124  char *srcptr;
1125  char *destptr;
1126  char srcbuffer[BLCKSZ];
1127  char destbuffer[BLCKSZ];
1128 
1129  fd = open(DIRECTORY_LOCK_FILE, O_RDWR | PG_BINARY, 0);
1130  if (fd < 0)
1131  {
1132  ereport(LOG,
1134  errmsg("could not open file \"%s\": %m",
1136  return;
1137  }
1138  len = read(fd, srcbuffer, sizeof(srcbuffer) - 1);
1139  if (len < 0)
1140  {
1141  ereport(LOG,
1143  errmsg("could not read from file \"%s\": %m",
1145  close(fd);
1146  return;
1147  }
1148  srcbuffer[len] = '\0';
1149 
1150  /*
1151  * Advance over lines we are not supposed to rewrite, then copy them to
1152  * destbuffer.
1153  */
1154  srcptr = srcbuffer;
1155  for (lineno = 1; lineno < target_line; lineno++)
1156  {
1157  if ((srcptr = strchr(srcptr, '\n')) == NULL)
1158  {
1159  elog(LOG, "incomplete data in \"%s\": found only %d newlines while trying to add line %d",
1160  DIRECTORY_LOCK_FILE, lineno - 1, target_line);
1161  close(fd);
1162  return;
1163  }
1164  srcptr++;
1165  }
1166  memcpy(destbuffer, srcbuffer, srcptr - srcbuffer);
1167  destptr = destbuffer + (srcptr - srcbuffer);
1168 
1169  /*
1170  * Write or rewrite the target line.
1171  */
1172  snprintf(destptr, destbuffer + sizeof(destbuffer) - destptr, "%s\n", str);
1173  destptr += strlen(destptr);
1174 
1175  /*
1176  * If there are more lines in the old file, append them to destbuffer.
1177  */
1178  if ((srcptr = strchr(srcptr, '\n')) != NULL)
1179  {
1180  srcptr++;
1181  snprintf(destptr, destbuffer + sizeof(destbuffer) - destptr, "%s",
1182  srcptr);
1183  }
1184 
1185  /*
1186  * And rewrite the data. Since we write in a single kernel call, this
1187  * update should appear atomic to onlookers.
1188  */
1189  len = strlen(destbuffer);
1190  errno = 0;
1191  if (lseek(fd, (off_t) 0, SEEK_SET) != 0 ||
1192  (int) write(fd, destbuffer, len) != len)
1193  {
1194  /* if write didn't set errno, assume problem is no disk space */
1195  if (errno == 0)
1196  errno = ENOSPC;
1197  ereport(LOG,
1199  errmsg("could not write to file \"%s\": %m",
1201  close(fd);
1202  return;
1203  }
1204  if (pg_fsync(fd) != 0)
1205  {
1206  ereport(LOG,
1208  errmsg("could not write to file \"%s\": %m",
1210  }
1211  if (close(fd) != 0)
1212  {
1213  ereport(LOG,
1215  errmsg("could not write to file \"%s\": %m",
1217  }
1218 }
#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:1007
int errcode_for_file_access(void)
Definition: elog.c:596
#define ereport(elevel, rest)
Definition: elog.h:132
#define NULL
Definition: c.h:215
int errmsg(const char *fmt,...)
Definition: elog.c:795
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 10835 of file xlog.c.

References BACKUP_LABEL_FILE.

Referenced by pg_is_in_backup(), and PostmasterStateMachine().

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

Definition at line 517 of file postinit.c.

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

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

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

Definition at line 10855 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().

10856 {
10857  struct stat stat_buf;
10858 
10859  /* if the backup_label file is not there, return */
10860  if (stat(BACKUP_LABEL_FILE, &stat_buf) < 0)
10861  return;
10862 
10863  /* remove leftover file from previously canceled backup if it exists */
10865 
10866  if (rename(BACKUP_LABEL_FILE, BACKUP_LABEL_OLD) != 0)
10867  {
10868  ereport(WARNING,
10870  errmsg("online backup mode was not canceled"),
10871  errdetail("File \"%s\" could not be renamed to \"%s\": %m.",
10873  return;
10874  }
10875 
10876  /* if the tablespace_map file is not there, return */
10877  if (stat(TABLESPACE_MAP, &stat_buf) < 0)
10878  {
10879  ereport(LOG,
10880  (errmsg("online backup mode canceled"),
10881  errdetail("File \"%s\" was renamed to \"%s\".",
10883  return;
10884  }
10885 
10886  /* remove leftover file from previously canceled backup if it exists */
10888 
10889  if (rename(TABLESPACE_MAP, TABLESPACE_MAP_OLD) == 0)
10890  {
10891  ereport(LOG,
10892  (errmsg("online backup mode canceled"),
10893  errdetail("Files \"%s\" and \"%s\" were renamed to "
10894  "\"%s\" and \"%s\", respectively.",
10897  }
10898  else
10899  {
10900  ereport(WARNING,
10902  errmsg("online backup mode canceled"),
10903  errdetail("File \"%s\" was renamed to \"%s\", but "
10904  "file \"%s\" could not be renamed to \"%s\": %m.",
10907  }
10908 }
#define LOG
Definition: elog.h:26
#define BACKUP_LABEL_OLD
Definition: xlog.h:287
#define TABLESPACE_MAP
Definition: xlog.h:289
struct stat stat_buf
Definition: pg_standby.c:101
int errdetail(const char *fmt,...)
Definition: elog.c:868
int errcode_for_file_access(void)
Definition: elog.c:596
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:290
int errmsg(const char *fmt,...)
Definition: elog.c:795
#define BACKUP_LABEL_FILE
Definition: xlog.h:286
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:659
#define FATAL
Definition: elog.h:50
int errcode_for_file_access(void)
Definition: elog.c:596
#define ereport(elevel, rest)
Definition: elog.h:132
int errmsg(const char *fmt,...)
Definition: elog.c:795
char * DataDir
Definition: globals.c:58
void check_stack_depth ( void  )

Definition at line 3083 of file postgres.c.

References ereport, errcode(), errhint(), errmsg(), ERROR, max_stack_depth, and stack_is_too_deep().

Referenced by addone(), clean_fakeval_intree(), clean_NOT_intree(), cntsize(), contains_required_value(), convertJsonbValue(), copyObject(), Cover(), datum_to_json(), datum_to_jsonb(), 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(), hash_range(), hk_depth_search(), infix(), inline_set_returning_function(), int_query_opr_selec(), JsonbDeepContains(), JumbleExpr(), ltree_execute(), makepol(), maketree(), MatchText(), parse_array(), parse_object(), plainnode(), plperl_hash_from_tuple(), plperl_sv_to_datum(), QT2QTN(), QTNBinary(), QTNClearFlags(), QTNCopy(), QTNFree(), QTNodeCompare(), QTNSort(), QTNTernary(), range_cmp(), range_in(), range_out(), range_recv(), range_send(), raw_expression_tree_walker(), record_cmp(), record_eq(), record_in(), record_out(), record_recv(), record_send(), setPath(), split_array(), tqueueWalk(), transformExprRecurse(), transformSetOperationTree(), TS_execute(), TS_execute_ternary(), tsquery_opr_selec(), tsquery_requires_match(), and TupleQueueRemap().

3084 {
3085  if (stack_is_too_deep())
3086  {
3087  ereport(ERROR,
3088  (errcode(ERRCODE_STATEMENT_TOO_COMPLEX),
3089  errmsg("stack depth limit exceeded"),
3090  errhint("Increase the configuration parameter \"max_stack_depth\" (currently %dkB), "
3091  "after ensuring the platform's stack depth limit is adequate.",
3092  max_stack_depth)));
3093  }
3094 }
int errhint(const char *fmt,...)
Definition: elog.c:982
int errcode(int sqlerrcode)
Definition: elog.c:573
#define ERROR
Definition: elog.h:41
#define ereport(elevel, rest)
Definition: elog.h:132
int max_stack_depth
Definition: postgres.c:94
int errmsg(const char *fmt,...)
Definition: elog.c:795
bool stack_is_too_deep(void)
Definition: postgres.c:3097
void CreateDataDirLockFile ( bool  amPostmaster)

Definition at line 1043 of file miscinit.c.

References CreateLockFile(), DataDir, and DIRECTORY_LOCK_FILE.

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

1044 {
1045  CreateLockFile(DIRECTORY_LOCK_FILE, amPostmaster, "", true, DataDir);
1046 }
#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:738
char * DataDir
Definition: globals.c:58
void CreateSocketLockFile ( const char *  socketfile,
bool  amPostmaster,
const char *  socketDir 
)

Definition at line 1052 of file miscinit.c.

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

1054 {
1055  char lockfile[MAXPGPATH];
1056 
1057  snprintf(lockfile, sizeof(lockfile), "%s.lock", socketfile);
1058  CreateLockFile(lockfile, amPostmaster, socketDir, false, socketfile);
1059 }
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:738
#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:659
#define OidIsValid(objectId)
Definition: c.h:519
static Oid AuthenticatedUserId
Definition: miscinit.c:153
Oid GetCurrentRoleId ( void  )

Definition at line 616 of file miscinit.c.

References InvalidOid, OuterUserId, and SetRoleIsActive.

Referenced by show_role().

617 {
618  if (SetRoleIsActive)
619  return OuterUserId;
620  else
621  return InvalidOid;
622 }
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:659
static Oid OuterUserId
Definition: miscinit.c:155
#define OidIsValid(objectId)
Definition: c.h:519
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:659
static Oid SessionUserId
Definition: miscinit.c:154
#define OidIsValid(objectId)
Definition: c.h:519
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(), AlterOperator(), 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(), brin_summarize_new_values(), build_simple_rel(), 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(), CreateExtensionInternal(), 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(), gin_clean_pending_list(), 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(), RemoveRoleFromObjectPolicy(), 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(), vacuum_rel(), ValidateJoinEstimator(), and ValidateRestrictionEstimator().

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

Definition at line 428 of file miscinit.c.

References CurrentUserId, and InLocalUserIdChange().

429 {
430  *userid = CurrentUserId;
431  *sec_def_context = InLocalUserIdChange();
432 }
bool InLocalUserIdChange(void)
Definition: miscinit.c:397
static Oid CurrentUserId
Definition: miscinit.c:156
void GetUserIdAndSecContext ( Oid userid,
int *  sec_context 
)
char* GetUserNameFromId ( Oid  roleid,
bool  noerr 
)

Definition at line 672 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(), RemoveRoleFromObjectPolicy(), session_user(), and timetravel().

673 {
674  HeapTuple tuple;
675  char *result;
676 
677  tuple = SearchSysCache1(AUTHOID, ObjectIdGetDatum(roleid));
678  if (!HeapTupleIsValid(tuple))
679  {
680  if (!noerr)
681  ereport(ERROR,
682  (errcode(ERRCODE_UNDEFINED_OBJECT),
683  errmsg("invalid role OID: %u", roleid)));
684  result = NULL;
685  }
686  else
687  {
688  result = pstrdup(NameStr(((Form_pg_authid) GETSTRUCT(tuple))->rolname));
689  ReleaseSysCache(tuple);
690  }
691  return result;
692 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:631
char * pstrdup(const char *in)
Definition: mcxt.c:1162
int errcode(int sqlerrcode)
Definition: elog.c:573
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:141
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:990
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define NULL
Definition: c.h:215
int errmsg(const char *fmt,...)
Definition: elog.c:795
#define NameStr(name)
Definition: c.h:483
bool has_rolreplication ( Oid  roleid)

Definition at line 455 of file miscinit.c.

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

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

456 {
457  bool result = false;
458  HeapTuple utup;
459 
460  utup = SearchSysCache1(AUTHOID, ObjectIdGetDatum(roleid));
461  if (HeapTupleIsValid(utup))
462  {
463  result = ((Form_pg_authid) GETSTRUCT(utup))->rolreplication;
464  ReleaseSysCache(utup);
465  }
466  return result;
467 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:631
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:141
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:990
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
void InitializeMaxBackends ( void  )

Definition at line 495 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().

496 {
497  Assert(MaxBackends == 0);
498 
499  /* the extra unit accounts for the autovacuum launcher */
502 
503  /* internal error because the values were all checked previously */
505  elog(ERROR, "too many backends configured");
506 }
#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:656
int max_worker_processes
Definition: globals.c:120
#define elog
Definition: elog.h:228
void InitializeSessionUserId ( const char *  rolename,
Oid  useroid 
)

Definition at line 473 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().

474 {
475  HeapTuple roleTup;
476  Form_pg_authid rform;
477 
478  /*
479  * Don't do scans if we're bootstrapping, none of the system catalogs
480  * exist yet, and they should be owned by postgres anyway.
481  */
483 
484  /* call only once */
486 
487  if (rolename != NULL)
488  roleTup = SearchSysCache1(AUTHNAME, PointerGetDatum(rolename));
489  else
490  roleTup = SearchSysCache1(AUTHOID, ObjectIdGetDatum(roleid));
491  if (!HeapTupleIsValid(roleTup))
492  ereport(FATAL,
493  (errcode(ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION),
494  errmsg("role \"%s\" does not exist", rolename)));
495 
496  rform = (Form_pg_authid) GETSTRUCT(roleTup);
497  roleid = HeapTupleGetOid(roleTup);
498 
499  AuthenticatedUserId = roleid;
500  AuthenticatedUserIsSuperuser = rform->rolsuper;
501 
502  /* This sets OuterUserId/CurrentUserId too */
504 
505  /* Also mark our PGPROC entry with the authenticated user id */
506  /* (We assume this is an atomic store so no lock is needed) */
507  MyProc->roleId = roleid;
508 
509  /*
510  * These next checks are not enforced when in standalone mode, so that
511  * there is a way to recover from sillinesses like "UPDATE pg_authid SET
512  * rolcanlogin = false;".
513  */
514  if (IsUnderPostmaster)
515  {
516  /*
517  * Is role allowed to login at all?
518  */
519  if (!rform->rolcanlogin)
520  ereport(FATAL,
521  (errcode(ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION),
522  errmsg("role \"%s\" is not permitted to log in",
523  rolename)));
524 
525  /*
526  * Check connection limit for this role.
527  *
528  * There is a race condition here --- we create our PGPROC before
529  * checking for other PGPROCs. If two backends did this at about the
530  * same time, they might both think they were over the limit, while
531  * ideally one should succeed and one fail. Getting that to work
532  * exactly seems more trouble than it is worth, however; instead we
533  * just document that the connection limit is approximate.
534  */
535  if (rform->rolconnlimit >= 0 &&
537  CountUserBackends(roleid) > rform->rolconnlimit)
538  ereport(FATAL,
539  (errcode(ERRCODE_TOO_MANY_CONNECTIONS),
540  errmsg("too many connections for role \"%s\"",
541  rolename)));
542  }
543 
544  /* Record username and superuser status as GUC settings too */
545  SetConfigOption("session_authorization", rolename,
547  SetConfigOption("is_superuser",
548  AuthenticatedUserIsSuperuser ? "on" : "off",
550 
551  ReleaseSysCache(roleTup);
552 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:631
#define AssertState(condition)
Definition: c.h:659
PGPROC * MyProc
Definition: proc.c:63
#define PointerGetDatum(X)
Definition: postgres.h:564
Oid roleId
Definition: proc.h:103
int errcode(int sqlerrcode)
Definition: elog.c:573
#define OidIsValid(objectId)
Definition: c.h:519
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:141
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:6460
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:990
#define HeapTupleIsValid(tuple)
Definition: htup.h:77
#define NULL
Definition: c.h:215
int CountUserBackends(Oid roleid)
Definition: procarray.c:2757
#define IsBootstrapProcessingMode()
Definition: miscadmin.h:362
int errmsg(const char *fmt,...)
Definition: elog.c:795
#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 559 of file miscinit.c.

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

Referenced by InitPostgres().

560 {
561  /*
562  * This function should only be called in single-user mode, in autovacuum
563  * workers, and in background workers.
564  */
566 
567  /* call only once */
569 
572 
574 }
#define AssertState(condition)
Definition: c.h:659
#define OidIsValid(objectId)
Definition: c.h:519
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 558 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().

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

References SECURITY_LOCAL_USERID_CHANGE, and SecurityRestrictionContext.

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

398 {
400 }
static int SecurityRestrictionContext
Definition: miscinit.c:162
#define SECURITY_LOCAL_USERID_CHANGE
Definition: miscadmin.h:288
bool InNoForceRLSOperation ( void  )

Definition at line 415 of file miscinit.c.

References SECURITY_NOFORCE_RLS, and SecurityRestrictionContext.

Referenced by check_enable_rls().

416 {
418 }
static int SecurityRestrictionContext
Definition: miscinit.c:162
#define SECURITY_NOFORCE_RLS
Definition: miscadmin.h:290
bool InSecurityRestrictedOperation ( void  )

Definition at line 406 of file miscinit.c.

References SECURITY_RESTRICTED_OPERATION, and SecurityRestrictionContext.

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

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

Definition at line 1459 of file miscinit.c.

References get_locale_path(), MAXPGPATH, and my_exec_path.

Referenced by _PG_init().

1460 {
1461 #ifdef ENABLE_NLS
1462  if (my_exec_path[0] != '\0')
1463  {
1464  char locale_path[MAXPGPATH];
1465 
1466  get_locale_path(my_exec_path, locale_path);
1467  bindtextdomain(domain, locale_path);
1468  pg_bind_textdomain_codeset(domain);
1469  }
1470 #endif
1471 }
#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 436 of file postinit.c.

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

Referenced by BackendRun(), and process_startup_options().

437 {
438  StringInfoData s;
439 
440  initStringInfo(&s);
441 
442  while (*optstr)
443  {
444  bool last_was_escape = false;
445 
446  resetStringInfo(&s);
447 
448  /* skip over leading space */
449  while (isspace((unsigned char) *optstr))
450  optstr++;
451 
452  if (*optstr == '\0')
453  break;
454 
455  /*
456  * Parse a single option, stopping at the first space, unless it's
457  * escaped.
458  */
459  while (*optstr)
460  {
461  if (isspace((unsigned char) *optstr) && !last_was_escape)
462  break;
463 
464  if (!last_was_escape && *optstr == '\\')
465  last_was_escape = true;
466  else
467  {
468  last_was_escape = false;
469  appendStringInfoChar(&s, *optstr);
470  }
471 
472  optstr++;
473  }
474 
475  /* now store the option in the next argv[] position */
476  argv[(*argcp)++] = pstrdup(s.data);
477  }
478 
479  pfree(s.data);
480 }
char * pstrdup(const char *in)
Definition: mcxt.c:1162
void pfree(void *pointer)
Definition: mcxt.c:995
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 265 of file utility.c.

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

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

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

Definition at line 246 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().

247 {
248  if (IsInParallelMode())
249  ereport(ERROR,
250  (errcode(ERRCODE_INVALID_TRANSACTION_STATE),
251  /* translator: %s is name of a SQL command, eg CREATE */
252  errmsg("cannot execute %s during a parallel operation",
253  cmdname)));
254 }
int errcode(int sqlerrcode)
Definition: elog.c:573
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:795
void PreventCommandIfReadOnly ( const char *  cmdname)

Definition at line 228 of file utility.c.

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

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

229 {
230  if (XactReadOnly)
231  ereport(ERROR,
232  (errcode(ERRCODE_READ_ONLY_SQL_TRANSACTION),
233  /* translator: %s is name of a SQL command, eg CREATE */
234  errmsg("cannot execute %s in a read-only transaction",
235  cmdname)));
236 }
int errcode(int sqlerrcode)
Definition: elog.c:573
#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:795
void process_session_preload_libraries ( void  )

Definition at line 1448 of file miscinit.c.

References load_libraries(), local_preload_libraries_string, and session_preload_libraries_string.

Referenced by PostgresMain().

1449 {
1451  "session_preload_libraries",
1452  false);
1454  "local_preload_libraries",
1455  true);
1456 }
static void load_libraries(const char *libraries, const char *gucname, bool restricted)
Definition: miscinit.c:1380
char * local_preload_libraries_string
Definition: miscinit.c:1368
char * session_preload_libraries_string
Definition: miscinit.c:1366
void process_shared_preload_libraries ( void  )

Definition at line 1435 of file miscinit.c.

References load_libraries(), process_shared_preload_libraries_in_progress, and shared_preload_libraries_string.

Referenced by PostmasterMain().

1436 {
1439  "shared_preload_libraries",
1440  false);
1442 }
bool process_shared_preload_libraries_in_progress
Definition: miscinit.c:1371
char * shared_preload_libraries_string
Definition: miscinit.c:1367
static void load_libraries(const char *libraries, const char *gucname, bool restricted)
Definition: miscinit.c:1380
void ProcessInterrupts ( void  )

Definition at line 2833 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().

2834 {
2835  /* OK to accept any interrupts now? */
2836  if (InterruptHoldoffCount != 0 || CritSectionCount != 0)
2837  return;
2838  InterruptPending = false;
2839 
2840  if (ProcDiePending)
2841  {
2842  ProcDiePending = false;
2843  QueryCancelPending = false; /* ProcDie trumps QueryCancel */
2844  LockErrorCleanup();
2845  /* As in quickdie, don't risk sending to client during auth */
2849  ereport(FATAL,
2850  (errcode(ERRCODE_QUERY_CANCELED),
2851  errmsg("canceling authentication due to timeout")));
2852  else if (IsAutoVacuumWorkerProcess())
2853  ereport(FATAL,
2854  (errcode(ERRCODE_ADMIN_SHUTDOWN),
2855  errmsg("terminating autovacuum process due to administrator command")));
2857  {
2859  ereport(FATAL,
2860  (errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),
2861  errmsg("terminating connection due to conflict with recovery"),
2863  }
2864  else if (RecoveryConflictPending)
2865  {
2866  /* Currently there is only one non-retryable recovery conflict */
2869  ereport(FATAL,
2870  (errcode(ERRCODE_DATABASE_DROPPED),
2871  errmsg("terminating connection due to conflict with recovery"),
2873  }
2874  else
2875  ereport(FATAL,
2876  (errcode(ERRCODE_ADMIN_SHUTDOWN),
2877  errmsg("terminating connection due to administrator command")));
2878  }
2880  {
2881  QueryCancelPending = false; /* lost connection trumps QueryCancel */
2882  LockErrorCleanup();
2883  /* don't send to client, we already know the connection to be dead. */
2885  ereport(FATAL,
2886  (errcode(ERRCODE_CONNECTION_FAILURE),
2887  errmsg("connection to client lost")));
2888  }
2889 
2890  /*
2891  * If a recovery conflict happens while we are waiting for input from the
2892  * client, the client is presumably just sitting idle in a transaction,
2893  * preventing recovery from making progress. Terminate the connection to
2894  * dislodge it.
2895  */
2897  {
2898  QueryCancelPending = false; /* this trumps QueryCancel */
2899  RecoveryConflictPending = false;
2900  LockErrorCleanup();
2902  ereport(FATAL,
2903  (errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),
2904  errmsg("terminating connection due to conflict with recovery"),
2906  errhint("In a moment you should be able to reconnect to the"
2907  " database and repeat your command.")));
2908  }
2909 
2910  if (QueryCancelPending)
2911  {
2912  /*
2913  * Don't allow query cancel interrupts while reading input from the
2914  * client, because we might lose sync in the FE/BE protocol. (Die
2915  * interrupts are OK, because we won't read any further messages from
2916  * the client in that case.)
2917  */
2918  if (QueryCancelHoldoffCount != 0)
2919  {
2920  /*
2921  * Re-arm InterruptPending so that we process the cancel request
2922  * as soon as we're done reading the message.
2923  */
2924  InterruptPending = true;
2925  return;
2926  }
2927 
2928  QueryCancelPending = false;
2929 
2930  /*
2931  * If LOCK_TIMEOUT and STATEMENT_TIMEOUT indicators are both set, we
2932  * prefer to report the former; but be sure to clear both.
2933  */
2935  {
2937  LockErrorCleanup();
2938  ereport(ERROR,
2939  (errcode(ERRCODE_LOCK_NOT_AVAILABLE),
2940  errmsg("canceling statement due to lock timeout")));
2941  }
2943  {
2944  LockErrorCleanup();
2945  ereport(ERROR,
2946  (errcode(ERRCODE_QUERY_CANCELED),
2947  errmsg("canceling statement due to statement timeout")));
2948  }
2950  {
2951  LockErrorCleanup();
2952  ereport(ERROR,
2953  (errcode(ERRCODE_QUERY_CANCELED),
2954  errmsg("canceling autovacuum task")));
2955  }
2957  {
2958  RecoveryConflictPending = false;
2959  LockErrorCleanup();
2961  ereport(ERROR,
2962  (errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),
2963  errmsg("canceling statement due to conflict with recovery"),
2965  }
2966 
2967  /*
2968  * If we are reading a command from the client, just ignore the cancel
2969  * request --- sending an extra error message won't accomplish
2970  * anything. Otherwise, go ahead and throw the error.
2971  */
2972  if (!DoingCommandRead)
2973  {
2974  LockErrorCleanup();
2975  ereport(ERROR,
2976  (errcode(ERRCODE_QUERY_CANCELED),
2977  errmsg("canceling statement due to user request")));
2978  }
2979  }
2980 
2983 }
volatile uint32 InterruptHoldoffCount
Definition: globals.c:33
int errhint(const char *fmt,...)
Definition: elog.c:982
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:573
volatile bool QueryCancelPending
Definition: globals.c:30
volatile bool ClientConnectionLost
Definition: globals.c:32
bool ClientAuthInProgress
Definition: postmaster.c:346
#define ERROR
Definition: elog.h:41
#define FATAL
Definition: elog.h:50
void HandleParallelMessages(void)
Definition: parallel.c:694
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:674
static ProcSignalReason RecoveryConflictReason
Definition: postgres.c:166
static bool RecoveryConflictPending
Definition: postgres.c:164
static bool RecoveryConflictRetryable
Definition: postgres.c:165
bool get_timeout_indicator(TimeoutId id, bool reset_indicator)
Definition: timeout.c:633
static int errdetail_recovery_conflict(void)
Definition: postgres.c:2248
volatile bool InterruptPending
Definition: globals.c:29
#define Assert(condition)
Definition: c.h:656
static bool DoingCommandRead
Definition: postgres.c:142
bool ParallelMessagePending
Definition: parallel.c:94
volatile bool ProcDiePending
Definition: globals.c:31
int errmsg(const char *fmt,...)
Definition: elog.c:795
CommandDest whereToSendOutput
Definition: postgres.c:86
bool RecheckDataDirLockFile ( void  )

Definition at line 1233 of file miscinit.c.

References close, DIRECTORY_LOCK_FILE, ereport, errcode_for_file_access(), errmsg(), fd(), LOG, PG_BINARY, and read.

Referenced by ServerLoop().

1234 {
1235  int fd;
1236  int len;
1237  long file_pid;
1238  char buffer[BLCKSZ];
1239 
1240  fd = open(DIRECTORY_LOCK_FILE, O_RDWR | PG_BINARY, 0);
1241  if (fd < 0)
1242  {
1243  /*
1244  * There are many foreseeable false-positive error conditions. For
1245  * safety, fail only on enumerated clearly-something-is-wrong
1246  * conditions.
1247  */
1248  switch (errno)
1249  {
1250  case ENOENT:
1251  case ENOTDIR:
1252  /* disaster */
1253  ereport(LOG,
1255  errmsg("could not open file \"%s\": %m",
1257  return false;
1258  default:
1259  /* non-fatal, at least for now */
1260  ereport(LOG,
1262  errmsg("could not open file \"%s\": %m; continuing anyway",
1264  return true;
1265  }
1266  }
1267  len = read(fd, buffer, sizeof(buffer) - 1);
1268  if (len < 0)
1269  {
1270  ereport(LOG,
1272  errmsg("could not read from file \"%s\": %m",
1274  close(fd);
1275  return true; /* treat read failure as nonfatal */
1276  }
1277  buffer[len] = '\0';
1278  close(fd);
1279  file_pid = atol(buffer);
1280  if (file_pid == getpid())
1281  return true; /* all is well */
1282 
1283  /* Trouble: someone's overwritten the lock file */
1284  ereport(LOG,
1285  (errmsg("lock file \"%s\" contains wrong PID: %ld instead of %ld",
1286  DIRECTORY_LOCK_FILE, file_pid, (long) getpid())));
1287  return false;
1288 }
#define DIRECTORY_LOCK_FILE
Definition: miscinit.c:52
#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:1007
int errcode_for_file_access(void)
Definition: elog.c:596
#define ereport(elevel, rest)
Definition: elog.h:132
int errmsg(const char *fmt,...)
Definition: elog.c:795
#define close(a)
Definition: win32.h:17
#define read(a, b, c)
Definition: win32.h:18
void restore_stack_base ( pg_stack_base_t  base)

Definition at line 3061 of file postgres.c.

References stack_base_ptr.

3062 {
3063 #if defined(__ia64__) || defined(__ia64)
3064  stack_base_ptr = base.stack_base_ptr;
3065  register_stack_base_ptr = base.register_stack_base_ptr;
3066 #else
3067  stack_base_ptr = base;
3068 #endif
3069 }
char * stack_base_ptr
Definition: postgres.c:115
pg_stack_base_t set_stack_base ( void  )

Definition at line 3030 of file postgres.c.

References stack_base_ptr.

Referenced by PostmasterMain().

3031 {
3032  char stack_base;
3033  pg_stack_base_t old;
3034 
3035 #if defined(__ia64__) || defined(__ia64)
3036  old.stack_base_ptr = stack_base_ptr;
3037  old.register_stack_base_ptr = register_stack_base_ptr;
3038 #else
3039  old = stack_base_ptr;
3040 #endif
3041 
3042  /* Set up reference point for stack depth checking */
3043  stack_base_ptr = &stack_base;
3044 #if defined(__ia64__) || defined(__ia64)
3045  register_stack_base_ptr = ia64_get_bsp();
3046 #endif
3047 
3048  return old;
3049 }
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 637 of file miscinit.c.

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

Referenced by assign_role().

638 {
639  /*
640  * Get correct info if it's SET ROLE NONE
641  *
642  * If SessionUserId hasn't been set yet, just do nothing --- the eventual
643  * SetSessionUserId call will fix everything. This is needed since we
644  * will get called during GUC initialization.
645  */
646  if (!OidIsValid(roleid))
647  {
649  return;
650 
651  roleid = SessionUserId;
653 
654  SetRoleIsActive = false;
655  }
656  else
657  SetRoleIsActive = true;
658 
659  SetOuterUserId(roleid);
660 
661  SetConfigOption("is_superuser",
662  is_superuser ? "on" : "off",
664 }
static Oid SessionUserId
Definition: miscinit.c:154
static void SetOuterUserId(Oid userid)
Definition: miscinit.c:293
#define OidIsValid(objectId)
Definition: c.h:519
void SetConfigOption(const char *name, const char *value, GucContext context, GucSource source)
Definition: guc.c:6460
static bool SetRoleIsActive
Definition: miscinit.c:165
static bool SessionUserIsSuperuser
Definition: miscinit.c:160
bool is_superuser(void)
Definition: common.c:1745
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:43
char * DatabasePath
Definition: globals.c:81
#define Assert(condition)
Definition: c.h:656
char * MemoryContextStrdup(MemoryContext context, const char *string)
Definition: mcxt.c:1149
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:658
#define free(a)
Definition: header.h:60
char * DataDir
Definition: globals.c:58
void SetSessionAuthorization ( Oid  userid,
bool  is_superuser 
)

Definition at line 591 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().

592 {
593  /* Must have authenticated already, else can't make permission check */
595 
596  if (userid != AuthenticatedUserId &&
598  ereport(ERROR,
599  (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
600  errmsg("permission denied to set session authorization")));
601 
603 
604  SetConfigOption("is_superuser",
605  is_superuser ? "on" : "off",
607 }
#define AssertState(condition)
Definition: c.h:659
int errcode(int sqlerrcode)
Definition: elog.c:573
#define OidIsValid(objectId)
Definition: c.h:519
#define ERROR
Definition: elog.h:41
void SetConfigOption(const char *name, const char *value, GucContext context, GucSource source)
Definition: guc.c:6460
static bool AuthenticatedUserIsSuperuser
Definition: miscinit.c:159
#define ereport(elevel, rest)
Definition: elog.h:132
bool is_superuser(void)
Definition: common.c:1745
int errmsg(const char *fmt,...)
Definition: elog.c:795
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 435 of file miscinit.c.

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

436 {
437  /* We throw the same error SET ROLE would. */
439  ereport(ERROR,
440  (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
441  errmsg("cannot set parameter \"%s\" within security-restricted operation",
442  "role")));
443  CurrentUserId = userid;
444  if (sec_def_context)
446  else
448 }
int errcode(int sqlerrcode)
Definition: elog.c:573
#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:288
static Oid CurrentUserId
Definition: miscinit.c:156
bool InSecurityRestrictedOperation(void)
Definition: miscinit.c:406
int errmsg(const char *fmt,...)
Definition: elog.c:795
void SetUserIdAndSecContext ( Oid  userid,
int  sec_context 
)
bool stack_is_too_deep ( void  )

Definition at line 3097 of file postgres.c.

References max_stack_depth_bytes, NULL, and stack_base_ptr.

Referenced by check_stack_depth(), and rstacktoodeep().

3098 {
3099  char stack_top_loc;
3100  long stack_depth;
3101 
3102  /*
3103  * Compute distance from reference point to my local variables
3104  */
3105  stack_depth = (long) (stack_base_ptr - &stack_top_loc);
3106 
3107  /*
3108  * Take abs value, since stacks grow up on some machines, down on others
3109  */
3110  if (stack_depth < 0)
3111  stack_depth = -stack_depth;
3112 
3113  /*
3114  * Trouble?
3115  *
3116  * The test on stack_base_ptr prevents us from erroring out if called
3117  * during process setup or in a non-backend process. Logically it should
3118  * be done first, but putting it here avoids wasting cycles during normal
3119  * cases.
3120  */
3121  if (stack_depth > max_stack_depth_bytes &&
3122  stack_base_ptr != NULL)
3123  return true;
3124 
3125  /*
3126  * On IA64 there is a separate "register" stack that requires its own
3127  * independent check. For this, we have to measure the change in the
3128  * "BSP" pointer from PostgresMain to here. Logic is just as above,
3129  * except that we know IA64's register stack grows up.
3130  *
3131  * Note we assume that the same max_stack_depth applies to both stacks.
3132  */
3133 #if defined(__ia64__) || defined(__ia64)
3134  stack_depth = (long) (ia64_get_bsp() - register_stack_base_ptr);
3135 
3136  if (stack_depth > max_stack_depth_bytes &&
3137  register_stack_base_ptr != NULL)
3138  return true;
3139 #endif /* IA64 */
3140 
3141  return false;
3142 }
static long max_stack_depth_bytes
Definition: postgres.c:107
#define NULL
Definition: c.h:215
char * stack_base_ptr
Definition: postgres.c:115
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_receiver(), 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(), tuple_data_split(), 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:519
#define SearchSysCache1(cacheId, key1)
Definition: syscache.h:141
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:990
#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:92
static Latch LocalLatchData
Definition: miscinit.c:59
void SetLatch(volatile Latch *latch)
Definition: unix_latch.c:520
#define NULL
Definition: c.h:215
#define Assert(condition)
Definition: c.h:656
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:92
static Latch LocalLatchData
Definition: miscinit.c:59
void SetLatch(volatile Latch *latch)
Definition: unix_latch.c:520
#define NULL
Definition: c.h:215
#define Assert(condition)
Definition: c.h:656
struct Latch * MyLatch
Definition: globals.c:50
void TouchSocketLockFiles ( void  )

Definition at line 1070 of file miscinit.c.

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

Referenced by ServerLoop().

1071 {
1072  ListCell *l;
1073 
1074  foreach(l, lock_files)
1075  {
1076  char *socketLockFile = (char *) lfirst(l);
1077 
1078  /* No need to touch the data directory lock file, we trust */
1079  if (strcmp(socketLockFile, DIRECTORY_LOCK_FILE) == 0)
1080  continue;
1081 
1082  /*
1083  * utime() is POSIX standard, utimes() is a common alternative; if we
1084  * have neither, fall back to actually reading the file (which only
1085  * sets the access time not mod time, but that should be enough in
1086  * most cases). In all paths, we ignore errors.
1087  */
1088 #ifdef HAVE_UTIME
1089  utime(socketLockFile, NULL);
1090 #else /* !HAVE_UTIME */
1091 #ifdef HAVE_UTIMES
1092  utimes(socketLockFile, NULL);
1093 #else /* !HAVE_UTIMES */
1094  int fd;
1095  char buffer[1];
1096 
1097  fd = open(socketLockFile, O_RDONLY | PG_BINARY, 0);
1098  if (fd >= 0)
1099  {
1100  read(fd, buffer, sizeof(buffer));
1101  close(fd);
1102  }
1103 #endif /* HAVE_UTIMES */
1104 #endif /* HAVE_UTIME */
1105  }
1106 }
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:1007
#define NULL
Definition: c.h:215
#define lfirst(lc)
Definition: pg_list.h:106
#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 1303 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().

1304 {
1305  char full_path[MAXPGPATH];
1306  FILE *file;
1307  int ret;
1308  long file_major,
1309  file_minor;
1310  long my_major = 0,
1311  my_minor = 0;
1312  char *endptr;
1313  const char *version_string = PG_VERSION;
1314 
1315  my_major = strtol(version_string, &endptr, 10);
1316  if (*endptr == '.')
1317  my_minor = strtol(endptr + 1, NULL, 10);
1318 
1319  snprintf(full_path, sizeof(full_path), "%s/PG_VERSION", path);
1320 
1321  file = AllocateFile(full_path, "r");
1322  if (!file)
1323  {
1324  if (errno == ENOENT)
1325  ereport(FATAL,
1326  (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1327  errmsg("\"%s\" is not a valid data directory",
1328  path),
1329  errdetail("File \"%s\" is missing.", full_path)));
1330  else
1331  ereport(FATAL,
1333  errmsg("could not open file \"%s\": %m", full_path)));
1334  }
1335 
1336  ret = fscanf(file, "%ld.%ld", &file_major, &file_minor);
1337  if (ret != 2)
1338  ereport(FATAL,
1339  (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1340  errmsg("\"%s\" is not a valid data directory",
1341  path),
1342  errdetail("File \"%s\" does not contain valid data.",
1343  full_path),
1344  errhint("You might need to initdb.")));
1345 
1346  FreeFile(file);
1347 
1348  if (my_major != file_major || my_minor != file_minor)
1349  ereport(FATAL,
1350  (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1351  errmsg("database files are incompatible with server"),
1352  errdetail("The data directory was initialized by PostgreSQL version %ld.%ld, "
1353  "which is not compatible with this version %s.",
1354  file_major, file_minor, version_string)));
1355 }
int errhint(const char *fmt,...)
Definition: elog.c:982
int errcode(int sqlerrcode)
Definition: elog.c:573
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:868
int errcode_for_file_access(void)
Definition: elog.c:596
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:215
int FreeFile(FILE *file)
Definition: fd.c:1842
int errmsg(const char *fmt,...)
Definition: elog.c:795

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(), 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(), LWLockAcquire(), mdinit(), MultiXactShmemInit(), PGSemaphoreCreate(), PGSharedMemoryNoReAttach(), PGSharedMemoryReAttach(), pgss_shmem_startup(), PostgresMain(), process_postgres_switches(), process_settings(), ProcKill(), register_unlink(), RegisterBackgroundWorker(), RegisterDynamicBackgroundWorker(), RequestAddinShmemSpace(), RequestNamedLWLockTranche(), SendPostmasterSignal(), set_config_option(), set_config_sourcefile(), set_ps_display(), SetMultiXactIdLimit(), SetOffsetVacuumLimit(), SetTransactionIdLimit(), ShmemInitStruct(), SimpleLruInit(), standard_planner(), StartupXLOG(), superuser_arg(), SyncScanShmemInit(), TwoPhaseShmemInit(), verify_dictoptions(), XLogArchiveNotify(), and XLogWrite().

char* local_preload_libraries_string

Definition at line 1368 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_ListenPreCommit(), 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 1366 of file miscinit.c.

Referenced by process_session_preload_libraries().

char* shared_preload_libraries_string

Definition at line 1367 of file miscinit.c.

Referenced by process_shared_preload_libraries().

int trace_recovery_messages

Definition at line 432 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

Definition at line 109 of file globals.c.

Referenced by _bt_spoolinit(), begin_partition(), brin_page_items(), BuildTupleHashTable(), choose_hashed_distinct(), choose_hashed_grouping(), choose_hashed_setop(), collectMatchBitmap(), connectby(), cost_material(), cost_rescan(), create_merge_append_path(), create_unique_path(), crosstab(), dblink_get_notify(), deflist_to_tuplestore(), each_worker(), each_worker_jsonb(), elements_worker(), elements_worker_jsonb(), exec_init_tuple_store(), ExecChooseHashTableSize(), ExecHashTableCreate(), ExecInitCteScan(), ExecInitRecursiveUnion(), ExecMakeTableFunctionResult(), ExecMaterial(), ExecRecursiveUnion(), ExecSort(), final_cost_mergejoin(), fmgr_sql(), get_crosstab_tuplestore(), GetCurrentFDWTuplestore(), grouping_planner(), initial_cost_mergejoin(), initialize_aggregate(), initialize_phase(), make_sort(), materializeQueryResult(), materializeResult(), MultiExecBitmapIndexScan(), MultiExecBitmapOr(), ordered_set_startup(), pg_available_extension_versions(), pg_available_extensions(), pg_cursor(), pg_event_trigger_ddl_commands(), pg_event_trigger_dropped_objects(), pg_extension_update_paths(), pg_get_replication_slots(), pg_logical_slot_get_changes_guts(), pg_prepared_statement(), pg_show_replication_origin_status(), pg_stat_get_activity(), pg_stat_get_wal_senders(), pg_stat_statements_internal(), plperl_return_next(), populate_recordset_worker(), PortalCreateHoldStore(), show_all_file_settings(), storeRow(), subplan_is_hashable(), and xpath_table().