mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-23 22:41:34 +08:00
This commit integrates the SegmentMetaMinMax into the compression logic. It adds metadata columns to the compressed table and correctly sets it upon compression. We also fix several errors with datum detoasting in SegmentMetaMinMax
1264 lines
98 KiB
Plaintext
1264 lines
98 KiB
Plaintext
-- 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 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 --
|
|
------------------------
|
|
--kinda silly test for now since compressed as bigint anyway
|
|
--TODO add proper int support
|
|
--TODO add proper smallint support and tests
|
|
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 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 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
|
|
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
|
|
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
|
|
-----------------
|
|
4056
|
|
(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
|
|
-----------------
|
|
624
|
|
(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
|
|
-----------------
|
|
41
|
|
(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
|
|
-----------------
|
|
10468
|
|
(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
|
|
-----------------
|
|
204
|
|
(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
|
|
-----------------
|
|
196
|
|
(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
|
|
-----------------
|
|
196
|
|
(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
|
|
-----------------
|
|
200
|
|
(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
|
|
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
|
|
-----------------
|
|
440
|
|
(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
|
|
-----------------
|
|
41
|
|
(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
|
|
-----------------
|
|
10468
|
|
(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
|
|
-----------------
|
|
97
|
|
(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
|
|
-----------------
|
|
97
|
|
(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
|
|
-----------------
|
|
97
|
|
(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
|
|
-----------------
|
|
85
|
|
(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;
|