他のテーブルに使用するには、Postgresql9.3.2データベースのテーブルのディスク領域を再利用する必要があります。これを実現するための標準的な提案は、「VACUUM FULL」または「CLUSTER」、または内容をフラットファイルにコピーしてコピーし直すことです。「ALTERTABLE」コマンドを使用して既存のテーブルを新しいテーブルスペースに移動する場合、テーブルの内容コピーされます。 「ALTERTABLE」プロセス中に圧縮されているかどうか誰かに教えてもらえますか?
これまでのコメントは大まかに正しいですが、src/backend /tablecmds.cを見て信頼できる答えを与えるために:
のみ _ALTER TABLE ... SET TABLESPACE ... ;
_を実行している場合、ATExecSetTableSpace()
が呼び出されて_SET TABLESPACE
_が処理され、copy_relation_data()
を使用してテーブルのWALログに記録されたブロックごとのコピーを実行します。ただし、テーブルの書き換えが必要な追加のアクションを_ALTER TABLE
_コマンドに指定する場合は、テーブルの新しいコピーをATRewriteTable()
を介して新しいテーブルスペースに作成(および圧縮)する必要があります。
答えは、「テーブルを別のテーブルスペースに移動すると、not VACUUMFULLやCLUSTERのように圧縮されます」と思われます。
私はこれを次のようにテストしました:
テーブルのサイズを決定するために使用したクエリは次のとおりです。
SELECT nspname || '.' || relname AS "relation",
pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size"
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE nspname NOT IN ('pg_catalog', 'information_schema')
AND C.relkind <> 'i'
AND nspname !~ '^pg_toast'
ORDER BY pg_total_relation_size(C.oid) DESC;