Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change boolean default value for compress_chunk and decompress_chunk #6579

Merged
merged 1 commit into from
Jan 31, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions .unreleased/pr_6579
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Implements: #6579 Change compress_chunk and decompress_chunk to idempotent version by default
10 changes: 5 additions & 5 deletions sql/maintenance_utils.sql
Original file line number Diff line number Diff line change
Expand Up @@ -34,17 +34,17 @@ CREATE OR REPLACE FUNCTION _timescaledb_functions.create_compressed_chunk(

CREATE OR REPLACE FUNCTION @extschema@.compress_chunk(
uncompressed_chunk REGCLASS,
if_not_compressed BOOLEAN = false
if_not_compressed BOOLEAN = true
) RETURNS REGCLASS AS '@MODULE_PATHNAME@', 'ts_compress_chunk' LANGUAGE C STRICT VOLATILE;

CREATE OR REPLACE FUNCTION @extschema@.decompress_chunk(
uncompressed_chunk REGCLASS,
if_compressed BOOLEAN = false
if_compressed BOOLEAN = true
) RETURNS REGCLASS AS '@MODULE_PATHNAME@', 'ts_decompress_chunk' LANGUAGE C STRICT VOLATILE;

CREATE OR REPLACE FUNCTION _timescaledb_functions.recompress_chunk_segmentwise(
uncompressed_chunk REGCLASS,
if_compressed BOOLEAN = false
if_compressed BOOLEAN = true
) RETURNS REGCLASS AS '@MODULE_PATHNAME@', 'ts_recompress_chunk_segmentwise' LANGUAGE C STRICT VOLATILE;

-- find the index on the compressed chunk that can be used to recompress efficiently
Expand All @@ -63,7 +63,7 @@ CREATE OR REPLACE FUNCTION _timescaledb_functions.get_compressed_chunk_index_for
-- chunk: Chunk to recompress.
-- if_not_compressed: Print notice instead of error if chunk is already compressed.
CREATE OR REPLACE PROCEDURE @extschema@.recompress_chunk(chunk REGCLASS,
if_not_compressed BOOLEAN = false)
if_not_compressed BOOLEAN = true)
AS $$
DECLARE
status INT;
Expand Down Expand Up @@ -101,7 +101,7 @@ BEGIN
-- or if we'd better fall back to decompressing & recompressing entire chunk
SELECT _timescaledb_functions.get_compressed_chunk_index_for_recompression(chunk) INTO STRICT compressed_chunk_index;
IF compressed_chunk_index IS NOT NULL THEN
PERFORM _timescaledb_functions.recompress_chunk_segmentwise(chunk);
PERFORM _timescaledb_functions.recompress_chunk_segmentwise(chunk, if_not_compressed);
ELSE
PERFORM @extschema@.decompress_chunk(chunk);
COMMIT;
Expand Down
4 changes: 2 additions & 2 deletions tsl/test/expected/compression.out
Original file line number Diff line number Diff line change
Expand Up @@ -172,8 +172,8 @@ where ch1.compressed_chunk_id = ch2.id;
(2 rows)

\set ON_ERROR_STOP 0
--cannot recompress the chunk the second time around
select compress_chunk( '_timescaledb_internal._hyper_1_2_chunk');
--cannot compress the chunk the second time around
select compress_chunk( '_timescaledb_internal._hyper_1_2_chunk', false);
ERROR: chunk "_hyper_1_2_chunk" is already compressed
--TEST2a try DML on a compressed chunk
BEGIN;
Expand Down
10 changes: 5 additions & 5 deletions tsl/test/expected/compression_errors-13.out
Original file line number Diff line number Diff line change
Expand Up @@ -217,17 +217,17 @@ SELECT * FROM _timescaledb_catalog.compression_settings WHERE relid = 'foo'::reg
foo | | {a,b} | {f,f} | {f,f}
(1 row)

