kenju's blog

About Programming, Mathematics, Security and Blockchain

pg_dumpでダンプしたファイルは約1/10のサイズになった

tl;dr

  • pg_dumpを用いてダンプしたファイルは、手元で確認する限りほとんど元データのおよそ1/10程度の大きさになることが多かった
  • とはいえ、これはあくまで今回自分の環境で計測した限りの話なので、この値は参考にせず、実際に手元で計測してください
  • 今後のために、実際に計測した手法をメモしておく

算出方法

一例として、ここでは特定のSchemaのデータをダンプする条件で考えて見ます。

まず、前提条件としてPostgreSQLのバージョンを確認しましょう。

# Versionは9.6.3
$  psql --version
psql (PostgreSQL) 9.6.3

今回は、my_db.my_schemaという特定のSchemaのみをダンプするとします。

$  psql my_db -c '\dn'
         List of schemas
      Name      |     Owner
----------------+----------------
 my_schema | me
 public    | me
(2 rows)

スキーマのサイズを測定する関数をpg_schema_size.sqlに用意しました。

# サイズを測定する関数
$ cat pg_schema_size.sql
-- https://wiki.postgresql.org/wiki/Schema_Size
create or replace function pg_schema_size(text)
returns bigint as $$
    select
        -- sum all table sizes in the specific schema
        sum(
            pg_total_relation_size(
                quote_ident(schemaname) || '.' || quote_ident(tablename)
            )
        )::bigint
    from
        pg_tables
    where
        schemaname = $1
$$ language sql;

select pg_size_pretty(pg_schema_size('my_schema'));

psql-cオプションで先のファイルを実行すれば、特定のSchemaのサイズがわかります。

$ psql my_db -c "`cat pg_schema_size.sql`"
 pg_size_pretty
----------------
 3000 kB
(1 row)

my_db.my_schemaをダンプして、そのサイズを見て見ましょう。

# ダンプします
$  pg_dump my_db -n my_schema -b > dump.sql

# ダンプしたファイルは「308KB」、つまり元のスキーマの1/10程度
$  du -h dump.sql
348K    dump.sql