mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-02-23 19:39:53 +08:00
Teach pg_size_pretty and pg_size_bytes about petabytes
There was talk about adding units all the way up to yottabytes but it seems quite far-fetched that anyone would need those. Since such large units are not exactly commonplace, it seems unlikely that having pg_size_pretty outputting unit any larger than petabytes would actually be helpful to anyone. Since petabytes are on the horizon, let's just add those only. Maybe one day we'll get to add additional units, but it will likely be a while before we'll need to think beyond petabytes in regards to the size of a database. Author: David Christensen Discussion: https://postgr.es/m/CAOxo6XKmHc_WZip-x5QwaOqFEiCq_SVD0B7sbTZQk+qqcn2qaw@mail.gmail.com
This commit is contained in:
parent
0f80b47d24
commit
ca2e4472ba
@ -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)
|
||||
{
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user