SELECT decompress_chunk(ch) FROM show_chunks('foo') ch limit 1;
SELECT decompress_chunk(ch, false) FROM show_chunks('foo') ch limit 1;
ERROR: chunk "_hyper_10_2_chunk" is not compressed
--test changing the segment by columns
ALTER TABLE foo set (timescaledb.compress, timescaledb.compress_orderby = 'a', timescaledb.compress_segmentby = 'b');
SELECT format('%I.%I',chunk_schema,chunk_name) AS "CHUNK_NAME"
FROM timescaledb_information.chunks
WHERE hypertable_name = 'foo'
ORDER BY chunk_name LIMIT 1\gset
select decompress_chunk(:'CHUNK_NAME');
select decompress_chunk(:'CHUNK_NAME', if_compressed=>false);
ERROR: chunk "_hyper_10_2_chunk" is not compressed
select decompress_chunk(:'CHUNK_NAME', if_compressed=>true);
select decompress_chunk(:'CHUNK_NAME');
NOTICE: chunk "_hyper_10_2_chunk" is not compressed
decompress_chunk
------------------
Expand All @@ -241,9 +241,9 @@ select compress_chunk(:'CHUNK_NAME');
_timescaledb_internal._hyper_10_2_chunk
(1 row)

select compress_chunk(:'CHUNK_NAME');
select compress_chunk(:'CHUNK_NAME', if_not_compressed=>false);
ERROR: chunk "_hyper_10_2_chunk" is already compressed
select compress_chunk(:'CHUNK_NAME', if_not_compressed=>true);
select compress_chunk(:'CHUNK_NAME');
NOTICE: chunk "_hyper_10_2_chunk" is already compressed
compress_chunk
-----------------------------------------
Expand Down
10 changes: 5 additions & 5 deletions tsl/test/expected/compression_errors-14.out
Original file line number Diff line number Diff line change
Expand Up @@ -217,17 +217,17 @@ SELECT * FROM _timescaledb_catalog.compression_settings WHERE relid = 'foo'::reg
foo | | {a,b} | {f,f} | {f,f}
(1 row)

SELECT decompress_chunk(ch) FROM show_chunks('foo') ch limit 1;
SELECT decompress_chunk(ch, false) FROM show_chunks('foo') ch limit 1;
ERROR: chunk "_hyper_10_2_chunk" is not compressed
--test changing the segment by columns
ALTER TABLE foo set (timescaledb.compress, timescaledb.compress_orderby = 'a', timescaledb.compress_segmentby = 'b');
SELECT format('%I.%I',chunk_schema,chunk_name) AS "CHUNK_NAME"
FROM timescaledb_information.chunks
WHERE hypertable_name = 'foo'
ORDER BY chunk_name LIMIT 1\gset
select decompress_chunk(:'CHUNK_NAME');
select decompress_chunk(:'CHUNK_NAME', if_compressed=>false);
ERROR: chunk "_hyper_10_2_chunk" is not compressed
select decompress_chunk(:'CHUNK_NAME', if_compressed=>true);
select decompress_chunk(:'CHUNK_NAME');
NOTICE: chunk "_hyper_10_2_chunk" is not compressed
decompress_chunk
------------------
Expand All @@ -241,9 +241,9 @@ select compress_chunk(:'CHUNK_NAME');
_timescaledb_internal._hyper_10_2_chunk
(1 row)

select compress_chunk(:'CHUNK_NAME');
select compress_chunk(:'CHUNK_NAME', if_not_compressed=>false);
ERROR: chunk "_hyper_10_2_chunk" is already compressed
select compress_chunk(:'CHUNK_NAME', if_not_compressed=>true);
select compress_chunk(:'CHUNK_NAME');
NOTICE: chunk "_hyper_10_2_chunk" is already compressed
compress_chunk
-----------------------------------------
Expand Down
10 changes: 5 additions & 5 deletions tsl/test/expected/compression_errors-15.out
Original file line number Diff line number Diff line change
Expand Up @@ -217,17 +217,17 @@ SELECT * FROM _timescaledb_catalog.compression_settings WHERE relid = 'foo'::reg
foo | | {a,b} | {f,f} | {f,f}
(1 row)

