timescaledb/sql/updates/2.14.0--2.14.1.sql
Sven Klemm 59f50f2daa Release 2.14.1
This release contains bug fixes since the 2.14.0 release.
We recommend that you upgrade at the next available opportunity.

**Features**
* #6630 Add views for per chunk compression settings

**Bugfixes**
* #6636 Fixes extension update of compressed hypertables with dropped columns
* #6637 Reset sequence numbers on non-rollup compression
* #6639 Disable default indexscan for compression
* #6651 Fix DecompressChunk path generation with per chunk settings

**Thanks**
* @anajavi for reporting an issue with extension update of compressed hypertables
2024-02-14 17:19:04 +01:00

58 lines
2.6 KiB
SQL

CREATE VIEW timescaledb_information.hypertable_compression_settings AS
SELECT
format('%I.%I',ht.schema_name,ht.table_name)::regclass AS hypertable,
array_to_string(segmentby,',') AS segmentby,
un.orderby,
d.compress_interval_length
FROM _timescaledb_catalog.hypertable ht
JOIN LATERAL (
SELECT
CASE WHEN d.column_type = ANY(ARRAY['timestamp','timestamptz','date']::regtype[]) THEN
_timescaledb_functions.to_interval(d.compress_interval_length)::text
ELSE
d.compress_interval_length::text
END AS compress_interval_length
FROM _timescaledb_catalog.dimension d WHERE d.hypertable_id = ht.id ORDER BY id LIMIT 1
) d ON true
LEFT JOIN _timescaledb_catalog.compression_settings s ON format('%I.%I',ht.schema_name,ht.table_name)::regclass = s.relid
LEFT JOIN LATERAL (
SELECT
string_agg(
format('%I%s%s',orderby,
CASE WHEN "desc" THEN ' DESC' ELSE '' END,
CASE WHEN nullsfirst AND NOT "desc" THEN ' NULLS FIRST' WHEN NOT nullsfirst AND "desc" THEN ' NULLS LAST' ELSE '' END
)
,',') AS orderby
FROM unnest(s.orderby, s.orderby_desc, s.orderby_nullsfirst) un(orderby, "desc", nullsfirst)
) un ON true;
CREATE VIEW timescaledb_information.chunk_compression_settings AS
SELECT
format('%I.%I',ht.schema_name,ht.table_name)::regclass AS hypertable,
format('%I.%I',ch.schema_name,ch.table_name)::regclass AS chunk,
array_to_string(segmentby,',') AS segmentby,
un.orderby
FROM _timescaledb_catalog.hypertable ht
INNER JOIN _timescaledb_catalog.chunk ch ON ch.hypertable_id = ht.id
INNER JOIN _timescaledb_catalog.chunk ch2 ON ch2.id = ch.compressed_chunk_id
LEFT JOIN _timescaledb_catalog.compression_settings s ON format('%I.%I',ch2.schema_name,ch2.table_name)::regclass = s.relid
LEFT JOIN LATERAL (
SELECT
string_agg(
format('%I%s%s',orderby,
CASE WHEN "desc" THEN ' DESC' ELSE '' END,
CASE WHEN nullsfirst AND NOT "desc" THEN ' NULLS FIRST' WHEN NOT nullsfirst AND "desc" THEN ' NULLS LAST' ELSE '' END
),',') AS orderby
FROM unnest(s.orderby, s.orderby_desc, s.orderby_nullsfirst) un(orderby, "desc", nullsfirst)
) un ON true;
INSERT INTO _timescaledb_catalog.compression_settings
SELECT
format('%I.%I',ch.schema_name,ch.table_name)::regclass,s.segmentby,s.orderby,s.orderby_desc,s.orderby_nullsfirst
FROM _timescaledb_catalog.hypertable ht1
INNER JOIN _timescaledb_catalog.hypertable ht2 ON ht2.id = ht1.compressed_hypertable_id
INNER JOIN _timescaledb_catalog.compression_settings s ON s.relid = format('%I.%I',ht1.schema_name,ht1.table_name)::regclass
INNER JOIN _timescaledb_catalog.chunk ch ON ch.hypertable_id = ht2.id ON CONFLICT DO NOTHING;