aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/utils/adt/dbsize.c3
-rw-r--r--src/test/regress/expected/dbsize.out124
-rw-r--r--src/test/regress/sql/dbsize.sql9
3 files changed, 72 insertions, 64 deletions
diff --git a/src/backend/utils/adt/dbsize.c b/src/backend/utils/adt/dbsize.c
index 6c381b02b7e..d5a7fb13f3c 100644
--- a/src/backend/utils/adt/dbsize.c
+++ b/src/backend/utils/adt/dbsize.c
@@ -52,6 +52,7 @@ static const struct size_pretty_unit size_pretty_units[] = {
{"MB", 20 * 1024 - 1, true, 20},
{"GB", 20 * 1024 - 1, true, 30},
{"TB", 20 * 1024 - 1, true, 40},
+ {"PB", 20 * 1024 - 1, true, 50},
{NULL, 0, false, 0}
};
@@ -811,7 +812,7 @@ pg_size_bytes(PG_FUNCTION_ARGS)
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("invalid size: \"%s\"", text_to_cstring(arg)),
errdetail("Invalid size unit: \"%s\".", strptr),
- errhint("Valid units are \"bytes\", \"kB\", \"MB\", \"GB\", and \"TB\".")));
+ errhint("Valid units are \"bytes\", \"kB\", \"MB\", \"GB\", \"TB\", and \"PB\".")));
if (multiplier > 1)
{
diff --git a/src/test/regress/expected/dbsize.out b/src/test/regress/expected/dbsize.out
index 29804aee8b8..d8d6686b5f4 100644
--- a/src/test/regress/expected/dbsize.out
+++ b/src/test/regress/expected/dbsize.out
@@ -53,7 +53,7 @@ SELECT size, pg_size_pretty(size), pg_size_pretty(-1 * size) FROM
10994579406847 | 10239 GB | -10239 GB
10994579406848 | 10 TB | -10 TB
11258449312612351 | 10239 TB | -10239 TB
- 11258449312612352 | 10240 TB | -10240 TB
+ 11258449312612352 | 10 PB | -10 PB
(10 rows)
SELECT size, pg_size_pretty(size), pg_size_pretty(-1 * size) FROM
@@ -61,71 +61,77 @@ SELECT size, pg_size_pretty(size), pg_size_pretty(-1 * size) FROM
(10485247::numeric), (10485248::numeric),
(10736893951::numeric), (10736893952::numeric),
(10994579406847::numeric), (10994579406848::numeric),
- (11258449312612351::numeric), (11258449312612352::numeric)) x(size);
- size | pg_size_pretty | pg_size_pretty
--------------------+----------------+----------------
- 10239 | 10239 bytes | -10239 bytes
- 10240 | 10 kB | -10 kB
- 10485247 | 10239 kB | -10239 kB
- 10485248 | 10 MB | -10 MB
- 10736893951 | 10239 MB | -10239 MB
- 10736893952 | 10 GB | -10 GB
- 10994579406847 | 10239 GB | -10239 GB
- 10994579406848 | 10 TB | -10 TB
- 11258449312612351 | 10239 TB | -10239 TB
- 11258449312612352 | 10240 TB | -10240 TB
-(10 rows)
+ (11258449312612351::numeric), (11258449312612352::numeric),
+ (11528652096115048447::numeric), (11528652096115048448::numeric)) x(size);
+ size | pg_size_pretty | pg_size_pretty
+----------------------+----------------+----------------
+ 10239 | 10239 bytes | -10239 bytes
+ 10240 | 10 kB | -10 kB
+ 10485247 | 10239 kB | -10239 kB
+ 10485248 | 10 MB | -10 MB
+ 10736893951 | 10239 MB | -10239 MB
+ 10736893952 | 10 GB | -10 GB
+ 10994579406847 | 10239 GB | -10239 GB
+ 10994579406848 | 10 TB | -10 TB
+ 11258449312612351 | 10239 TB | -10239 TB
+ 11258449312612352 | 10 PB | -10 PB
+ 11528652096115048447 | 10239 PB | -10239 PB
+ 11528652096115048448 | 10240 PB | -10240 PB
+(12 rows)
-- pg_size_bytes() tests
SELECT size, pg_size_bytes(size) FROM
(VALUES ('1'), ('123bytes'), ('1kB'), ('1MB'), (' 1 GB'), ('1.5 GB '),
- ('1TB'), ('3000 TB'), ('1e6 MB')) x(size);
- size | pg_size_bytes
-----------+------------------
- 1 | 1
- 123bytes | 123
- 1kB | 1024
- 1MB | 1048576
- 1 GB | 1073741824
- 1.5 GB | 1610612736
- 1TB | 1099511627776
- 3000 TB | 3298534883328000
- 1e6 MB | 1048576000000
-(9 rows)
+ ('1TB'), ('3000 TB'), ('1e6 MB'), ('99 PB')) x(size);
+ size | pg_size_bytes
+----------+--------------------
+ 1 | 1
+ 123bytes | 123
+ 1kB | 1024
+ 1MB | 1048576
+ 1 GB | 1073741824
+ 1.5 GB | 1610612736
+ 1TB | 1099511627776
+ 3000 TB | 3298534883328000
+ 1e6 MB | 1048576000000
+ 99 PB | 111464090777419776
+(10 rows)
-- case-insensitive units are supported
SELECT size, pg_size_bytes(size) FROM
(VALUES ('1'), ('123bYteS'), ('1kb'), ('1mb'), (' 1 Gb'), ('1.5 gB '),
- ('1tb'), ('3000 tb'), ('1e6 mb')) x(size);
- size | pg_size_bytes
-----------+------------------
- 1 | 1
- 123bYteS | 123
- 1kb | 1024
- 1mb | 1048576
- 1 Gb | 1073741824
- 1.5 gB | 1610612736
- 1tb | 1099511627776
- 3000 tb | 3298534883328000
- 1e6 mb | 1048576000000
-(9 rows)
+ ('1tb'), ('3000 tb'), ('1e6 mb'), ('99 pb')) x(size);
+ size | pg_size_bytes
+----------+--------------------
+ 1 | 1
+ 123bYteS | 123
+ 1kb | 1024
+ 1mb | 1048576
+ 1 Gb | 1073741824
+ 1.5 gB | 1610612736
+ 1tb | 1099511627776
+ 3000 tb | 3298534883328000
+ 1e6 mb | 1048576000000
+ 99 pb | 111464090777419776
+(10 rows)
-- negative numbers are supported
SELECT size, pg_size_bytes(size) FROM
(VALUES ('-1'), ('-123bytes'), ('-1kb'), ('-1mb'), (' -1 Gb'), ('-1.5 gB '),
- ('-1tb'), ('-3000 TB'), ('-10e-1 MB')) x(size);
- size | pg_size_bytes
------------+-------------------
- -1 | -1
- -123bytes | -123
- -1kb | -1024
- -1mb | -1048576
- -1 Gb | -1073741824
- -1.5 gB | -1610612736
- -1tb | -1099511627776
- -3000 TB | -3298534883328000
- -10e-1 MB | -1048576
-(9 rows)
+ ('-1tb'), ('-3000 TB'), ('-10e-1 MB'), ('-99 PB')) x(size);
+ size | pg_size_bytes
+-----------+---------------------
+ -1 | -1
+ -123bytes | -123
+ -1kb | -1024
+ -1mb | -1048576
+ -1 Gb | -1073741824
+ -1.5 gB | -1610612736
+ -1tb | -1099511627776
+ -3000 TB | -3298534883328000
+ -10e-1 MB | -1048576
+ -99 PB | -111464090777419776
+(10 rows)
-- different cases with allowed points
SELECT size, pg_size_bytes(size) FROM
@@ -147,15 +153,15 @@ SELECT size, pg_size_bytes(size) FROM
SELECT pg_size_bytes('1 AB');
ERROR: invalid size: "1 AB"
DETAIL: Invalid size unit: "AB".
-HINT: Valid units are "bytes", "kB", "MB", "GB", and "TB".
+HINT: Valid units are "bytes", "kB", "MB", "GB", "TB", and "PB".
SELECT pg_size_bytes('1 AB A');
ERROR: invalid size: "1 AB A"
DETAIL: Invalid size unit: "AB A".
-HINT: Valid units are "bytes", "kB", "MB", "GB", and "TB".
+HINT: Valid units are "bytes", "kB", "MB", "GB", "TB", and "PB".
SELECT pg_size_bytes('1 AB A ');
ERROR: invalid size: "1 AB A "
DETAIL: Invalid size unit: "AB A".
-HINT: Valid units are "bytes", "kB", "MB", "GB", and "TB".
+HINT: Valid units are "bytes", "kB", "MB", "GB", "TB", and "PB".
SELECT pg_size_bytes('9223372036854775807.9');
ERROR: bigint out of range
SELECT pg_size_bytes('1e100');
@@ -165,7 +171,7 @@ ERROR: value overflows numeric format
SELECT pg_size_bytes('1 byte'); -- the singular "byte" is not supported
ERROR: invalid size: "1 byte"
DETAIL: Invalid size unit: "byte".
-HINT: Valid units are "bytes", "kB", "MB", "GB", and "TB".
+HINT: Valid units are "bytes", "kB", "MB", "GB", "TB", and "PB".
SELECT pg_size_bytes('');
ERROR: invalid size: ""
SELECT pg_size_bytes('kb');
@@ -183,6 +189,6 @@ ERROR: invalid size: ".+912"
SELECT pg_size_bytes('+912+ kB');
ERROR: invalid size: "+912+ kB"
DETAIL: Invalid size unit: "+ kB".
-HINT: Valid units are "bytes", "kB", "MB", "GB", and "TB".
+HINT: Valid units are "bytes", "kB", "MB", "GB", "TB", and "PB".
SELECT pg_size_bytes('++123 kB');
ERROR: invalid size: "++123 kB"
diff --git a/src/test/regress/sql/dbsize.sql b/src/test/regress/sql/dbsize.sql
index 6a45c5eb1cf..7df865271b6 100644
--- a/src/test/regress/sql/dbsize.sql
+++ b/src/test/regress/sql/dbsize.sql
@@ -24,22 +24,23 @@ SELECT size, pg_size_pretty(size), pg_size_pretty(-1 * size) FROM
(10485247::numeric), (10485248::numeric),
(10736893951::numeric), (10736893952::numeric),
(10994579406847::numeric), (10994579406848::numeric),
- (11258449312612351::numeric), (11258449312612352::numeric)) x(size);
+ (11258449312612351::numeric), (11258449312612352::numeric),
+ (11528652096115048447::numeric), (11528652096115048448::numeric)) x(size);
-- pg_size_bytes() tests
SELECT size, pg_size_bytes(size) FROM
(VALUES ('1'), ('123bytes'), ('1kB'), ('1MB'), (' 1 GB'), ('1.5 GB '),
- ('1TB'), ('3000 TB'), ('1e6 MB')) x(size);
+ ('1TB'), ('3000 TB'), ('1e6 MB'), ('99 PB')) x(size);
-- case-insensitive units are supported
SELECT size, pg_size_bytes(size) FROM
(VALUES ('1'), ('123bYteS'), ('1kb'), ('1mb'), (' 1 Gb'), ('1.5 gB '),
- ('1tb'), ('3000 tb'), ('1e6 mb')) x(size);
+ ('1tb'), ('3000 tb'), ('1e6 mb'), ('99 pb')) x(size);
-- negative numbers are supported
SELECT size, pg_size_bytes(size) FROM
(VALUES ('-1'), ('-123bytes'), ('-1kb'), ('-1mb'), (' -1 Gb'), ('-1.5 gB '),
- ('-1tb'), ('-3000 TB'), ('-10e-1 MB')) x(size);
+ ('-1tb'), ('-3000 TB'), ('-10e-1 MB'), ('-99 PB')) x(size);
-- different cases with allowed points
SELECT size, pg_size_bytes(size) FROM