|
|
|
@ -84,8 +84,7 @@ static void movedb_failure_callback(int code, Datum arg); |
|
|
|
|
static bool get_db_info(const char *name, LOCKMODE lockmode, |
|
|
|
|
Oid *dbIdP, Oid *ownerIdP, |
|
|
|
|
int *encodingP, bool *dbIsTemplateP, bool *dbAllowConnP, |
|
|
|
|
Oid *dbLastSysOidP, TransactionId *dbFrozenXidP, |
|
|
|
|
MultiXactId *dbMinMultiP, |
|
|
|
|
TransactionId *dbFrozenXidP, MultiXactId *dbMinMultiP, |
|
|
|
|
Oid *dbTablespace, char **dbCollate, char **dbCtype); |
|
|
|
|
static bool have_createdb_privilege(void); |
|
|
|
|
static void remove_dbtablespaces(Oid db_id); |
|
|
|
@ -108,7 +107,6 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt) |
|
|
|
|
char *src_ctype = NULL; |
|
|
|
|
bool src_istemplate; |
|
|
|
|
bool src_allowconn; |
|
|
|
|
Oid src_lastsysoid = InvalidOid; |
|
|
|
|
TransactionId src_frozenxid = InvalidTransactionId; |
|
|
|
|
MultiXactId src_minmxid = InvalidMultiXactId; |
|
|
|
|
Oid src_deftablespace; |
|
|
|
@ -318,7 +316,7 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt) |
|
|
|
|
|
|
|
|
|
if (!get_db_info(dbtemplate, ShareLock, |
|
|
|
|
&src_dboid, &src_owner, &src_encoding, |
|
|
|
|
&src_istemplate, &src_allowconn, &src_lastsysoid, |
|
|
|
|
&src_istemplate, &src_allowconn, |
|
|
|
|
&src_frozenxid, &src_minmxid, &src_deftablespace, |
|
|
|
|
&src_collate, &src_ctype)) |
|
|
|
|
ereport(ERROR, |
|
|
|
@ -532,7 +530,6 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt) |
|
|
|
|
new_record[Anum_pg_database_datistemplate - 1] = BoolGetDatum(dbistemplate); |
|
|
|
|
new_record[Anum_pg_database_datallowconn - 1] = BoolGetDatum(dballowconnections); |
|
|
|
|
new_record[Anum_pg_database_datconnlimit - 1] = Int32GetDatum(dbconnlimit); |
|
|
|
|
new_record[Anum_pg_database_datlastsysoid - 1] = ObjectIdGetDatum(src_lastsysoid); |
|
|
|
|
new_record[Anum_pg_database_datfrozenxid - 1] = TransactionIdGetDatum(src_frozenxid); |
|
|
|
|
new_record[Anum_pg_database_datminmxid - 1] = TransactionIdGetDatum(src_minmxid); |
|
|
|
|
new_record[Anum_pg_database_dattablespace - 1] = ObjectIdGetDatum(dst_deftablespace); |
|
|
|
@ -802,7 +799,7 @@ dropdb(const char *dbname, bool missing_ok, bool force) |
|
|
|
|
pgdbrel = table_open(DatabaseRelationId, RowExclusiveLock); |
|
|
|
|
|
|
|
|
|
if (!get_db_info(dbname, AccessExclusiveLock, &db_id, NULL, NULL, |
|
|
|
|
&db_istemplate, NULL, NULL, NULL, NULL, NULL, NULL, NULL)) |
|
|
|
|
&db_istemplate, NULL, NULL, NULL, NULL, NULL, NULL)) |
|
|
|
|
{ |
|
|
|
|
if (!missing_ok) |
|
|
|
|
{ |
|
|
|
@ -1001,7 +998,7 @@ RenameDatabase(const char *oldname, const char *newname) |
|
|
|
|
rel = table_open(DatabaseRelationId, RowExclusiveLock); |
|
|
|
|
|
|
|
|
|
if (!get_db_info(oldname, AccessExclusiveLock, &db_id, NULL, NULL, |
|
|
|
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)) |
|
|
|
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL)) |
|
|
|
|
ereport(ERROR, |
|
|
|
|
(errcode(ERRCODE_UNDEFINED_DATABASE), |
|
|
|
|
errmsg("database \"%s\" does not exist", oldname))); |
|
|
|
@ -1114,7 +1111,7 @@ movedb(const char *dbname, const char *tblspcname) |
|
|
|
|
pgdbrel = table_open(DatabaseRelationId, RowExclusiveLock); |
|
|
|
|
|
|
|
|
|
if (!get_db_info(dbname, AccessExclusiveLock, &db_id, NULL, NULL, |
|
|
|
|
NULL, NULL, NULL, NULL, NULL, &src_tblspcoid, NULL, NULL)) |
|
|
|
|
NULL, NULL, NULL, NULL, &src_tblspcoid, NULL, NULL)) |
|
|
|
|
ereport(ERROR, |
|
|
|
|
(errcode(ERRCODE_UNDEFINED_DATABASE), |
|
|
|
|
errmsg("database \"%s\" does not exist", dbname))); |
|
|
|
@ -1757,8 +1754,7 @@ static bool |
|
|
|
|
get_db_info(const char *name, LOCKMODE lockmode, |
|
|
|
|
Oid *dbIdP, Oid *ownerIdP, |
|
|
|
|
int *encodingP, bool *dbIsTemplateP, bool *dbAllowConnP, |
|
|
|
|
Oid *dbLastSysOidP, TransactionId *dbFrozenXidP, |
|
|
|
|
MultiXactId *dbMinMultiP, |
|
|
|
|
TransactionId *dbFrozenXidP, MultiXactId *dbMinMultiP, |
|
|
|
|
Oid *dbTablespace, char **dbCollate, char **dbCtype) |
|
|
|
|
{ |
|
|
|
|
bool result = false; |
|
|
|
@ -1839,9 +1835,6 @@ get_db_info(const char *name, LOCKMODE lockmode, |
|
|
|
|
/* allowing connections? */ |
|
|
|
|
if (dbAllowConnP) |
|
|
|
|
*dbAllowConnP = dbform->datallowconn; |
|
|
|
|
/* last system OID used in database */ |
|
|
|
|
if (dbLastSysOidP) |
|
|
|
|
*dbLastSysOidP = dbform->datlastsysoid; |
|
|
|
|
/* limit of frozen XIDs */ |
|
|
|
|
if (dbFrozenXidP) |
|
|
|
|
*dbFrozenXidP = dbform->datfrozenxid; |
|
|
|
|