From 0530974d3d6ea8c1705bdd625f470a08353ee3c2 Mon Sep 17 00:00:00 2001 From: Burak Yucesoy Date: Fri, 19 May 2017 19:12:19 +0300 Subject: [PATCH] Add tests for version checks --- src/test/regress/expected/multi_extension.out | 61 +++++++++++++++++++ src/test/regress/sql/multi_extension.sql | 53 ++++++++++++++++ 2 files changed, 114 insertions(+) diff --git a/src/test/regress/expected/multi_extension.out b/src/test/regress/expected/multi_extension.out index 516aaaeb4..8e17c1c2c 100644 --- a/src/test/regress/expected/multi_extension.out +++ b/src/test/regress/expected/multi_extension.out @@ -108,6 +108,67 @@ CREATE EXTENSION citus VERSION '5.0'; ERROR: specified version incompatible with loaded Citus library DETAIL: Loaded library requires 6.2, but 5.0 was specified. HINT: If a newer library is present, restart the database and try the command again. +-- Test non-distributed queries work even in version mismatch +SET citus.enable_version_checks TO 'false'; +CREATE EXTENSION citus VERSION '6.1-17'; +SET citus.enable_version_checks TO 'true'; +-- Test CREATE TABLE +CREATE TABLE version_mismatch_table(column1 int); +-- Test COPY +\copy version_mismatch_table FROM STDIN; +-- Test INSERT +INSERT INTO version_mismatch_table(column1) VALUES(5); + +-- Test SELECT +SELECT * FROM version_mismatch_table ORDER BY column1; + column1 +--------- + 0 + 1 + 2 + 3 + 4 + 5 +(6 rows) + +-- Test SELECT from pg_catalog +SELECT d.datname as "Name", + pg_catalog.pg_get_userbyid(d.datdba) as "Owner", + pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges" +FROM pg_catalog.pg_database d +ORDER BY 1; + Name | Owner | Access privileges +------------+----------+----------------------- + postgres | postgres | + regression | postgres | + template0 | postgres | =c/postgres + + | | postgres=CTc/postgres + template1 | postgres | =c/postgres + + | | postgres=CTc/postgres +(4 rows) + +-- We should not distribute table in version mistmatch +SELECT create_distributed_table('version_mismatch_table', 'column1'); +ERROR: loaded Citus library version differs from installed extension version +DETAIL: Loaded library requires 6.2, but the installed extension version is 6.1-17. +HINT: Run ALTER EXTENSION citus UPDATE and try again. +-- This function will cause fail in next ALTER EXTENSION +CREATE OR REPLACE FUNCTION pg_catalog.citus_table_size(table_name regclass) +RETURNS bigint LANGUAGE plpgsql +AS $function$ +BEGIN +END; +$function$; +SET citus.enable_version_checks TO 'false'; +-- This will fail because of previous function declaration +ALTER EXTENSION citus UPDATE TO '6.2-2'; +ERROR: function "citus_table_size" already exists with same argument types +-- We can DROP problematic function and continue ALTER EXTENSION even when version checks are on +SET citus.enable_version_checks TO 'true'; +DROP FUNCTION citus_table_size(regclass); +SET citus.enable_version_checks TO 'false'; +ALTER EXTENSION citus UPDATE TO '6.2-2'; -- re-create in newest version +DROP EXTENSION citus; \c CREATE EXTENSION citus; diff --git a/src/test/regress/sql/multi_extension.sql b/src/test/regress/sql/multi_extension.sql index e5d2064a1..50b7eeefb 100644 --- a/src/test/regress/sql/multi_extension.sql +++ b/src/test/regress/sql/multi_extension.sql @@ -100,6 +100,59 @@ RESET citus.enable_version_checks; DROP EXTENSION citus; CREATE EXTENSION citus VERSION '5.0'; +-- Test non-distributed queries work even in version mismatch +SET citus.enable_version_checks TO 'false'; +CREATE EXTENSION citus VERSION '6.1-17'; +SET citus.enable_version_checks TO 'true'; + +-- Test CREATE TABLE +CREATE TABLE version_mismatch_table(column1 int); + +-- Test COPY +\copy version_mismatch_table FROM STDIN; +0 +1 +2 +3 +4 +\. + +-- Test INSERT +INSERT INTO version_mismatch_table(column1) VALUES(5); + +-- Test SELECT +SELECT * FROM version_mismatch_table ORDER BY column1; + +-- Test SELECT from pg_catalog +SELECT d.datname as "Name", + pg_catalog.pg_get_userbyid(d.datdba) as "Owner", + pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges" +FROM pg_catalog.pg_database d +ORDER BY 1; + +-- We should not distribute table in version mistmatch +SELECT create_distributed_table('version_mismatch_table', 'column1'); + +-- This function will cause fail in next ALTER EXTENSION +CREATE OR REPLACE FUNCTION pg_catalog.citus_table_size(table_name regclass) +RETURNS bigint LANGUAGE plpgsql +AS $function$ +BEGIN +END; +$function$; + +SET citus.enable_version_checks TO 'false'; +-- This will fail because of previous function declaration +ALTER EXTENSION citus UPDATE TO '6.2-2'; + +-- We can DROP problematic function and continue ALTER EXTENSION even when version checks are on +SET citus.enable_version_checks TO 'true'; +DROP FUNCTION citus_table_size(regclass); + +SET citus.enable_version_checks TO 'false'; +ALTER EXTENSION citus UPDATE TO '6.2-2'; + -- re-create in newest version +DROP EXTENSION citus; \c CREATE EXTENSION citus;