-- ensure we get stable results regardless of installation's default SET default_toast_compression = 'pglz';
-- test creating table with compression method CREATETABLE cmdata(f1 text COMPRESSION pglz); CREATEINDEX idx ON cmdata(f1); INSERTINTO cmdata VALUES(repeat('1234567890', 1000));
\d+ cmdata CREATETABLE cmdata1(f1 TEXT COMPRESSION lz4); INSERTINTO cmdata1 VALUES(repeat('1234567890', 1004));
\d+ cmdata1
-- verify stored compression method in the data SELECT pg_column_compression(f1) FROM cmdata; SELECT pg_column_compression(f1) FROM cmdata1;
-- decompress data slice SELECT SUBSTR(f1, 200, 5) FROM cmdata; SELECT SUBSTR(f1, 2000, 50) FROM cmdata1;
-- copy with table creation SELECT * INTO cmmove1 FROM cmdata;
\d+ cmmove1 SELECT pg_column_compression(f1) FROM cmmove1;
-- copy to existing table CREATETABLE cmmove3(f1 text COMPRESSION pglz); INSERTINTO cmmove3 SELECT * FROM cmdata; INSERTINTO cmmove3 SELECT * FROM cmdata1; SELECT pg_column_compression(f1) FROM cmmove3;
-- test LIKE INCLUDING COMPRESSION CREATETABLE cmdata2 (LIKE cmdata1 INCLUDING COMPRESSION);
\d+ cmdata2 DROPTABLE cmdata2;
-- try setting compression for incompressible data type CREATETABLE cmdata2 (f1 int COMPRESSION pglz);
-- update using datum from different table CREATETABLE cmmove2(f1 text COMPRESSION pglz); INSERTINTO cmmove2 VALUES (repeat('1234567890', 1004)); SELECT pg_column_compression(f1) FROM cmmove2; UPDATE cmmove2 SET f1 = cmdata1.f1 FROM cmdata1; SELECT pg_column_compression(f1) FROM cmmove2;
-- test externally stored compressed data CREATEORREPLACE FUNCTION large_val() RETURNS TEXT LANGUAGE SQLAS 'select array_agg(fipshash(g::text))::text from generate_series(1, 256) g'; CREATETABLE cmdata2 (f1 text COMPRESSION pglz); INSERTINTO cmdata2 SELECT large_val() || repeat('a', 4000); SELECT pg_column_compression(f1) FROM cmdata2; INSERTINTO cmdata1 SELECT large_val() || repeat('a', 4000); SELECT pg_column_compression(f1) FROM cmdata1; SELECT SUBSTR(f1, 200, 5) FROM cmdata1; SELECT SUBSTR(f1, 200, 5) FROM cmdata2; DROPTABLE cmdata2;
--test column type update varlena/non-varlena CREATETABLE cmdata2 (f1 int);
\d+ cmdata2 ALTERTABLE cmdata2 ALTERCOLUMN f1 TYPE varchar;
\d+ cmdata2 ALTERTABLE cmdata2 ALTERCOLUMN f1 TYPE intUSING f1::integer;
\d+ cmdata2
--changing column storage should not impact the compression method --but the data should not be compressed ALTERTABLE cmdata2 ALTERCOLUMN f1 TYPE varchar; ALTERTABLE cmdata2 ALTERCOLUMN f1 SET COMPRESSION pglz;
\d+ cmdata2 ALTERTABLE cmdata2 ALTERCOLUMN f1 SET STORAGE plain;
\d+ cmdata2 INSERTINTO cmdata2 VALUES (repeat('123456789', 800)); SELECT pg_column_compression(f1) FROM cmdata2;
-- test compression with materialized view CREATE MATERIALIZED VIEW compressmv(x) ASSELECT * FROM cmdata1;
\d+ compressmv SELECT pg_column_compression(f1) FROM cmdata1; SELECT pg_column_compression(x) FROM compressmv;
-- test compression with partition CREATETABLE cmpart(f1 text COMPRESSION lz4) PARTITION BY HASH(f1); CREATETABLE cmpart1 PARTITION OF cmpart FORVALUESWITH (MODULUS 2, REMAINDER 0); CREATETABLE cmpart2(f1 text COMPRESSION pglz);
-- test compression with inheritance CREATETABLE cminh() INHERITS(cmdata, cmdata1); -- error CREATETABLE cminh(f1 TEXT COMPRESSION lz4) INHERITS(cmdata); -- error CREATETABLE cmdata3(f1 text); CREATETABLE cminh() INHERITS (cmdata, cmdata3);
-- test default_toast_compression GUC SET default_toast_compression = ''; SET default_toast_compression = 'I do not exist compression'; SET default_toast_compression = 'lz4'; SET default_toast_compression = 'pglz';
-- test alter compression method ALTERTABLE cmdata ALTERCOLUMN f1 SET COMPRESSION lz4; INSERTINTO cmdata VALUES (repeat('123456789', 4004));
\d+ cmdata SELECT pg_column_compression(f1) FROM cmdata;
ALTERTABLE cmdata2 ALTERCOLUMN f1 SET COMPRESSION default;
\d+ cmdata2
-- test alter compression method for materialized views ALTER MATERIALIZED VIEW compressmv ALTERCOLUMN x SET COMPRESSION lz4;
\d+ compressmv
-- test alter compression method for partitioned tables ALTERTABLE cmpart1 ALTERCOLUMN f1 SET COMPRESSION pglz; ALTERTABLE cmpart2 ALTERCOLUMN f1 SET COMPRESSION lz4;
-- new data should be compressed with the current compression method INSERTINTO cmpart VALUES (repeat('123456789', 1004)); INSERTINTO cmpart VALUES (repeat('123456789', 4004)); SELECT pg_column_compression(f1) FROM cmpart1; SELECT pg_column_compression(f1) FROM cmpart2;
-- VACUUM FULL does not recompress SELECT pg_column_compression(f1) FROM cmdata;
VACUUM FULL cmdata; SELECT pg_column_compression(f1) FROM cmdata;
-- test expression index DROPTABLE cmdata2; CREATETABLE cmdata2 (f1 TEXT COMPRESSION pglz, f2 TEXT COMPRESSION lz4); CREATEUNIQUEINDEX idx1 ON cmdata2 ((f1 || f2)); INSERTINTO cmdata2 VALUES((SELECT array_agg(fipshash(g::TEXT))::TEXT FROM
generate_series(1, 50) g), VERSION());
-- check data is ok SELECT length(f1) FROM cmdata; SELECT length(f1) FROM cmdata1; SELECT length(f1) FROM cmmove1; SELECT length(f1) FROM cmmove2; SELECT length(f1) FROM cmmove3;
CREATETABLE badcompresstbl (a text COMPRESSION I_Do_Not_Exist_Compression); -- fails CREATETABLE badcompresstbl (a text); ALTERTABLE badcompresstbl ALTER a SET COMPRESSION I_Do_Not_Exist_Compression; -- fails DROPTABLE badcompresstbl;
\set HIDE_TOAST_COMPRESSION true
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-08-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.