56 #include "utils/fmgroids.h" 69 static void CheckMyDatabase(
const char *
name,
bool am_superuser,
bool override_allow_connections);
107 Anum_pg_database_datname,
150 Anum_pg_database_oid,
215 (
errmsg(
"could not load pg_hba.conf")));
267 appendStringInfo(&logmsg,
_(
" SSL enabled (protocol=%s, cipher=%s, bits=%d, compression=%s)"),
280 _(
" GSS (authenticated=%s, encrypted=%s, principal=%s)"),
286 _(
" GSS (authenticated=%s, encrypted=%s)"),
320 if (strcmp(name,
NameStr(dbform->datname)) != 0)
322 (
errcode(ERRCODE_UNDEFINED_DATABASE),
323 errmsg(
"database \"%s\" has disappeared from pg_database",
325 errdetail(
"Database OID %u now seems to belong to \"%s\".",
342 if (!dbform->datallowconn && !override_allow_connections)
344 (
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
345 errmsg(
"database \"%s\" is not currently accepting connections",
357 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
358 errmsg(
"permission denied for database \"%s\"", name),
359 errdetail(
"User does not have CONNECT privilege.")));
371 if (dbform->datconnlimit >= 0 &&
375 (
errcode(ERRCODE_TOO_MANY_CONNECTIONS),
376 errmsg(
"too many connections for database \"%s\"",
393 collate =
NameStr(dbform->datcollate);
394 ctype =
NameStr(dbform->datctype);
398 (
errmsg(
"database locale is incompatible with operating system"),
399 errdetail(
"The database was initialized with LC_COLLATE \"%s\", " 400 " which is not recognized by setlocale().", collate),
401 errhint(
"Recreate the database with another locale or install the missing locale.")));
405 (
errmsg(
"database locale is incompatible with operating system"),
406 errdetail(
"The database was initialized with LC_CTYPE \"%s\", " 407 " which is not recognized by setlocale().", ctype),
408 errhint(
"Recreate the database with another locale or install the missing locale.")));
464 bool last_was_escape =
false;
469 while (isspace((
unsigned char) *optstr))
481 if (isspace((
unsigned char) *optstr) && !last_was_escape)
484 if (!last_was_escape && *optstr ==
'\\')
485 last_was_escape =
true;
488 last_was_escape =
false;
525 elog(
ERROR,
"too many backends configured");
580 Oid useroid,
char *out_dbname,
bool override_allow_connections)
755 (
errcode(ERRCODE_UNDEFINED_OBJECT),
756 errmsg(
"no roles are defined in this database system"),
757 errhint(
"You should immediately run CREATE USER \"%s\" SUPERUSER;.",
758 username != NULL ? username :
"postgres")));
792 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
793 errmsg(
"new replication connections are not allowed during database shutdown")));
796 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
797 errmsg(
"must be superuser to connect during database shutdown")));
806 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
807 errmsg(
"must be superuser to connect in binary upgrade mode")));
819 (
errcode(ERRCODE_TOO_MANY_CONNECTIONS),
820 errmsg(
"remaining connection slots are reserved for non-replication superuser connections")));
829 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
830 errmsg(
"must be superuser or replication role to start walsender")));
873 else if (in_dbname != NULL)
881 (
errcode(ERRCODE_UNDEFINED_DATABASE),
882 errmsg(
"database \"%s\" does not exist", in_dbname)));
887 strlcpy(dbname, in_dbname,
sizeof(dbname));
898 (
errcode(ERRCODE_UNDEFINED_DATABASE),
899 errmsg(
"database %u does not exist", dboid)));
907 strcpy(out_dbname, dbname);
986 (
errcode(ERRCODE_UNDEFINED_DATABASE),
987 errmsg(
"database \"%s\" does not exist", dbname),
988 errdetail(
"It seems to have just been dropped or renamed.")));
999 if (access(fullpath, F_OK) == -1)
1001 if (errno == ENOENT)
1003 (
errcode(ERRCODE_UNDEFINED_DATABASE),
1004 errmsg(
"database \"%s\" does not exist",
1006 errdetail(
"The database subdirectory \"%s\" is missing.",
1011 errmsg(
"could not access directory \"%s\": %m",
1107 av = (
char **)
palloc(maxac *
sizeof(
char *));
1110 av[ac++] =
"postgres";
HeapTuple heap_copytuple(HeapTuple tuple)
#define AllocSetContextCreate
void table_close(Relation relation, LOCKMODE lockmode)
int errhint(const char *fmt,...)
void systable_endscan(SysScanDesc sysscan)
const char * be_gssapi_get_princ(Port *port)
CAC_state canAcceptConnections
Snapshot RegisterSnapshot(Snapshot snapshot)
TableScanDesc table_beginscan_catalog(Relation relation, int nkeys, struct ScanKeyData *key)
static ListCell * lnext(const List *l, const ListCell *c)
void SharedInvalBackendInit(bool sendOnly)
FormData_pg_database * Form_pg_database
static HeapTuple GetDatabaseTuple(const char *dbname)
ResourceOwner CurrentResourceOwner
void ClientAuthentication(Port *port)
char * pstrdup(const char *in)
void CommitTransactionCommand(void)
void ReleaseAuxProcessResources(bool isCommit)
void InitializeSession(void)
void ValidatePgVersion(const char *path)
volatile sig_atomic_t IdleSessionTimeoutPending
void RelationCacheInitializePhase2(void)
Snapshot GetCatalogSnapshot(Oid relid)
static void PerformAuthentication(Port *port)
static void LockTimeoutHandler(void)
int errcode(int sqlerrcode)
#define DatabaseNameIndexId
bool criticalSharedRelcachesBuilt
void initialize_acl(void)
bool RecoveryInProgress(void)
void SetLatch(Latch *latch)
Snapshot GetTransactionSnapshot(void)
#define OidIsValid(objectId)
void AbortOutOfAnyTransaction(void)
Oid GetSessionUserId(void)
SysScanDesc systable_beginscan(Relation heapRelation, Oid indexId, bool indexOK, Snapshot snapshot, int nkeys, ScanKey key)
bool HaveNFreeProcs(int n)
static void CheckMyDatabase(const char *name, bool am_superuser, bool override_allow_connections)
int AuthenticationTimeout
char * pg_perm_setlocale(int category, const char *locale)
void RelationCacheInitializePhase3(void)
static void InitCommunication(void)
void set_ps_display(const char *activity)
bool ClientAuthInProgress
void pg_usleep(long microsec)
HeapTuple systable_getnext(SysScanDesc sysscan)
void pfree(void *pointer)
void appendStringInfo(StringInfo str, const char *fmt,...)
void InitBufferPoolAccess(void)
int CountDBConnections(Oid databaseid)
#define ObjectIdGetDatum(X)
bool be_tls_get_compression(Port *port)
void InitializeSearchPath(void)
#define ALLOCSET_DEFAULT_SIZES
void on_shmem_exit(pg_on_exit_callback function, Datum arg)
void check_strxfrm_bug(void)
void SetConfigOption(const char *name, const char *value, GucContext context, GucSource source)
void pg_split_opts(char **argv, int *argcp, const char *optstr)
HeapTuple heap_getnext(TableScanDesc sscan, ScanDirection direction)
int errdetail(const char *fmt,...)
int errcode_for_file_access(void)
#define CStringGetDatum(X)
static void IdleInTransactionSessionTimeoutHandler(void)
void before_shmem_exit(pg_on_exit_callback function, Datum arg)
static ListCell * list_head(const List *l)
void resetStringInfo(StringInfo str)
void pgstat_initialize(void)
static bool ThereIsAtLeastOneRole(void)
volatile sig_atomic_t IdleInTransactionSessionTimeoutPending
bool IsAutoVacuumWorkerProcess(void)
void InvalidateCatalogSnapshot(void)
MemoryContext TopMemoryContext
char * GetDatabasePath(Oid dbNode, Oid spcNode)
void UnregisterSnapshot(Snapshot snapshot)
void SetDatabasePath(const char *path)
#define DatabaseOidIndexId
void appendStringInfoChar(StringInfo str, char ch)
void initStringInfo(StringInfo str)
void ShutdownXLOG(int code, Datum arg)
HeapTuple SearchSysCache1(int cacheId, Datum key1)
bool be_gssapi_get_enc(Port *port)
static HeapTuple GetDatabaseTupleByOid(Oid dboid)
int be_tls_get_cipher_bits(Port *port)
void SetDatabaseEncoding(int encoding)
void ReleaseSysCache(HeapTuple tuple)
void LockSharedObject(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
void EnablePortalManager(void)
static void ShutdownPostgres(int code, Datum arg)
int autovacuum_max_workers
#define ereport(elevel,...)
void InitPostgres(const char *in_dbname, Oid dboid, const char *username, Oid useroid, char *out_dbname, bool override_allow_connections)
size_t strlcpy(char *dst, const char *src, size_t siz)
TimeoutId RegisterTimeout(TimeoutId id, timeout_handler_proc handler)
int errmsg_internal(const char *fmt,...)
void enable_timeout_after(TimeoutId id, int delay_ms)
bool IsAutoVacuumLauncherProcess(void)
#define HeapTupleIsValid(tuple)
AclResult pg_database_aclcheck(Oid db_oid, Oid roleid, AclMode mode)
#define Assert(condition)
const char * GetDatabaseEncodingName(void)
void LockReleaseAll(LOCKMETHODID lockmethodid, bool allLocks)
void InitializeSessionUserIdStandalone(void)
void StartTransactionCommand(void)
void CreateAuxProcessResourceOwner(void)
#define XACT_READ_COMMITTED
static void IdleSessionTimeoutHandler(void)
void InitializeSessionUserId(const char *rolename, Oid roleid)
void InitializeMaxBackends(void)
static void process_startup_options(Port *port, bool am_superuser)
bool has_rolreplication(Oid roleid)
volatile sig_atomic_t InterruptPending
void InitializeClientEncoding(void)
const char * be_tls_get_version(Port *port)
void CreateSharedMemoryAndSemaphores(void)
void InitProcessPhase2(void)
static void table_endscan(TableScanDesc scan)
#define IsBootstrapProcessingMode()
void RelationCacheInitialize(void)
void ProcSignalInit(int pss_idx)
void InitCatalogCache(void)
static void StatementTimeoutHandler(void)
void SetCurrentStatementStartTimestamp(void)
int errmsg(const char *fmt,...)
void pgstat_bestart(void)
void ApplySetting(Snapshot snapshot, Oid databaseid, Oid roleid, Relation relsetting, GucSource source)
static void process_settings(Oid databaseid, Oid roleid)
void ScanKeyInit(ScanKey entry, AttrNumber attributeNumber, StrategyNumber strategy, RegProcedure procedure, Datum argument)
const char * be_tls_get_cipher(Port *port)
void CheckDeadLockAlert(void)
void InitBufferPoolBackend(void)
void process_postgres_switches(int argc, char *argv[], GucContext ctx, const char **dbname)
void disable_timeout(TimeoutId id, bool keep_indicator)
Relation table_open(Oid relationId, LOCKMODE lockmode)
MemoryContext PostmasterContext
#define BTEqualStrategyNumber
void InitFileAccess(void)
bool be_gssapi_get_auth(Port *port)