SELECT decompress_chunk(ch) FROM show_chunks('foo') ch limit 1;
SELECT decompress_chunk(ch, false) FROM show_chunks('foo') ch limit 1;
ERROR: chunk "_hyper_10_2_chunk" is not compressed
--test changing the segment by columns
ALTER TABLE foo set (timescaledb.compress, timescaledb.compress_orderby = 'a', timescaledb.compress_segmentby = 'b');
SELECT format('%I.%I',chunk_schema,chunk_name) AS "CHUNK_NAME"
FROM timescaledb_information.chunks
WHERE hypertable_name = 'foo'
ORDER BY chunk_name LIMIT 1\gset
select decompress_chunk(:'CHUNK_NAME');
select decompress_chunk(:'CHUNK_NAME', if_compressed=>false);
ERROR: chunk "_hyper_10_2_chunk" is not compressed
select decompress_chunk(:'CHUNK_NAME', if_compressed=>true);
select decompress_chunk(:'CHUNK_NAME');
NOTICE: chunk "_hyper_10_2_chunk" is not compressed
decompress_chunk
------------------
Expand All @@ -241,9 +241,9 @@ select compress_chunk(:'CHUNK_NAME');
_timescaledb_internal._hyper_10_2_chunk
(1 row)

select compress_chunk(:'CHUNK_NAME');
select compress_chunk(:'CHUNK_NAME', if_not_compressed=>false);
ERROR: chunk "_hyper_10_2_chunk" is already compressed
select compress_chunk(:'CHUNK_NAME', if_not_compressed=>true);
select compress_chunk(:'CHUNK_NAME');
NOTICE: chunk "_hyper_10_2_chunk" is already compressed
compress_chunk
-----------------------------------------
Expand Down
10 changes: 5 additions & 5 deletions tsl/test/expected/compression_errors-16.out
Original file line number Diff line number Diff line change
Expand Up @@ -217,17 +217,17 @@ SELECT * FROM _timescaledb_catalog.compression_settings WHERE relid = 'foo'::reg
foo | | {a,b} | {f,f} | {f,f}
(1 row)

SELECT decompress_chunk(ch) FROM show_chunks('foo') ch limit 1;
SELECT decompress_chunk(ch, false) FROM show_chunks('foo') ch limit 1;
ERROR: chunk "_hyper_10_2_chunk" is not compressed
--test changing the segment by columns
ALTER TABLE foo set (timescaledb.compress, timescaledb.compress_orderby = 'a', timescaledb.compress_segmentby = 'b');
SELECT format('%I.%I',chunk_schema,chunk_name) AS "CHUNK_NAME"
FROM timescaledb_information.chunks
WHERE hypertable_name = 'foo'
ORDER BY chunk_name LIMIT 1\gset
select decompress_chunk(:'CHUNK_NAME');
select decompress_chunk(:'CHUNK_NAME', if_compressed=>false);
ERROR: chunk "_hyper_10_2_chunk" is not compressed
select decompress_chunk(:'CHUNK_NAME', if_compressed=>true);
select decompress_chunk(:'CHUNK_NAME');
NOTICE: chunk "_hyper_10_2_chunk" is not compressed
decompress_chunk
------------------
Expand All @@ -241,9 +241,9 @@ select compress_chunk(:'CHUNK_NAME');
_timescaledb_internal._hyper_10_2_chunk
(1 row)

