-- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. --install necessary functions for tests \c :TEST_DBNAME :ROLE_SUPERUSER CREATE OR REPLACE FUNCTION ts_test_compression() RETURNS VOID AS :TSL_MODULE_PATHNAME LANGUAGE C VOLATILE; \ir include/compression_utils.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors \c :TEST_DBNAME :ROLE_DEFAULT_PERM_USER ------------------ -- C unit tests -- ------------------ SELECT ts_test_compression(); ts_test_compression --------------------- (1 row) \ir include/rand_generator.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. -------------------------- -- cheap rand generator -- -------------------------- create table rand_minstd_state(i bigint); create function rand_minstd_advance(bigint) returns bigint language sql immutable as $$ select (16807 * $1) % 2147483647 $$; create function gen_rand_minstd() returns bigint language sql security definer as $$ update rand_minstd_state set i = rand_minstd_advance(i) returning i $$; -- seed the random num generator insert into rand_minstd_state values (321); ------------------------ -- BIGINT Compression -- ------------------------ SELECT $$ select item from base_ints order by rn $$ AS "QUERY" \gset \set TABLE_NAME base_ints \set TYPE BIGINT \set COMPRESSION_CMD _timescaledb_internal.compress_deltadelta(item) \set DECOMPRESS_FORWARD_CMD _timescaledb_internal.decompress_forward(c::_timescaledb_internal.compressed_data, NULL::BIGINT) \set DECOMPRESS_REVERSE_CMD _timescaledb_internal.decompress_reverse(c::_timescaledb_internal.compressed_data, NULL::BIGINT) -- random order CREATE TABLE base_ints AS SELECT row_number() OVER() as rn, item::bigint FROM (select sub.item from (SELECT generate_series(1, 1000) item) as sub ORDER BY gen_rand_minstd()) sub; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors psql:include/compression_test.sql:7: NOTICE: table "compressed" does not exist, skipping compressed size ----------------- 1728 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_ints; -- ascending order with nulls CREATE TABLE base_ints AS SELECT row_number() OVER() as rn, item::bigint FROM (SELECT generate_series(1, 1000) item) sub; INSERT INTO base_ints VALUES (0, NULL), (10, NULL), (10000, NULL); \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 93 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) SELECT c ints_text FROM compressed; ints_text -------------------------------------------------------------------------------------------------------------------------- BAEAAAAAAAAD6AAAAAAAAAABAAAD6AAAAAIAAAAAAAAA8gAAAAAAAAACAAA8gAAAAAAAAAPrAAAAAwAAAAAAAAHxAAAAAAAABAEAADqgAAAAAAAAAAAAAAAB (1 row) DROP TABLE base_ints; -- single element CREATE TABLE base_ints AS SELECT row_number() OVER() as rn, item::bigint FROM (SELECT generate_series(1, 1) item) sub; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 45 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_ints; -- really big deltas SELECT 9223372036854775807 as big_int_max \gset SELECT -9223372036854775808 as big_int_min \gset CREATE TABLE base_ints AS SELECT row_number() over () as rn, item FROM ( VALUES --big deltas (0), (:big_int_max), (:big_int_min), (:big_int_max), (:big_int_min), (0), (:big_int_min), (32), (5), (:big_int_min), (-52), (:big_int_max), (1000), --big delta_deltas (0), (:big_int_max), (:big_int_max), (:big_int_min), (:big_int_min), (:big_int_max), (:big_int_max), (0), (:big_int_max-1), (:big_int_max-1), (:big_int_min), (:big_int_min), (:big_int_max-1), (:big_int_max-1) ) as t(item); \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 184 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_ints; -- NULLs CREATE TABLE base_ints AS SELECT row_number() OVER() as rn, NULLIF(i, 5) item FROM generate_series(1::BIGINT, 10) i; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 69 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_ints; CREATE TABLE base_ints AS SELECT row_number() OVER() as rn, NULLIF(i, 1) item FROM generate_series(1::BIGINT, 10) i; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 69 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_ints; CREATE TABLE base_ints AS SELECT row_number() OVER() as rn, NULLIF(i, 10) item FROM generate_series(1::BIGINT, 10) i; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 69 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_ints; CREATE TABLE base_ints AS SELECT row_number() OVER() as rn, NULLIF(NULLIF(NULLIF(NULLIF(i, 2), 4), 5), 8) item FROM generate_series(1::BIGINT, 10) i; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 69 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_ints; ------------------------ -- INT Compression -- ------------------------ CREATE TABLE base_ints AS SELECT row_number() OVER() as rn, item::int FROM (select sub.item from (SELECT generate_series(1, 1000) item) as sub ORDER BY gen_rand_minstd()) sub; SELECT $$ select item::bigint from base_ints order by rn $$ AS "QUERY" \gset \set TABLE_NAME base_ints \set TYPE BIGINT \set COMPRESSION_CMD _timescaledb_internal.compress_deltadelta(item::bigint) \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 1728 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_ints; ----------------------------- -- TIMESTAMPTZ Compression -- ----------------------------- SELECT $$ select item from base_time order by rn $$ AS "QUERY" \gset \set TYPE TIMESTAMPTZ \set TABLE_NAME base_time \set COMPRESSION_CMD _timescaledb_internal.compress_deltadelta(item) \set DECOMPRESS_FORWARD_CMD _timescaledb_internal.decompress_forward(c::_timescaledb_internal.compressed_data, NULL::TIMESTAMPTZ) \set DECOMPRESS_REVERSE_CMD _timescaledb_internal.decompress_reverse(c::_timescaledb_internal.compressed_data, NULL::TIMESTAMPTZ) CREATE TABLE base_time AS SELECT row_number() OVER() as rn, item FROM (select sub.item from (SELECT generate_series('2018-03-02 1:00'::TIMESTAMPTZ, '2018-03-28 1:00', '1 hour') item) as sub ORDER BY gen_rand_minstd()) sub; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 5332 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_time; ------------------------ -- DOUBLE Compression -- ------------------------ SELECT $$ select item from base_doubles order by rn $$ AS "QUERY" \gset \set TABLE_NAME base_doubles SELECT 'DOUBLE PRECISION' as "TYPE" \gset \set COMPRESSION_CMD _timescaledb_internal.compress_gorilla(item) SELECT '_timescaledb_internal.decompress_forward(c::_timescaledb_internal.compressed_data, NULL::DOUBLE PRECISION)' AS "DECOMPRESS_FORWARD_CMD" \gset SELECT '_timescaledb_internal.decompress_reverse(c::_timescaledb_internal.compressed_data, NULL::DOUBLE PRECISION)' AS "DECOMPRESS_REVERSE_CMD" \gset CREATE TABLE base_doubles AS SELECT row_number() OVER() as rn, item::double precision FROM (select sub.item from (SELECT generate_series(1, 1000) item) as sub ORDER BY gen_rand_minstd()) sub; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 1808 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) SELECT c gorilla_text FROM compressed; gorilla_text ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- AwBAe9AAAAAAAAAAA+gAAAABAAAAAAAAAA8AAD6AAAAAAQAAA+gAAAAEAAAAAAAA8f8AAAQQAAAAAQAAG/AAAAAAAAAAAAAAGFsAABqAAAAAAAAAAAcwggooggggggGIIIIIIINMICETDCCCCyCCggooohAgwo0IINIIIIONIDCSSiDEDjDTAAAgwgowEEgAAABIAAAABQAAAAAABURFBrWoSpTWsZLd2bx925R8edzHeqXWhNKZ2TdVfcjd3WcGpYk9HNOs6QAAAMg0ZejfXftmAzFj/WfPPef8X/X/XqufB+P/kcu7vc2E7EGeb/N8d9n+P/++mn+B3y757qdTc+cMO+/sDwh6c9yabt/ee8PSPvf38J84bk1v2L7sFUj/oFG+Q2ASrf4vMRXZNgPQN94+09MyHUZYO9gq4Jvr4y5i7Dw7cIjFjviIRgKwBwVIasMJB8HUFJCaHALneS4lwMYLAFW+ee4vrX7kFxiDP/u/0NB883YajtB5g6gHz818c85BAJIaaQGWJvBYhH6MBUAVe0jYe/AugeoDX6oIB3YF3fkPxB/MLxgAEd5QnMVE8a7OdZhE/F31P9uG/ToYkDOLILqkMttQd0MIDrzF4NDDgEfXaYw5IBDyd7gqoZM6e+nyi+kTXR+olEVkvR6Y+VelPkNFPXwDgG904yUGIA8eWiCRztW2jsEF/D/ZmUwOdsBXngeH5gA+oJk+8C6DFCVu+QAgzHkT3CEj+sdQKqA0gB32vIn8YCD9XFR5N8ymIB3GhAKIYEOb6WB7AKFIdQgRYMT6YSgLkE192F49AdkBKgXrcmFfonz7+tiTAV8Uuowc7EX7cF8A/84f6GWdb/2YCYGoRQLz4S/CefAtCyB2wUb8fasEp2P4E+vAY93R33lHsHcLr6ASBwB8DkFsMPvz34UF/1au8ru8ZSXfCClxmzhkjn2R76DLexgjFyPf3Lbhn3sHtxl51BdN5dsuogM36j/YO5wiFBDjupEEPKAT3mT1gEyDj8XeHN5eLv6/Z/v0CAbQOgE8dBA+/XUBltEPD6wNFvhLDJTruBtgIwaIFUCWvYMm9Ug9Qf6UARBF5zdCM64e03q/wxlxMNMgBIA3rlNj6lAmf+ZfafPyXmcCt/D+38NAxe2v4HxfPnkXeWD41XwNAc/6Pf4OgY3scDoE86+PA/iA5APH7OSYAwHqAH6eqQE8ZMA5vaEMHBP0L77BU36BHBBPmPTMvvHU/gEILrA1CS9yBPn+QH21kmQNo4UBlBMBdA+YHEPP0oBp+oHEdI4U9owRoZX1HlPxWGK82hd1KhgNb4CH1wlLqF9CBeeA87ftCoxvwVf9Mkt7K++BdJ+/BAcM/7uP/SCwikfF/a0P+AcnObhBsf0fWMLIBYgGQwgFsGUHlCr+VCr+Dv9IS9OJ6AvBkR90hg6yBxv+35WhfgMaILQU+CiDcBWAovPD0nFcN8ETD0gUAeajNrmjQ0BFzVZ8aHJdJDHAkLsCXQIga22bdrD+Az+K/qv9g0Tn35AIwGHBAhvFoFJCEDPBkX6v0uNI4P9MC/BsQ0v3EFShCp4HlBMBji4/0BSQdgeAsD9EOQ6OAuz/fLwQIcT2F/vpn1v98ihhki+O9IImwRfT8d628UeAfkBs/94xTsgEg7YWQHSBSP3EXOPQA31+CoFQMm7wedj1/KgY9R2tR6f7WHu6X8g/zxAQSwNv5sBs0h5S9/eYP7i0DgggoO4DS7f63CgGkC+BowjH9P58EODiEVDr/hRQXIAqQMrnB1sDAB4BXhwNyOxDpBDr3l7u/72w/teyeCYOu0hJzMKHk6cIUAJenwKYVwWfpQc0JGGZFo+OIWEQnkEy3uL81+5AxtMpQI1Ox/sM+IR/q/wp8U9bHJcvAegKULJCj3MH+AU/mGFHAC2nzXcIS0EIGQBJfe+7AwgnH5QEO5MqcB+FQc79DCgB93kAOH634D/VCgBbBaf+wIwaQP3wH5loq2XgVFDaRwR3bXmrqjg1uq1bAQMMghQ3Qay1Giw0QZ68hh4AzbH9VAD3kyKUDPymLiZcQPATOtHTgqpnD71/+Dn+zRCaeizhyzMgDANwE7CQB2QjdCwvoHAC8FO5FzyHUeeuJRLg+gSELvepP8E8AxgIA87vA7XoEOeFxIQJI6GB3gHHKQcHl0PnhUMG142fA9AiPtv7Idzon2/sqGMDqUXU/gnwhYDTmcB05JZWCk8mxH3iA/gK0I161Tp1aBmAHOWwQgLH8/yv/eAX9O8jf//uILISNva5mDg+U4eu8CoFeXrU2mFTIX9pDSeZBTcxRGgOT4CZz3/4p+wA2CUDDvqfrFN3TuQvKP/Oi0Ipf3AAf78fnyYDd0E4CaEG9feApYIX/QLz1eHn0yHrDL5rMpPzMK0AAPgP65hhGA== (1 row) DROP TABLE base_doubles; -- single element CREATE TABLE base_doubles AS SELECT row_number() OVER() as rn, item::double precision FROM (SELECT generate_series(1, 1) item) sub; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 109 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_doubles; --special values CREATE TABLE base_doubles AS SELECT row_number() over () as rn, item FROM ( VALUES --special (0::double precision), ('Infinity'), ('-Infinity'), ('NaN'), --big deltas (0), ('Infinity'), ('-Infinity'), ('Infinity'), ('-Infinity'), (0), ('-Infinity'), (32), (5), ('-Infinity'), (-52), ('Infinity'), (1000), --big delta_deltas (0), ('Infinity'), ('Infinity'), ('-Infinity'), ('-Infinity'), ('Infinity'), ('Infinity') ) as t(item); \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 152 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_doubles; -- all 0s CREATE TABLE base_doubles AS SELECT row_number() over () as rn, 0::FLOAT(50) as item FROM (SELECT generate_series(1, 1000) ) j; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 160 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_doubles; -- NULLs CREATE TABLE base_doubles AS SELECT row_number() OVER() as rn, NULLIF(i, 5)::DOUBLE PRECISION item FROM generate_series(1, 10) i; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 136 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_doubles; CREATE TABLE base_doubles AS SELECT row_number() OVER() as rn, NULLIF(i, 1)::DOUBLE PRECISION item FROM generate_series(1, 10) i; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 136 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_doubles; CREATE TABLE base_doubles AS SELECT row_number() OVER() as rn, NULLIF(i, 10)::DOUBLE PRECISION item FROM generate_series(1, 10) i; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 136 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_doubles; CREATE TABLE base_doubles AS SELECT row_number() OVER() as rn, NULLIF(NULLIF(NULLIF(NULLIF(i, 2), 4), 5), 8)::DOUBLE PRECISION item FROM generate_series(1, 10) i; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 136 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_doubles; ------------------------ -- Dictionary Compression -- ------------------------ SELECT $$ select item from base_texts order by rn $$ AS "QUERY" \gset \set TABLE_NAME base_texts SELECT 'TEXT' as "TYPE" \gset \set COMPRESSION_CMD _timescaledb_internal.compress_dictionary(item) \set DECOMPRESS_FORWARD_CMD _timescaledb_internal.decompress_forward(c::_timescaledb_internal.compressed_data, NULL::TEXT) \set DECOMPRESS_REVERSE_CMD _timescaledb_internal.decompress_reverse(c::_timescaledb_internal.compressed_data, NULL::TEXT) -- high cardinality CREATE TABLE base_texts AS SELECT row_number() OVER() as rn, item::text FROM (select sub.item from (SELECT generate_series(1, 1000) item) as sub ORDER BY gen_rand_minstd()) sub; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 4289 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) SELECT c from compressed; c ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- AQBwZ19jYXRhbG9nAHRleHQAAAEAAAPoAAAAAzM0OQAAAAM4NjMAAAACNDUAAAADOTc4AAAAAzEwMQAAAAM1MjcAAAADOTUxAAAAAzYyOQAAAAM2NTcAAAADMjU5AAAAAzU5OQAAAAM1MzAAAAADMTI2AAAAAzc1OAAAAAI2MQAAAAMyMjIAAAACNTkAAAADMzUyAAAAAzI3OQAAAAM0NzQAAAADMzg5AAAAAzUxMAAAAAI2MgAAAAM2OTYAAAABMwAAAAM3MDAAAAADMzE3AAAAAzM3OAAAAAM0MTEAAAADNjI0AAAAAzQ4MQAAAAM3NzEAAAADMjE1AAAAAzgxNwAAAAM3NzIAAAADOTA0AAAAAzU5NQAAAAM3NTYAAAADNjE3AAAAAzk1MwAAAAMyMTAAAAADODIzAAAAAzUzNAAAAAM2NTQAAAADMjAxAAAAAjE2AAAAAzkzNgAAAAM3ODQAAAADODQzAAAAAzUwNgAAAAM2NzMAAAADMzYzAAAAAzYzNgAAAAI1OAAAAAM1MDMAAAADMTk1AAAAAzU1MwAAAAMxNDcAAAADOTAxAAAAAzIyMQAAAAMxMjEAAAADNjYxAAAAAzU4NAAAAAM2MDkAAAADNDQ2AAAAAzkwNgAAAAM2MDcAAAADMzYxAAAAAzY0NwAAAAM4MDgAAAADOTc5AAAAAzQ4MAAAAAM5MjMAAAADNzYxAAAAAzI0MwAAAAMzMjEAAAADMjE3AAAAAjM5AAAAAzYwMwAAAAMzNjkAAAADOTM4AAAAAzcyMQAAAAI4MgAAAAM4ODkAAAADMjM2AAAAAzk1NAAAAAMxMTUAAAADNzgyAAAAAzk3NgAAAAMyMDcAAAADNDU4AAAAAzQxMwAAAAM4MjAAAAADODg3AAAAAzk2OQAAAAIxOQAAAAM1MjYAAAADMzQwAAAAAzQ2MgAAAAM1ODYAAAADNTMxAAAAAzQzNgAAAAM3ODEAAAADOTkxAAAAAzQzMgAAAAM4MjUAAAADNTE0AAAAAzYxMQAAAAM0MDAAAAADNjA1AAAAAzQzMwAAAAMzNjYAAAADNjc2AAAAAzE1OQAAAAM1MDUAAAABNQAAAAMxMTIAAAADNDUyAAAAAzYwMgAAAAM2NzIAAAADMzkyAAAAAjM4AAAAAzE2MwAAAAM0ODcAAAADNjI1AAAAAzQ4NAAAAAM3MTIAAAADODM2AAAAAjM3AAAAAzgwNwAAAAM1MzYAAAADNjkzAAAAAzk2MAAAAAMxNTEAAAADMTU3AAAAAzEzMAAAAAM3ODkAAAADOTMyAAAAAzc0MQAAAAM2NDEAAAADOTYxAAAAAzk1MAAAAAMzMDQAAAADNDA1AAAAAzMyNgAAAAM2MTgAAAACNDIAAAADNTUxAAAAAzE3NgAAAAM4ODEAAAADMTc4AAAAAzQwMwAAAAI3MwAAAAI2NwAAAAM0MzgAAAADMjg0AAAAAzgyNgAAAAM5MTAAAAADNTA0AAAAAzgyOAAAAAI0NAAAAAMzNzYAAAADNTkwAAAAAzgzMgAAAAM3MzQAAAADNjcxAAAAAzk2NgAAAAM1ODAAAAADMTU1AAAAAzMyNwAAAAIyNQAAAAM5ODQAAAACMTgAAAADODc0AAAAAzk5NwAAAAMxMDgAAAADMTg3AAAAAzU3NwAAAAM1MTUAAAACMjkAAAACNTEAAAADMjk4AAAAAzczNgAAAAMyMjAAAAACNDkAAAADODgwAAAAAzQwOQAAAAM0MTcAAAADNzU1AAAAAzE5MAAAAAM0NDUAAAADNTYxAAAAAzcxNAAAAAI1MAAAAAM3NDYAAAADNDMxAAAAAzc5NAAAAAM3MjgAAAADNzQzAAAAAzk3MAAAAAM1NDUAAAADMTk0AAAAAzg3MQAAAAM4MjIAAAACMTAAAAADMzY1AAAAAzQ5MgAAAAMzMzUAAAADNTQ2AAAAAzQyMQAAAAM2MDYAAAADODAwAAAAAzkwNwAAAAM3MTcAAAADOTEzAAAAAzE0MwAAAAMxNzUAAAADNDgzAAAAAzE5OQAAAAMzMTYAAAADNDUxAAAAAzk0MAAAAAM0MzUAAAABOAAAAAM5MzQAAAADNTYzAAAAATIAAAADMTA0AAAAAzM0MgAAAAM0MjQAAAADMTUzAAAAAzc3OQAAAAM0MzcAAAADMzI0AAAAAzg0OQAAAAM2NzQAAAADMzMyAAAAAzgwMQAAAAM5MzAAAAADODA1AAAAAzE4MwAAAAM0MTgAAAADMzY4AAAAAzM5MAAAAAMxODIAAAADODU3AAAAAzU2OQAAAAM2NjMAAAADNjA0AAAAAzQzOQAAAAMyMzkAAAADMTM3AAAAAzE4OQAAAAMxMzQAAAADOTE0AAAAAzE4MAAAAAMzMDUAAAADNTg5AAAAAzIyNwAAAAM2NDkAAAADMzgzAAAAAzg4NgAAAAM3MTUAAAADNzEwAAAAAzMyOQAAAAM3MDMAAAADOTE5AAAAAzUyMQAAAAM4NDcAAAADOTg3AAAAAzYxNgAAAAMzMjgAAAADNTA4AAAAAzIzMAAAAAMzMDEAAAADMjI4AAAAAzgzOAAAAAM1MjUAAAADNDk3AAAAAzIwNgAAAAM0MDcAAAAEMTAwMAAAAAMzOTYAAAADNzA5AAAAAzkzMQAAAAM3NzMAAAADNjkxAAAAAzYwOAAAAAM3NTIAAAADOTU1AAAAAzQ5NQAAAAM0ODYAAAACNzgAAAADNjY1AAAAAzc4NwAAAAMxNTIAAAADMjUzAAAAAzk3MgAAAAM2ODQAAAADNzc0AAAAAzU2OAAAAAM3NTEAAAADNjU1AAAAAzMzOQAAAAM5MDUAAAADMzU4AAAAAzc5NwAAAAMzNDEAAAADMzk1AAAAAzM0NwAAAAM4MTEAAAADMzE4AAAAAzI5NAAAAAMyMzgAAAADNTgyAAAAAzU3NgAAAAM4NTMAAAADNjU5AAAAAzkxMgAAAAM4OTAAAAADNzM4AAAAAzU3MQAAAAM0NTQAAAADODI5AAAAAzk1NgAAAAMzODQAAAADNDY4AAAAAzE4NQAAAAMyNDkAAAADODY0AAAAAzM1MAAAAAI4NwAAAAM0NDgAAAADMzU2AAAAAzIyNAAAAAM4OTMAAAADNDA2AAAAAzQ0MAAAAAMyNjkAAAABNwAAAAI5OAAAAAI2NQAAAAIzNgAAAAM1ODMAAAABOQAAAAMyNTUAAAADMTIzAAAAAzE0MQAAAAM3MDIAAAADODY1AAAAAjI4AAAAAzE2NgAAAAMzNzcAAAADNTEzAAAAAzk1OQAAAAM3OTkAAAADOTM3AAAAAzk0MgAAAAMxMjkAAAADNzA0AAAAAzg3NwAAAAI3NAAAAAI3MgAAAAM1NzUAAAADMjkyAAAAAzc4OAAAAAM1OTgAAAADNjY4AAAAAzM1NAAAAAM4MTkAAAADMzIwAAAAAzY1MAAAAAM4NTkAAAADNTQ4AAAAAzc3NwAAAAM0NjUAAAADMjU3AAAAAzI0MQAAAAM3NzYAAAACOTkAAAADNDczAAAAAjE0AAAAAzMyMgAAAAM5OTkAAAACMTcAAAADMjIzAAAAAzc0MAAAAAMxNjAAAAADMzg3AAAAAjEzAAAAAjY2AAAAAzE3MAAAAAM3OTYAAAADODU4AAAAAzE4OAAAAAMyODYAAAADMjAyAAAAAzE4MQAAAAM3MjYAAAADMTc3AAAAATQAAAADMzU3AAAAAjQ2AAAAAzM3MQAAAAMxMzgAAAADNDk2AAAAAzkwMgAAAAM3NTkAAAACNDEAAAADMjI5AAAAAzcwNQAAAAM1NDcAAAADNDI5AAAAAzE5MwAAAAM3MjIAAAADODYxAAAAAzE1OAAAAAM0OTgAAAADNjEzAAAAAzM4OAAAAAM1NjAAAAADNTQxAAAAAzI0NAAAAAMxNjIAAAADNTY0AAAAAzU1NgAAAAM3NDIAAAADNTMzAAAAAzQ3MgAAAAM0NjcAAAADMjgwAAAAAzc1MAAAAAI5MQAAAAMyODkAAAADODQ1AAAAAzUwOQAAAAM2NTMAAAADNzgzAAAAAzc5MQAAAAM5ODEAAAADNjMwAAAAAzM3MwAAAAMzMDAAAAADNjQwAAAAAzk3NAAAAAM0NDcAAAADNjI2AAAAAzk4NQAAAAM2NjAAAAADNjg2AAAAAjMyAAAAAzE1NAAAAAMyMTkAAAADODg1AAAAAzcwMQAAAAM2MzUAAAADODM5AAAAAzQxNgAAAAM2ODUAAAADMjUyAAAAAzM5MQAAAAMzODYAAAADODQ0AAAAAzg4MwAAAAM0NzcAAAADMjEyAAAAAzU1NAAAAAMzOTgAAAADMzIzAAAAAzE5NwAAAAI4MQAAAAM2OTcAAAADNjY0AAAAAzYwMQAAAAM2NDUAAAADNjk5AAAAAzIyNQAAAAI4OAAAAAM0ODIAAAADMzcyAAAAAjIzAAAAAzY1OAAAAAM4MTUAAAADNTk0AAAAAzk5MwAAAAM1MjQAAAADMTEwAAAAAzc5MAAAAAMxNTAAAAADNjEyAAAAAjEyAAAAAzE0MgAAAAM1NjcAAAADODUwAAAAAzg0NgAAAAM1MjMAAAADMjU4AAAAAzMzMwAAAAIzMQAAAAM0MjMAAAADNDkxAAAAAzQ2MwAAAAM0NDQAAAADMzA3AAAAAjc3AAAAAzYxNQAAAAMxMDkAAAADNTg4AAAAAzYyMQAAAAM3NzUAAAADMzUxAAAAAzY3OQAAAAM1NzIAAAADODc4AAAAAzk0OQAAAAM5OTYAAAADNDk5AAAAAzUyMAAAAAMxNzMAAAADNTU4AAAAAjk0AAAAAzM0NQAAAAI5NgAAAAMyODUAAAADNzY3AAAAAzg3OQAAAAMyNjgAAAADOTkwAAAAAzczNQAAAAM5ODAAAAADMjgxAAAAAzY4MQAAAAMxMTQAAAADNzQ5AAAAAzk5NQAAAAI5MwAAAAM5OTQAAAADMjEzAAAAAzUxNgAAAAMxMDIAAAADNTUyAAAAAzU5MwAAAAMzODEAAAADMzgyAAAAAjk1AAAAAzE2NAAAAAM4OTgAAAADOTY0AAAAAzI3MwAAAAM5MjIAAAADNzIwAAAAAzM5NAAAAAIzMAAAAAM3MTYAAAADMTA1AAAAAzg3NQAAAAM3NjIAAAADNTkxAAAAAzk3NwAAAAM3NzgAAAADNjQ4AAAAAzc2OQAAAAM2NzUAAAADNzk1AAAAAzg2OQAAAAMzNDQAAAADOTQ4AAAAAzQyOAAAAAM2MTQAAAADNTE5AAAAAzE3NAAAAAMxNDgAAAADNDkwAAAAAzI4MgAAAAM1OTIAAAADOTgzAAAAAzM5NwAAAAMxOTIAAAADMzQzAAAAAzI3NQAAAAM1NzMAAAADNjE5AAAAAzMwNgAAAAM0MzQAAAACMjAAAAADODk3AAAAAzI2MwAAAAM4OTUAAAADODUxAAAAAzI1MAAAAAMyMzMAAAADNTc0AAAAAzg3MAAAAAMyNjEAAAADNDI1AAAAAzI4NwAAAAM1NDIAAAABMQAAAAM4MTYAAAADNzY2AAAAAjU1AAAAAzg5NAAAAAMyNDgAAAADNDg1AAAAAzI1MQAAAAM1MjkAAAADNzkyAAAAAzUzNwAAAAM2OTIAAAADOTUyAAAAAzczMwAAAAM2NzcAAAACOTIAAAADMTQ1AAAAAzYzMwAAAAM1MzIAAAADNjY5AAAAAjcxAAAAAzg2MgAAAAE2AAAAAzg5MQAAAAMxMDMAAAADNzcwAAAAAzI5MwAAAAM1NzkAAAACOTAAAAADNzA4AAAAAzU5NgAAAAM4MTQAAAADMzU5AAAAAzY0MgAAAAM5MzkAAAADMzY0AAAAAzIwNAAAAAM0OTQAAAADMjA4AAAAAzExMwAAAAM3NDUAAAACNzkAAAADMzQ4AAAAAjU3AAAAAzU0MwAAAAMzOTMAAAADNDU2AAAAAzMxMAAAAAM5MjQAAAADMjcwAAAAAzk3NQAAAAM5NDMAAAADMjE4AAAAAzM3NQAAAAMxNjUAAAADMTU2AAAAAzczOQAAAAMzNTUAAAADODU0AAAAAzEzNQAAAAM4MzAAAAADMzY3AAAAAzMwMgAAAAIyMgAAAAM0NzgAAAADNzY1AAAAAzI0MgAAAAMyOTUAAAADNzg1AAAAAzg4OAAAAAMzODUAAAACNDcAAAADNTM1AAAAAzU0NAAAAAMyMDAAAAADMTM5AAAAAzgyNAAAAAMxMTkAAAADNDU1AAAAAzE3OQAAAAM2NDQAAAADNTU1AAAAAzY4MgAAAAMyNjcAAAADMTkxAAAAAzgzNAAAAAMyMDkAAAADNjMxAAAAAzU3OAAAAAM5NDQAAAADNjgzAAAAAzEyMgAAAAIyMQAAAAM4ODQAAAADMzEyAAAAAzkzMwAAAAM0NDkAAAADNDU5AAAAAzI3NAAAAAMyNzIAAAADODQxAAAAAzI5MAAAAAI2NAAAAAMzNzkAAAADNTU5AAAAAzI5NwAAAAM1MTIAAAADOTE1AAAAAzQyNwAAAAM0MDQAAAADMzE1AAAAAzIzNwAAAAM4NDAAAAADMjYyAAAAAzY3OAAAAAMyODgAAAACNDgAAAADMjMyAAAAAzc0NAAAAAM5MjcAAAADMjU2AAAAAzk1NwAAAAM5NDUAAAADODk5AAAAAzI2MAAAAAMxMzMAAAADNTU3AAAAAzc2MwAAAAM2NzAAAAADMjkxAAAAAzg2OAAAAAMxNjEAAAADMzk5AAAAAzczMAAAAAM1MTEAAAACMjcAAAADNTAyAAAAAzYyMgAAAAM1NDkAAAADNDI2AAAAAjg0AAAAAjYzAAAAAzUyOAAAAAM3MjUAAAACNzAAAAADMjM1AAAAAzUzOAAAAAM0NzkAAAADOTE4AAAAAzY1MQAAAAM0MTkAAAADMzM2AAAAAzk5OAAAAAMxMjQAAAADMjQ3AAAAAzI5OQAAAAM1ODEAAAADMjMxAAAAAzMzMQAAAAMxNjcAAAADMjA1AAAAAzc5OAAAAAM2MjMAAAADNDMwAAAAAjg5AAAAAzI2NQAAAAM0ODkAAAACMTUAAAADMjc4AAAAAzgxOAAAAAM4NTIAAAACOTcAAAADNjIwAAAAAjU2AAAAAzkyMAAAAAM1NTAAAAADODczAAAAAzQ1NwAAAAM2NjIAAAADNDUwAAAAAzExOAAAAAM3MTgAAAADNzI3AAAAAzMwOQAAAAMyNzcAAAADNzExAAAAAzYwMAAAAAMzNDYAAAADNTAwAAAAAzg3NgAAAAM3NTQAAAADMzM0AAAAAzIzNAAAAAMxMzIAAAADMjE2AAAAAzc2OAAAAAMzNzAAAAADODgyAAAAAzI1NAAAAAM3MDcAAAADODY2AAAAAzE2OAAAAAMzMzAAAAADNTIyAAAAAzk2MgAAAAM3NDcAAAADNjgwAAAAAzg0MgAAAAM3NjQAAAADODkyAAAAAzI5NgAAAAM4NzIAAAADOTczAAAAAzQwMgAAAAM4NTUAAAADNDA4AAAAAzkzNQAAAAMzMTkAAAADNzYwAAAAAzYyOAAAAAM0MDEAAAADNDQyAAAAAjUyAAAAAzQyMAAAAAI3NQAAAAM4MDkAAAADNzU3AAAAAzI0NgAAAAM5MDAAAAACNzYAAAADNjk1AAAAAzc0OAAAAAMxMzYAAAACMzUAAAADMjAzAAAAAzczMgAAAAM4MzUAAAADMzE0AAAAAzYzOAAAAAM2ODcAAAADMTI4AAAAAzkyOAAAAAIzNAAAAAM3MjQAAAADODAyAAAAAzc1MwAAAAM4MDYAAAADNjQzAAAAAzkyNgAAAAMzMTMAAAADMTA3AAAAAzY5MAAAAAM5NjcAAAADNTA3AAAAAzQ4OAAAAAM2MzIAAAADOTA4AAAAAzQ5MwAAAAMxNDYAAAADMzExAAAAAzE0MAAAAAMzODAAAAADNjY3AAAAAzk4MgAAAAMxMjUAAAADOTA5AAAAAzk2OAAAAAM4MjcAAAADODAzAAAAAzE5OAAAAAM0MTUAAAADMjc2AAAAAzQ3MAAAAAMzNjIAAAADODM3AAAAAzk2MwAAAAM5NDEAAAADODk2AAAAAzcxOQAAAAM0NjAAAAADOTI1AAAAAzYyNwAAAAMzNjAAAAADODQ4AAAAAzg2MAAAAAM4MDQAAAADNzMxAAAAAzc4MAAAAAIzMwAAAAMyNzEAAAADMzA4AAAAAzExNgAAAAM5MTEAAAADOTQ2AAAAAzU4NQAAAAMzNTMAAAADNjM5AAAAAjgwAAAAAzMzNwAAAAMxMjcAAAADNTM5AAAAAzY5OAAAAAM4NjcAAAADNDcxAAAAAzY5NAAAAAI4NgAAAAM3MjkAAAADNDY2AAAAAzE3MgAAAAM3MTMAAAADOTY1AAAAAzg1NgAAAAM5MjEAAAADOTI5AAAAAjgzAAAAAzQ0MQAAAAM4MzMAAAADOTg5AAAAAzkxNwAAAAM4MTMAAAADNjUyAAAAAjExAAAAAzE3MQAAAAM2MTAAAAADNjg4AAAAAzE0OQAAAAM3MzcAAAADNDQzAAAAAzQ3NQAAAAM3ODYAAAADMzc0AAAAAzk4NgAAAAIyNAAAAAM5MDMAAAADNjY2AAAAAzU5NwAAAAMzMjUAAAACNTMAAAADMTExAAAAAzI4MwAAAAM1NDAAAAACNDMAAAADNTE3AAAAAzQ2OQAAAAMyNjYAAAADNTE4AAAAAzk4OAAAAAIyNgAAAAMxMjAAAAADNzA2AAAAAzIyNgAAAAMxNDQAAAADNDE0AAAAAzUwMQAAAAMyMTEAAAADOTQ3AAAAAjU0AAAAAjY4AAAAAzE2OQAAAAMzMDMAAAADODEyAAAAAzU3MAAAAAM4MzEAAAACNjAAAAADNzkzAAAAAzkxNgAAAAM4MjEAAAADNDIyAAAAAzQ3NgAAAAM1NjUAAAADNjQ2AAAAAzQ2MQAAAAMxODQAAAADOTcxAAAAAzQxMAAAAAMyNDUAAAACNDAAAAADNDUzAAAAAzQxMgAAAAM5OTIAAAADNjg5AAAAAzgxMAAAAAMxMzEAAAADNTg3AAAAAzU2NgAAAAMxOTYAAAACODUAAAADNzIzAAAAAzI0MAAAAAM2MzQAAAADNDY0AAAAAzk1OAAAAAMxMDYAAAADMzM4AAAAAzU2MgAAAAM2MzcAAAADMTAwAAAAAzI2NAAAAAMxMTcAAAADNjU2AAAAAzIxNAAAAAMxODYAAAACNjk= (1 row) DROP TABLE base_texts; -- low cardinality CREATE TABLE base_texts AS SELECT row_number() OVER() as rn, item::text FROM (SELECT i as item FROM generate_series(1, 10) i, generate_series(1, 100) j ORDER BY gen_rand_minstd()) sub; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 605 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_texts; -- single element CREATE TABLE base_texts AS SELECT row_number() OVER() as rn, item::text FROM (SELECT generate_series(1, 1) item) sub; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 39 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_texts; -- high cardinality with toasted values CREATE TABLE base_texts AS SELECT row_number() OVER() as rn, repeat(item::text, 100000) as item FROM (select sub.item from (SELECT generate_series(1, 10) item) as sub ORDER BY gen_rand_minstd()) sub; --make sure it's toasted SELECT pg_total_relation_size(reltoastrelid) FROM pg_class c WHERE relname = 'base_texts'; pg_total_relation_size ------------------------ 24576 (1 row) \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 1100084 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_texts; -- NULLs CREATE TABLE base_texts AS SELECT row_number() OVER() as rn, NULLIF(i, 5)::TEXT item FROM generate_series(1, 10) i, generate_series(1, 100) j; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 187 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_texts; CREATE TABLE base_texts AS SELECT row_number() OVER() as rn, NULLIF(i, 1)::TEXT item FROM generate_series(1, 10) i, generate_series(1, 100) j; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 179 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_texts; CREATE TABLE base_texts AS SELECT row_number() OVER() as rn, NULLIF(i, 10)::TEXT item FROM generate_series(1, 10) i, generate_series(1, 100) j; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 178 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_texts; CREATE TABLE base_texts AS SELECT row_number() OVER() as rn, NULLIF(NULLIF(NULLIF(NULLIF(i, 2), 4), 5), 8)::TEXT item FROM generate_series(1, 10) i, generate_series(1, 100) j; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 189 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_texts; ----------------------- -- Array Compression -- ----------------------- SELECT $$ select item from base_texts order by rn $$ AS "QUERY" \gset \set TABLE_NAME base_texts SELECT 'TEXT' as "TYPE" \gset \set COMPRESSION_CMD _timescaledb_internal.compress_array(item) \set DECOMPRESS_FORWARD_CMD _timescaledb_internal.decompress_forward(c::_timescaledb_internal.compressed_data, NULL::TEXT) \set DECOMPRESS_REVERSE_CMD _timescaledb_internal.decompress_reverse(c::_timescaledb_internal.compressed_data, NULL::TEXT) --basic test CREATE TABLE base_texts AS SELECT row_number() OVER() as rn, item::text FROM (select sub.item from (SELECT generate_series(1, 100) item) as sub ORDER BY gen_rand_minstd()) sub; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 356 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) SELECT c from compressed; c ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- AQBwZ19jYXRhbG9nAHRleHQAAAEAAABkAAAAAjU5AAAAAjg2AAAAAjE2AAAAAjM2AAAAAjk2AAAAAjM4AAAAAjI4AAAAAjEzAAAAAjczAAAAAjM3AAAAAjY5AAAAAjMxAAAAATkAAAACMTQAAAACNDQAAAABMQAAAAI3MQAAAAI2NgAAAAIxMAAAAAI4NQAAAAIyMwAAAAI3MAAAAAIyNQAAAAI4MAAAAAEzAAAAAjgzAAAAAjU2AAAAAjQ5AAAAAjUzAAAAAjI5AAAAAjk5AAAAATUAAAACNTIAAAACMjcAAAACNzkAAAACNDEAAAACNjUAAAACNTUAAAACNTAAAAACNjcAAAACNjEAAAACOTUAAAACNzcAAAACNzIAAAABNgAAAAI4MgAAAAIzNAAAAAI0NQAAAAI5NAAAAAI4NwAAAAI2MwAAAAI0NgAAAAIxOQAAAAI1MQAAAAI0NwAAAAEyAAAAATgAAAACOTIAAAACNTgAAAACNzUAAAACMTgAAAACOTMAAAACNDgAAAACNjAAAAACODQAAAACMTUAAAACMzAAAAACODgAAAACNzgAAAACNjQAAAACOTcAAAABNAAAAAI2MgAAAAI4MQAAAAI5OAAAAAI0MAAAAAI5MQAAAAE3AAAAAjI2AAAAAjQyAAAAAjg5AAAAAjEyAAAAAjkwAAAAAjE3AAAAAjc2AAAAAjM5AAAAAjMzAAAAAjMyAAAAAjIyAAAAAjY4AAAAAjQzAAAAAzEwMAAAAAIyMAAAAAIyNAAAAAI1NwAAAAIxMQAAAAIzNQAAAAI1NAAAAAI3NAAAAAIyMQ== (1 row) DROP TABLE base_texts; -- single element CREATE TABLE base_texts AS SELECT row_number() OVER() as rn, item::text FROM (SELECT generate_series(1, 1) item) sub; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 39 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_texts; -- toasted values CREATE TABLE base_texts AS SELECT row_number() OVER() as rn, repeat(item::text, 100000) as item FROM (select sub.item from (SELECT generate_series(1, 10) item) as sub ORDER BY gen_rand_minstd()) sub; --make sure it's toasted SELECT pg_total_relation_size(reltoastrelid) FROM pg_class c WHERE relname = 'base_texts'; pg_total_relation_size ------------------------ 24576 (1 row) \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 1100092 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_texts; -- NULLs CREATE TABLE base_texts AS SELECT row_number() OVER() as rn, NULLIF(i, 5)::TEXT item FROM generate_series(1, 10) i; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 80 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_texts; CREATE TABLE base_texts AS SELECT row_number() OVER() as rn, NULLIF(i, 1)::TEXT item FROM generate_series(1, 10) i; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 80 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_texts; CREATE TABLE base_texts AS SELECT row_number() OVER() as rn, NULLIF(i, 10)::TEXT item FROM generate_series(1, 10) i; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 79 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_texts; CREATE TABLE base_texts AS SELECT row_number() OVER() as rn, NULLIF(NULLIF(NULLIF(NULLIF(i, 2), 4), 5), 8)::TEXT item FROM generate_series(1, 10) i; \ir include/compression_test.sql -- This file and its contents are licensed under the Timescale License. -- Please see the included NOTICE for copyright information and -- LICENSE-TIMESCALE for a copy of the license. \set ECHO errors compressed size ----------------- 74 (1 row) ?column? | count -------------------------------------------------------------------------------+------- Number of rows different between original and decompressed forward (expect 0) | 0 (1 row) ?column? | count --------------------------------------------------------------------------------+------- Number of rows different between original and decompressed reversed (expect 0) | 0 (1 row) ?column? | count ----------------------------------------------------------------------------------------------------+------- Number of rows different between original, decompressed, and decompressed deserializeed (expect 0) | 0 (1 row) ?column? | ?column? -----------------------------------------------------------------------------------------------------+---------- Test that deserialization, decompression, recompression, and serialization results in the same text | t (1 row) DROP TABLE base_texts;