35#define half_rounded(x) (((x) + ((x) < 0 ? -1 : 1)) / 2)
50 {
"bytes", 10 * 1024,
false, 0},
51 {
"kB", 20 * 1024 - 1,
true, 10},
52 {
"MB", 20 * 1024 - 1,
true, 20},
53 {
"GB", 20 * 1024 - 1,
true, 30},
54 {
"TB", 20 * 1024 - 1,
true, 40},
55 {
"PB", 20 * 1024 - 1,
true, 50},
142 snprintf(pathname,
sizeof(pathname),
"base/%u", dbOid);
157 snprintf(pathname,
sizeof(pathname),
"%s/%s/%s/%u",
180 errmsg(
"database with OID %u does not exist", dbOid));
266 errmsg(
"could not stat file \"%s\": %m", pathname)));
272 totalsize +=
fst.st_size;
355 errmsg(
"could not stat file \"%s\": %m", pathname)));
357 totalsize +=
fst.st_size;
407 for (forkNum = 0; forkNum <=
MAX_FORKNUM; forkNum++)
415 foreach(
lc, indexlist)
421 for (forkNum = 0; forkNum <=
MAX_FORKNUM; forkNum++)
450 for (forkNum = 0; forkNum <=
MAX_FORKNUM; forkNum++)
476 if (rel->
rd_rel->relhasindex)
489 for (forkNum = 0; forkNum <=
MAX_FORKNUM; forkNum++)
621 + (unit->
round ==
true));
622 size /= ((
int64) 1) << bits;
720 + (unit->
round ==
true));
753 if (*endptr ==
'-' || *endptr ==
'+')
757 if (
isdigit((
unsigned char) *endptr))
762 while (
isdigit((
unsigned char) *endptr));
769 if (
isdigit((
unsigned char) *endptr))
774 while (
isdigit((
unsigned char) *endptr));
785 if (*endptr ==
'e' || *endptr ==
'E')
794 exponent =
strtol(endptr + 1, &
cp, 10);
823 int64 multiplier = 0;
828 while (
isspace((
unsigned char) *endptr))
860 errhint(
"Valid units are \"bytes\", \"B\", \"kB\", \"MB\", \"GB\", \"TB\", and \"PB\".")));
1019 switch (
relform->relpersistence)
bool has_privs_of_role(Oid member, Oid role)
void aclcheck_error(AclResult aclerr, ObjectType objtype, const char *objectname)
AclResult object_aclcheck(Oid classid, Oid objectid, Oid roleid, AclMode mode)
char * get_tablespace_name(Oid spc_oid)
Oid get_tablespace_oid(const char *tablespacename, bool missing_ok)
Datum numeric_sub(PG_FUNCTION_ARGS)
Numeric int64_to_numeric(int64 val)
Datum numeric_int8(PG_FUNCTION_ARGS)
Datum numeric_ge(PG_FUNCTION_ARGS)
Datum numeric_out(PG_FUNCTION_ARGS)
Datum numeric_div_trunc(PG_FUNCTION_ARGS)
Datum numeric_in(PG_FUNCTION_ARGS)
Datum numeric_lt(PG_FUNCTION_ARGS)
Datum numeric_add(PG_FUNCTION_ARGS)
Datum numeric_abs(PG_FUNCTION_ARGS)
Datum numeric_mul(PG_FUNCTION_ARGS)
#define Assert(condition)
#define OidIsValid(objectId)
Oid get_database_oid(const char *dbname, bool missing_ok)
static int64 calculate_total_relation_size(Relation rel)
static char * numeric_to_cstring(Numeric n)
static bool numeric_is_less(Numeric a, Numeric b)
Datum pg_indexes_size(PG_FUNCTION_ARGS)
Datum pg_size_bytes(PG_FUNCTION_ARGS)
static Numeric numeric_truncated_divide(Numeric n, int64 divisor)
static const struct size_bytes_unit_alias size_bytes_aliases[]
Datum pg_database_size_oid(PG_FUNCTION_ARGS)
Datum pg_total_relation_size(PG_FUNCTION_ARGS)
Datum pg_tablespace_size_name(PG_FUNCTION_ARGS)
static int64 calculate_tablespace_size(Oid tblspcOid)
Datum pg_size_pretty_numeric(PG_FUNCTION_ARGS)
Datum pg_relation_size(PG_FUNCTION_ARGS)
static int64 calculate_indexes_size(Relation rel)
static int64 db_dir_size(const char *path)
Datum pg_database_size_name(PG_FUNCTION_ARGS)
static Numeric numeric_absolute(Numeric n)
Datum pg_size_pretty(PG_FUNCTION_ARGS)
static int64 calculate_database_size(Oid dbOid)
Datum pg_table_size(PG_FUNCTION_ARGS)
Datum pg_tablespace_size_oid(PG_FUNCTION_ARGS)
static Numeric numeric_half_rounded(Numeric n)
Datum pg_relation_filenode(PG_FUNCTION_ARGS)
Datum pg_filenode_relation(PG_FUNCTION_ARGS)
static const struct size_pretty_unit size_pretty_units[]
static int64 calculate_relation_size(RelFileLocator *rfn, ProcNumber backend, ForkNumber forknum)
Datum pg_relation_filepath(PG_FUNCTION_ARGS)
static int64 calculate_toast_table_size(Oid toastrelid)
static int64 calculate_table_size(Relation rel)
int errcode_for_file_access(void)
int errdetail(const char *fmt,...)
int errhint(const char *fmt,...)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
DIR * AllocateDir(const char *dirname)
struct dirent * ReadDir(DIR *dir, const char *dirname)
#define PG_GETARG_TEXT_PP(n)
#define DirectFunctionCall2(func, arg1, arg2)
#define PG_RETURN_INT64(x)
#define DirectFunctionCall1(func, arg1)
#define PG_GETARG_INT64(n)
#define PG_GETARG_NAME(n)
#define PG_RETURN_TEXT_P(x)
#define DirectFunctionCall3(func, arg1, arg2, arg3)
#define HeapTupleIsValid(tuple)
static void * GETSTRUCT(const HeapTupleData *tuple)
void list_free(List *list)
char * get_database_name(Oid dbid)
#define CHECK_FOR_INTERRUPTS()
bool isTempOrTempToastNamespace(Oid namespaceId)
ProcNumber GetTempNamespaceProcNumber(Oid namespaceId)
static Numeric DatumGetNumeric(Datum X)
#define PG_GETARG_NUMERIC(n)
static Datum NumericGetDatum(Numeric X)
FormData_pg_class * Form_pg_class
static char buf[DEFAULT_XLOG_SEG_SIZE]
static const char * dbName
int pg_strcasecmp(const char *s1, const char *s2)
static bool DatumGetBool(Datum X)
static int64 DatumGetInt64(Datum X)
static Datum ObjectIdGetDatum(Oid X)
static char * DatumGetCString(Datum X)
static Datum CStringGetDatum(const char *X)
static Datum Int32GetDatum(int32 X)
#define INVALID_PROC_NUMBER
#define ProcNumberForTempRelations()
char * psprintf(const char *fmt,...)
List * RelationGetIndexList(Relation relation)
Oid RelidByRelfilenumber(Oid reltablespace, RelFileNumber relfilenumber)
RelFileNumber RelationMapOidToFilenumber(Oid relationId, bool shared)
ForkNumber forkname_to_number(const char *forkName)
#define InvalidRelFileNumber
#define relpathbackend(rlocator, backend, forknum)
#define TABLESPACE_VERSION_DIRECTORY
#define RelFileNumberIsValid(relnumber)
void relation_close(Relation relation, LOCKMODE lockmode)
Relation try_relation_open(Oid relationId, LOCKMODE lockmode)
Relation relation_open(Oid relationId, LOCKMODE lockmode)
char str[REL_PATH_STR_MAXLEN+1]
RelFileLocator rd_locator
void ReleaseSysCache(HeapTuple tuple)
HeapTuple SearchSysCache1(int cacheId, Datum key1)
#define SearchSysCacheExists1(cacheId, key1)
static Size VARSIZE_ANY_EXHDR(const void *PTR)
text * cstring_to_text(const char *s)
char * text_to_cstring(const text *t)