select compress_chunk(:'CHUNK_NAME');
select compress_chunk(:'CHUNK_NAME', if_not_compressed=>false);
ERROR: chunk "_hyper_10_2_chunk" is already compressed
select compress_chunk(:'CHUNK_NAME', if_not_compressed=>true);
select compress_chunk(:'CHUNK_NAME');
NOTICE: chunk "_hyper_10_2_chunk" is already compressed
compress_chunk
-----------------------------------------
Expand Down
30 changes: 15 additions & 15 deletions tsl/test/isolation/expected/compression_ddl_iso.out
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ step C1:
SET LOCAL lock_timeout = '500ms';
SET LOCAL deadlock_timeout = '10ms';
SELECT
CASE WHEN compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL THEN true ELSE false END AS compress
compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL AS compress
FROM _timescaledb_catalog.hypertable ht, _timescaledb_catalog.chunk ch
WHERE ch.hypertable_id = ht.id AND ht.table_name like 'ts_device_table'
ORDER BY ch.id LIMIT 1;
Expand Down Expand Up @@ -67,7 +67,7 @@ step C1:
SET LOCAL lock_timeout = '500ms';
SET LOCAL deadlock_timeout = '10ms';
SELECT
CASE WHEN compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL THEN true ELSE false END AS compress
compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL AS compress
FROM _timescaledb_catalog.hypertable ht, _timescaledb_catalog.chunk ch
WHERE ch.hypertable_id = ht.id AND ht.table_name like 'ts_device_table'
ORDER BY ch.id LIMIT 1;
Expand Down Expand Up @@ -104,7 +104,7 @@ step C1:
SET LOCAL lock_timeout = '500ms';
SET LOCAL deadlock_timeout = '10ms';
SELECT
CASE WHEN compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL THEN true ELSE false END AS compress
compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL AS compress
FROM _timescaledb_catalog.hypertable ht, _timescaledb_catalog.chunk ch
WHERE ch.hypertable_id = ht.id AND ht.table_name like 'ts_device_table'
ORDER BY ch.id LIMIT 1;
Expand Down Expand Up @@ -136,7 +136,7 @@ step C1:
SET LOCAL lock_timeout = '500ms';
SET LOCAL deadlock_timeout = '10ms';
SELECT
CASE WHEN compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL THEN true ELSE false END AS compress
compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL AS compress
FROM _timescaledb_catalog.hypertable ht, _timescaledb_catalog.chunk ch
WHERE ch.hypertable_id = ht.id AND ht.table_name like 'ts_device_table'
ORDER BY ch.id LIMIT 1;
Expand Down Expand Up @@ -171,7 +171,7 @@ step C1:
SET LOCAL lock_timeout = '500ms';
SET LOCAL deadlock_timeout = '10ms';
SELECT
CASE WHEN compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL THEN true ELSE false END AS compress
compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL AS compress
FROM _timescaledb_catalog.hypertable ht, _timescaledb_catalog.chunk ch
WHERE ch.hypertable_id = ht.id AND ht.table_name like 'ts_device_table'
ORDER BY ch.id LIMIT 1;
Expand All @@ -180,7 +180,7 @@ step D1:
BEGIN;
SET LOCAL client_min_messages TO WARNING;
SELECT
CASE WHEN decompress_chunk(ch, true) IS NOT NULL THEN true ELSE false END AS decompress
decompress_chunk(ch) IS NOT NULL AS decompress
FROM show_chunks('ts_device_table') AS ch
ORDER BY ch::text LIMIT 1;

