mirror of https://github.com/citusdata/citus.git
79 lines
3.2 KiB
SQL
79 lines
3.2 KiB
SQL
\set upgrade_test_old_citus_version `echo "$CITUS_OLD_VERSION"`
|
|
SELECT substring(:'upgrade_test_old_citus_version', 'v(\d+)\.\d+\.\d+')::int >= 10 AND
|
|
substring(:'upgrade_test_old_citus_version', 'v\d+\.(\d+)\.\d+')::int >= 0
|
|
AS upgrade_test_old_citus_version_ge_10_0;
|
|
\gset
|
|
\if :upgrade_test_old_citus_version_ge_10_0
|
|
\else
|
|
\q
|
|
\endif
|
|
|
|
-- it's not the best practice to define this here, but we don't want to include
|
|
-- columnar_test_helpers in upgrade test schedule
|
|
CREATE OR REPLACE FUNCTION columnar_storage_info(
|
|
rel regclass,
|
|
version_major OUT int4,
|
|
version_minor OUT int4,
|
|
storage_id OUT int8,
|
|
reserved_stripe_id OUT int8,
|
|
reserved_row_number OUT int8,
|
|
reserved_offset OUT int8)
|
|
STRICT
|
|
LANGUAGE c AS 'citus', 'columnar_storage_info';
|
|
|
|
CREATE VIEW columnar_table_stripe_info AS
|
|
SELECT columnar_table_storageids.relname relname,
|
|
columnar.stripe.stripe_num stripe_num,
|
|
columnar.stripe.row_count row_count,
|
|
columnar.stripe.first_row_number first_row_number
|
|
FROM columnar.stripe,
|
|
(
|
|
SELECT c.oid relid, c.relname relname, (columnar_storage_info(c.oid)).storage_id relstorageid
|
|
FROM pg_class c, pg_am a
|
|
WHERE c.relam = a.oid AND amname = 'columnar'
|
|
) columnar_table_storageids
|
|
WHERE relstorageid = columnar.stripe.storage_id;
|
|
|
|
SET search_path TO upgrade_columnar_metapage, public;
|
|
|
|
-- show that first_row_number values are equal to MAX(row_count) * stripe_num + COLUMNAR_FIRST_ROW_NUMBER
|
|
SELECT * FROM columnar_table_stripe_info ORDER BY relname, stripe_num;
|
|
|
|
-- should work since we upgrade metapages when upgrading schema version
|
|
INSERT INTO columnar_table_1 VALUES (3);
|
|
|
|
-- state of stripe metadata for columnar_table_1 after post-upgrade insert
|
|
SELECT * FROM columnar_table_stripe_info WHERE relname = 'columnar_table_1' ORDER BY stripe_num;
|
|
|
|
-- show that all columnar relation's metapage's are upgraded to "2.0"
|
|
SELECT count(*)=0
|
|
FROM (SELECT (columnar_storage_info(c.oid)).* t
|
|
FROM pg_class c, pg_am a
|
|
WHERE c.relam = a.oid AND amname = 'columnar') t
|
|
WHERE t.version_major != 2 and t.version_minor != 0;
|
|
|
|
-- print metapage for two of the tables
|
|
SELECT version_major, version_minor, reserved_stripe_id, reserved_row_number
|
|
FROM columnar_storage_info('columnar_table_1');
|
|
SELECT version_major, version_minor, reserved_stripe_id, reserved_row_number
|
|
FROM columnar_storage_info('columnar_table_2');
|
|
|
|
-- show that no_data_columnar_table also has metapage after upgrade
|
|
SELECT version_major, version_minor, reserved_stripe_id, reserved_row_number
|
|
FROM columnar_storage_info('no_data_columnar_table');
|
|
|
|
-- table is already upgraded, make sure that upgrade_columnar_metapage is no-op
|
|
SELECT columnar_internal.upgrade_columnar_storage(c.oid)
|
|
FROM pg_class c, pg_am a
|
|
WHERE c.relam = a.oid AND amname = 'columnar' and relname = 'columnar_table_2';
|
|
|
|
SELECT version_major, version_minor, reserved_stripe_id, reserved_row_number
|
|
FROM columnar_storage_info('columnar_table_2');
|
|
|
|
VACUUM FULL columnar_table_2;
|
|
|
|
-- print metapage and stripe metadata after post-upgrade vacuum full
|
|
SELECT version_major, version_minor, reserved_stripe_id, reserved_row_number
|
|
FROM columnar_storage_info('columnar_table_2');
|
|
SELECT * FROM columnar_table_stripe_info WHERE relname = 'columnar_table_2' ORDER BY stripe_num;
|