Rosser Schwarz
2013-02-05 19:36:45 UTC
Additionally, postgres has a number of "metadata" columns (e.g., xmin,
xmax, cmin, cmax, &c). Those can add up, particularly when their net size
is greater than the user data size of a row.
rls
measure table size.
I'd suggest that you use pg_table_size for the table itself
and pg_indexes_size for the size of ist indexes.
That should come close to the amount of disk space taken.
Agreed, don't forget, you have indexes, free space, vacuum-able stuff,
etc... all laying in your datafiles. Your measurements are telling you
what you have purely in a raw form.
--Scott Mead
http://www.openscg.com
xmax, cmin, cmax, &c). Those can add up, particularly when their net size
is greater than the user data size of a row.
rls
I'm trying to migrate a database from MySQL to postgres and I'm
struggling with the amount ofdiskspace the resulting db takes.
I may be missing a setting somewhere but I can't see one anywhere
obvious (apologies if I'm beingI may be missing a setting somewhere but I can't see one anywhere
stupid...)
Even postgres' idea of the size of the columns don't match up to its
own reported size of the data.Even postgres' idea of the size of the columns don't match up to its
CREATE TABLE result (
st_id integer NOT NULL,
log smallint NOT NULL,
"time" integer NOT NULL,
token character(4) NOT NULL,
data character varying(500) DEFAULT NULL::character varying
);
# SELECT pg_size_pretty(sum(pg_column_size(data) +
pg_column_size(st_id) + pg_column_size(log) +st_id integer NOT NULL,
log smallint NOT NULL,
"time" integer NOT NULL,
token character(4) NOT NULL,
data character varying(500) DEFAULT NULL::character varying
);
# SELECT pg_size_pretty(sum(pg_column_size(data) +
pg_column_size(token) + pg_column_size(time))) FROM result;
pg_size_pretty
----------------
178 MB
(1 row)
# SELECT pg_size_pretty(pg_relation_size('result'));
pg_size_pretty
----------------
613 MB
(1 row)
I'd naively expected these two figures to be similar.
I've run vacuum analyze and it made no difference (not a major surprise
because all I've done so farpg_size_pretty
----------------
178 MB
(1 row)
# SELECT pg_size_pretty(pg_relation_size('result'));
pg_size_pretty
----------------
613 MB
(1 row)
I'd naively expected these two figures to be similar.
I've run vacuum analyze and it made no difference (not a major surprise
is create the database and sequentially insert the data into the
tables).I expected a little overhead from what I'd read before the migration
but that's a fairly hugedifference.
As I said, sorry if I've missed the obvious "use loads of extra space"
setting but I'd appreciate anyAs I said, sorry if I've missed the obvious "use loads of extra space"
suggestion as to what that setting might be called :)
I don't think that pg_column_size() is a good tool tomeasure table size.
I'd suggest that you use pg_table_size for the table itself
and pg_indexes_size for the size of ist indexes.
That should come close to the amount of disk space taken.
etc... all laying in your datafiles. Your measurements are telling you
what you have purely in a raw form.
--Scott Mead
http://www.openscg.com
Yours,
Laurenz Albe
--
http://www.postgresql.org/mailpref/pgsql-admin
Laurenz Albe
--
http://www.postgresql.org/mailpref/pgsql-admin
--
:wq
:wq