Expand Down Expand Up @@ -218,7 +218,7 @@ step C1:
SET LOCAL lock_timeout = '500ms';
SET LOCAL deadlock_timeout = '10ms';
SELECT
CASE WHEN compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL THEN true ELSE false END AS compress
compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL AS compress
FROM _timescaledb_catalog.hypertable ht, _timescaledb_catalog.chunk ch
WHERE ch.hypertable_id = ht.id AND ht.table_name like 'ts_device_table'
ORDER BY ch.id LIMIT 1;
Expand Down Expand Up @@ -263,7 +263,7 @@ step C1:
SET LOCAL lock_timeout = '500ms';
SET LOCAL deadlock_timeout = '10ms';
SELECT
CASE WHEN compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL THEN true ELSE false END AS compress
compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL AS compress
FROM _timescaledb_catalog.hypertable ht, _timescaledb_catalog.chunk ch
WHERE ch.hypertable_id = ht.id AND ht.table_name like 'ts_device_table'
ORDER BY ch.id LIMIT 1;
Expand Down Expand Up @@ -295,7 +295,7 @@ step C1:
SET LOCAL lock_timeout = '500ms';
SET LOCAL deadlock_timeout = '10ms';
SELECT
CASE WHEN compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL THEN true ELSE false END AS compress
compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL AS compress
FROM _timescaledb_catalog.hypertable ht, _timescaledb_catalog.chunk ch
WHERE ch.hypertable_id = ht.id AND ht.table_name like 'ts_device_table'
ORDER BY ch.id LIMIT 1;
Expand Down Expand Up @@ -337,7 +337,7 @@ step C1:
SET LOCAL lock_timeout = '500ms';
SET LOCAL deadlock_timeout = '10ms';
SELECT
CASE WHEN compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL THEN true ELSE false END AS compress
compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL AS compress
FROM _timescaledb_catalog.hypertable ht, _timescaledb_catalog.chunk ch
WHERE ch.hypertable_id = ht.id AND ht.table_name like 'ts_device_table'
ORDER BY ch.id LIMIT 1;
Expand Down Expand Up @@ -379,7 +379,7 @@ step C1:
SET LOCAL lock_timeout = '500ms';
SET LOCAL deadlock_timeout = '10ms';
SELECT
CASE WHEN compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL THEN true ELSE false END AS compress
compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL AS compress
FROM _timescaledb_catalog.hypertable ht, _timescaledb_catalog.chunk ch
WHERE ch.hypertable_id = ht.id AND ht.table_name like 'ts_device_table'
ORDER BY ch.id LIMIT 1;
Expand Down Expand Up @@ -431,7 +431,7 @@ step C1:
SET LOCAL lock_timeout = '500ms';
SET LOCAL deadlock_timeout = '10ms';
SELECT
CASE WHEN compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL THEN true ELSE false END AS compress
compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL AS compress
FROM _timescaledb_catalog.hypertable ht, _timescaledb_catalog.chunk ch
WHERE ch.hypertable_id = ht.id AND ht.table_name like 'ts_device_table'
ORDER BY ch.id LIMIT 1;
Expand Down Expand Up @@ -481,7 +481,7 @@ starting permutation: CA1 CAc I1 Ic SChunkStat LockChunk1 RC1 IN1 UnlockChunk IN
step CA1:
BEGIN;
SELECT
CASE WHEN compress_chunk(ch) IS NOT NULL THEN true ELSE false END AS compress
compress_chunk(ch) IS NOT NULL AS compress
FROM show_chunks('ts_device_table') AS ch
ORDER BY ch::text;

Expand Down Expand Up @@ -589,7 +589,7 @@ starting permutation: CA1 CAc I1 Ic SChunkStat LockChunk1 RC1 RC2 UnlockChunk SH
step CA1:
BEGIN;
SELECT
CASE WHEN compress_chunk(ch) IS NOT NULL THEN true ELSE false END AS compress
compress_chunk(ch) IS NOT NULL AS compress
FROM show_chunks('ts_device_table') AS ch
ORDER BY ch::text;

