私はpg_column_sizeが非常に異なる値を報告している簡単な例があります。 TOASTされた値を検討しているかどうかは関係ありませんが、わかりません。pg_column_sizeは、特定の列よりもテーブル。*のサイズが大きく異なることを報告します
CREATE TABLE foo (bar TEXT);
INSERT INTO foo (bar) VALUES (repeat('foo', 100000));
SELECT pg_column_size(bar) as col, pg_column_size(foo.*) as table FROM foo;
私はPostgresの9.6に見ていることは、
col table
3442 300028
あり、ここで大きさの差の順序があります:ここでセットアップがあります。思考?行のサイズを計算する正しい方法は何ですか?私が持っている一つのアイデアは、ポストTOASTサイズを減算し、TOASTサイズに追加する必要があります
SELECT pg_column_size(bar), pg_column_size(foo.*) - octet_length(bar) + pg_column_size(bar) FROM foo;
です。
編集:私の提案されている回避策は、文字列にのみ有効です。 JSONBでは動作しません。