Expand Down Expand Up @@ -646,7 +646,7 @@ step RC2:
SELECT ch FROM show_chunks('ts_device_table') ch
ORDER BY ch::text LIMIT 1
LOOP
CALL recompress_chunk(chunk_name);
CALL recompress_chunk(chunk_name, false);
END LOOP;
END;
$$;
Expand Down
8 changes: 4 additions & 4 deletions tsl/test/isolation/specs/compression_ddl_iso.spec
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ step "C1" {
SET LOCAL lock_timeout = '500ms';
SET LOCAL deadlock_timeout = '10ms';
SELECT
CASE WHEN compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL THEN true ELSE false END AS compress
compress_chunk(format('%I.%I',ch.schema_name, ch.table_name)) IS NOT NULL AS compress
FROM _timescaledb_catalog.hypertable ht, _timescaledb_catalog.chunk ch
WHERE ch.hypertable_id = ht.id AND ht.table_name like 'ts_device_table'
ORDER BY ch.id LIMIT 1;
Expand All @@ -88,7 +88,7 @@ step "D1" {
BEGIN;
SET LOCAL client_min_messages TO WARNING;
SELECT
CASE WHEN decompress_chunk(ch, true) IS NOT NULL THEN true ELSE false END AS decompress
decompress_chunk(ch) IS NOT NULL AS decompress
FROM show_chunks('ts_device_table') AS ch
ORDER BY ch::text LIMIT 1;
}
Expand All @@ -98,7 +98,7 @@ session "CompressAll"
step "CA1" {
BEGIN;
SELECT
CASE WHEN compress_chunk(ch) IS NOT NULL THEN true ELSE false END AS compress
compress_chunk(ch) IS NOT NULL AS compress
FROM show_chunks('ts_device_table') AS ch
ORDER BY ch::text;
}
Expand Down Expand Up @@ -130,7 +130,7 @@ step "RC2" {
SELECT ch FROM show_chunks('ts_device_table') ch
ORDER BY ch::text LIMIT 1
LOOP
CALL recompress_chunk(chunk_name);
CALL recompress_chunk(chunk_name, false);
END LOOP;
END;
$$;
Expand Down
4 changes: 2 additions & 2 deletions tsl/test/sql/compression.sql
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,8 @@ _timescaledb_catalog.chunk ch1, _timescaledb_catalog.chunk ch2
where ch1.compressed_chunk_id = ch2.id;

\set ON_ERROR_STOP 0
--cannot recompress the chunk the second time around
select compress_chunk( '_timescaledb_internal._hyper_1_2_chunk');
--cannot compress the chunk the second time around
select compress_chunk( '_timescaledb_internal._hyper_1_2_chunk', false);

--TEST2a try DML on a compressed chunk
BEGIN;
Expand Down
6 changes: 3 additions & 3 deletions tsl/test/sql/compression_errors.sql.in
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ ALTER TABLE foo DROP CONSTRAINT chk_existing;
--note that the time column "a" should not be added to the end of the order by list again (should appear first)
SELECT * FROM _timescaledb_catalog.compression_settings WHERE relid = 'foo'::regclass;

SELECT decompress_chunk(ch) FROM show_chunks('foo') ch limit 1;
SELECT decompress_chunk(ch, false) FROM show_chunks('foo') ch limit 1;

--test changing the segment by columns
ALTER TABLE foo set (timescaledb.compress, timescaledb.compress_orderby = 'a', timescaledb.compress_segmentby = 'b');
Expand All @@ -127,13 +127,13 @@ FROM timescaledb_information.chunks
WHERE hypertable_name = 'foo'
ORDER BY chunk_name LIMIT 1\gset

select decompress_chunk(:'CHUNK_NAME', if_compressed=>false);
select decompress_chunk(:'CHUNK_NAME');
select decompress_chunk(:'CHUNK_NAME', if_compressed=>true);

--should succeed
select compress_chunk(:'CHUNK_NAME');
select compress_chunk(:'CHUNK_NAME', if_not_compressed=>false);
select compress_chunk(:'CHUNK_NAME');
select compress_chunk(:'CHUNK_NAME', if_not_compressed=>true);

SELECT compress_chunk(ch) FROM show_chunks('non_compressed') ch LIMIT 1;

Expand Down