mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-14 09:37:00 +08:00
556 lines
19 KiB
Plaintext
556 lines
19 KiB
Plaintext
-- This file and its contents are licensed under the Apache License 2.0.
|
|
-- Please see the included NOTICE for copyright information and
|
|
-- LICENSE-APACHE for a copy of the license.
|
|
\set TEST_DBNAME_2 :TEST_DBNAME _2
|
|
\c :TEST_DBNAME :ROLE_SUPERUSER
|
|
CREATE DATABASE :"TEST_DBNAME_2";
|
|
DROP EXTENSION timescaledb;
|
|
--no extension
|
|
\dx
|
|
List of installed extensions
|
|
Name | Version | Schema | Description
|
|
---------+---------+------------+------------------------------
|
|
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
|
|
(1 row)
|
|
|
|
SELECT 1;
|
|
?column?
|
|
----------
|
|
1
|
|
(1 row)
|
|
|
|
\c :TEST_DBNAME :ROLE_SUPERUSER
|
|
CREATE EXTENSION timescaledb VERSION 'mock-1';
|
|
WARNING: mock init "mock-1"
|
|
SELECT 1;
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
?column?
|
|
----------
|
|
1
|
|
(1 row)
|
|
|
|
\dx
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
List of installed extensions
|
|
Name | Version | Schema | Description
|
|
-------------+---------+------------+--------------------------------------------------------------------------------------
|
|
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
|
|
timescaledb | mock-1 | public | Enables scalable inserts and complex queries for time-series data (Apache 2 Edition)
|
|
(2 rows)
|
|
|
|
CREATE EXTENSION IF NOT EXISTS timescaledb VERSION 'mock-1';
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
NOTICE: extension "timescaledb" already exists, skipping
|
|
CREATE EXTENSION IF NOT EXISTS timescaledb VERSION 'mock-2';
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
NOTICE: extension "timescaledb" already exists, skipping
|
|
DROP EXTENSION timescaledb;
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
\set ON_ERROR_STOP 0
|
|
--test that we cannot accidentally load another library version
|
|
CREATE EXTENSION IF NOT EXISTS timescaledb VERSION 'mock-2';
|
|
ERROR: extension "timescaledb" has already been loaded with another version
|
|
\set ON_ERROR_STOP 1
|
|
\c :TEST_DBNAME :ROLE_SUPERUSER
|
|
--no extension
|
|
\dx
|
|
List of installed extensions
|
|
Name | Version | Schema | Description
|
|
---------+---------+------------+------------------------------
|
|
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
|
|
(1 row)
|
|
|
|
SELECT 1;
|
|
?column?
|
|
----------
|
|
1
|
|
(1 row)
|
|
|
|
CREATE EXTENSION timescaledb VERSION 'mock-1';
|
|
WARNING: mock init "mock-1"
|
|
--same backend as create extension;
|
|
SELECT 1;
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
?column?
|
|
----------
|
|
1
|
|
(1 row)
|
|
|
|
\dx
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
List of installed extensions
|
|
Name | Version | Schema | Description
|
|
-------------+---------+------------+--------------------------------------------------------------------------------------
|
|
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
|
|
timescaledb | mock-1 | public | Enables scalable inserts and complex queries for time-series data (Apache 2 Edition)
|
|
(2 rows)
|
|
|
|
--start new backend;
|
|
\c :TEST_DBNAME :ROLE_DEFAULT_PERM_USER
|
|
SELECT 1;
|
|
WARNING: mock init "mock-1"
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
?column?
|
|
----------
|
|
1
|
|
(1 row)
|
|
|
|
SELECT 1;
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
?column?
|
|
----------
|
|
1
|
|
(1 row)
|
|
|
|
--test fn call after load
|
|
SELECT mock_function();
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
WARNING: mock function call "mock-1"
|
|
mock_function
|
|
---------------
|
|
|
|
(1 row)
|
|
|
|
\dx
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
List of installed extensions
|
|
Name | Version | Schema | Description
|
|
-------------+---------+------------+--------------------------------------------------------------------------------------
|
|
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
|
|
timescaledb | mock-1 | public | Enables scalable inserts and complex queries for time-series data (Apache 2 Edition)
|
|
(2 rows)
|
|
|
|
\c :TEST_DBNAME :ROLE_DEFAULT_PERM_USER
|
|
--test fn call as first command
|
|
SELECT mock_function();
|
|
WARNING: mock init "mock-1"
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
WARNING: mock function call "mock-1"
|
|
mock_function
|
|
---------------
|
|
|
|
(1 row)
|
|
|
|
--use guc to prevent loading
|
|
\c :TEST_DBNAME :ROLE_SUPERUSER
|
|
SET timescaledb.disable_load = 'on';
|
|
SELECT 1;
|
|
?column?
|
|
----------
|
|
1
|
|
(1 row)
|
|
|
|
SELECT 1;
|
|
?column?
|
|
----------
|
|
1
|
|
(1 row)
|
|
|
|
SET timescaledb.disable_load = 'off';
|
|
SELECT 1;
|
|
WARNING: mock init "mock-1"
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
?column?
|
|
----------
|
|
1
|
|
(1 row)
|
|
|
|
\set ON_ERROR_STOP 0
|
|
SET timescaledb.disable_load = 'not bool';
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
ERROR: parameter "timescaledb.disable_load" requires a Boolean value
|
|
\set ON_ERROR_STOP 1
|
|
\c :TEST_DBNAME :ROLE_SUPERUSER
|
|
RESET ALL;
|
|
WARNING: mock init "mock-1"
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
SELECT 1;
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
?column?
|
|
----------
|
|
1
|
|
(1 row)
|
|
|
|
\c :TEST_DBNAME :ROLE_SUPERUSER
|
|
SET timescaledb.disable_load TO DEFAULT;
|
|
SELECT 1;
|
|
WARNING: mock init "mock-1"
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
?column?
|
|
----------
|
|
1
|
|
(1 row)
|
|
|
|
\c :TEST_DBNAME :ROLE_SUPERUSER
|
|
RESET timescaledb.disable_load;
|
|
SELECT 1;
|
|
WARNING: mock init "mock-1"
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
?column?
|
|
----------
|
|
1
|
|
(1 row)
|
|
|
|
\c :TEST_DBNAME :ROLE_SUPERUSER
|
|
SET timescaledb.other = 'on';
|
|
WARNING: mock init "mock-1"
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
SELECT 1;
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
?column?
|
|
----------
|
|
1
|
|
(1 row)
|
|
|
|
\set ON_ERROR_STOP 0
|
|
--cannot update extension after .so of previous version already loaded
|
|
ALTER EXTENSION timescaledb UPDATE TO 'mock-2';
|
|
ERROR: extension "timescaledb" cannot be updated after the old version has already been loaded
|
|
\set ON_ERROR_STOP 1
|
|
\c :TEST_DBNAME_2 :ROLE_SUPERUSER
|
|
\dx
|
|
List of installed extensions
|
|
Name | Version | Schema | Description
|
|
---------+---------+------------+------------------------------
|
|
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
|
|
(1 row)
|
|
|
|
CREATE EXTENSION timescaledb VERSION 'mock-1';
|
|
WARNING: mock init "mock-1"
|
|
\dx
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
List of installed extensions
|
|
Name | Version | Schema | Description
|
|
-------------+---------+------------+--------------------------------------------------------------------------------------
|
|
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
|
|
timescaledb | mock-1 | public | Enables scalable inserts and complex queries for time-series data (Apache 2 Edition)
|
|
(2 rows)
|
|
|
|
--start a new backend to update
|
|
\c :TEST_DBNAME_2 :ROLE_SUPERUSER
|
|
ALTER EXTENSION timescaledb UPDATE TO 'mock-2';
|
|
WARNING: mock init "mock-2"
|
|
SELECT 1;
|
|
WARNING: mock post_analyze_hook "mock-2"
|
|
?column?
|
|
----------
|
|
1
|
|
(1 row)
|
|
|
|
\dx
|
|
WARNING: mock post_analyze_hook "mock-2"
|
|
List of installed extensions
|
|
Name | Version | Schema | Description
|
|
-------------+---------+------------+--------------------------------------------------------------------------------------
|
|
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
|
|
timescaledb | mock-2 | public | Enables scalable inserts and complex queries for time-series data (Apache 2 Edition)
|
|
(2 rows)
|
|
|
|
--drop extension
|
|
DROP EXTENSION timescaledb;
|
|
WARNING: mock post_analyze_hook "mock-2"
|
|
SELECT 1;
|
|
?column?
|
|
----------
|
|
1
|
|
(1 row)
|
|
|
|
\dx
|
|
List of installed extensions
|
|
Name | Version | Schema | Description
|
|
---------+---------+------------+------------------------------
|
|
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
|
|
(1 row)
|
|
|
|
\c :TEST_DBNAME_2 :ROLE_SUPERUSER
|
|
CREATE EXTENSION timescaledb VERSION 'mock-2';
|
|
WARNING: mock init "mock-2"
|
|
SELECT 1;
|
|
WARNING: mock post_analyze_hook "mock-2"
|
|
?column?
|
|
----------
|
|
1
|
|
(1 row)
|
|
|
|
\dx
|
|
WARNING: mock post_analyze_hook "mock-2"
|
|
List of installed extensions
|
|
Name | Version | Schema | Description
|
|
-------------+---------+------------+--------------------------------------------------------------------------------------
|
|
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
|
|
timescaledb | mock-2 | public | Enables scalable inserts and complex queries for time-series data (Apache 2 Edition)
|
|
(2 rows)
|
|
|
|
-- test db 1 still has old version
|
|
\c :TEST_DBNAME :ROLE_SUPERUSER
|
|
SELECT 1;
|
|
WARNING: mock init "mock-1"
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
?column?
|
|
----------
|
|
1
|
|
(1 row)
|
|
|
|
\dx
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
List of installed extensions
|
|
Name | Version | Schema | Description
|
|
-------------+---------+------------+--------------------------------------------------------------------------------------
|
|
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
|
|
timescaledb | mock-1 | public | Enables scalable inserts and complex queries for time-series data (Apache 2 Edition)
|
|
(2 rows)
|
|
|
|
--try a broken upgrade
|
|
\c :TEST_DBNAME_2 :ROLE_SUPERUSER
|
|
\dx
|
|
WARNING: mock init "mock-2"
|
|
WARNING: mock post_analyze_hook "mock-2"
|
|
List of installed extensions
|
|
Name | Version | Schema | Description
|
|
-------------+---------+------------+--------------------------------------------------------------------------------------
|
|
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
|
|
timescaledb | mock-2 | public | Enables scalable inserts and complex queries for time-series data (Apache 2 Edition)
|
|
(2 rows)
|
|
|
|
\set ON_ERROR_STOP 0
|
|
ALTER EXTENSION timescaledb UPDATE TO 'mock-3';
|
|
ERROR: extension "timescaledb" cannot be updated after the old version has already been loaded
|
|
\set ON_ERROR_STOP 1
|
|
--should still be on mock-2
|
|
SELECT 1;
|
|
WARNING: mock post_analyze_hook "mock-2"
|
|
?column?
|
|
----------
|
|
1
|
|
(1 row)
|
|
|
|
\dx
|
|
WARNING: mock post_analyze_hook "mock-2"
|
|
List of installed extensions
|
|
Name | Version | Schema | Description
|
|
-------------+---------+------------+--------------------------------------------------------------------------------------
|
|
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
|
|
timescaledb | mock-2 | public | Enables scalable inserts and complex queries for time-series data (Apache 2 Edition)
|
|
(2 rows)
|
|
|
|
--drop extension
|
|
DROP EXTENSION timescaledb;
|
|
WARNING: mock post_analyze_hook "mock-2"
|
|
SELECT 1;
|
|
?column?
|
|
----------
|
|
1
|
|
(1 row)
|
|
|
|
\dx
|
|
List of installed extensions
|
|
Name | Version | Schema | Description
|
|
---------+---------+------------+------------------------------
|
|
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
|
|
(1 row)
|
|
|
|
--create extension anew, only upgrade was broken
|
|
\c :TEST_DBNAME_2 :ROLE_SUPERUSER
|
|
CREATE EXTENSION timescaledb VERSION 'mock-3';
|
|
WARNING: mock init "mock-3"
|
|
SELECT 1;
|
|
WARNING: mock post_analyze_hook "mock-3"
|
|
?column?
|
|
----------
|
|
1
|
|
(1 row)
|
|
|
|
\dx
|
|
WARNING: mock post_analyze_hook "mock-3"
|
|
List of installed extensions
|
|
Name | Version | Schema | Description
|
|
-------------+---------+------------+--------------------------------------------------------------------------------------
|
|
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
|
|
timescaledb | mock-3 | public | Enables scalable inserts and complex queries for time-series data (Apache 2 Edition)
|
|
(2 rows)
|
|
|
|
DROP EXTENSION timescaledb;
|
|
WARNING: mock post_analyze_hook "mock-3"
|
|
SELECT 1;
|
|
?column?
|
|
----------
|
|
1
|
|
(1 row)
|
|
|
|
--mismatched version errors
|
|
\c :TEST_DBNAME_2 :ROLE_SUPERUSER
|
|
--mock-4 has mismatched versions, so the .so load should be fatal
|
|
SELECT format($$\! utils/test_fatal_command.sh %1$s "CREATE EXTENSION timescaledb VERSION 'mock-4'"$$, :'TEST_DBNAME_2') as command_to_run \gset
|
|
:command_to_run
|
|
FATAL: extension "timescaledb" version mismatch: shared library version mock-4-mismatch; SQL version mock-4
|
|
server closed the connection unexpectedly
|
|
This probably means the server terminated abnormally
|
|
before or while processing the request.
|
|
connection to server was lost
|
|
--mock-4 not installed.
|
|
\dx
|
|
List of installed extensions
|
|
Name | Version | Schema | Description
|
|
---------+---------+------------+------------------------------
|
|
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
|
|
(1 row)
|
|
|
|
\c :TEST_DBNAME_2 :ROLE_SUPERUSER
|
|
--broken version and drop
|
|
CREATE EXTENSION timescaledb VERSION 'mock-broken';
|
|
WARNING: mock init "mock-broken"
|
|
\set ON_ERROR_STOP 0
|
|
--intentional broken version
|
|
\dx
|
|
WARNING: mock post_analyze_hook "mock-broken"
|
|
ERROR: mock broken "mock-broken"
|
|
SELECT 1;
|
|
WARNING: mock post_analyze_hook "mock-broken"
|
|
ERROR: mock broken "mock-broken"
|
|
SELECT 1;
|
|
WARNING: mock post_analyze_hook "mock-broken"
|
|
ERROR: mock broken "mock-broken"
|
|
--cannot drop extension; already loaded broken version
|
|
DROP EXTENSION timescaledb;
|
|
WARNING: mock post_analyze_hook "mock-broken"
|
|
ERROR: mock broken "mock-broken"
|
|
\set ON_ERROR_STOP 1
|
|
\c :TEST_DBNAME_2 :ROLE_SUPERUSER
|
|
--can drop extension now. Since drop first command.
|
|
DROP EXTENSION timescaledb;
|
|
\dx
|
|
List of installed extensions
|
|
Name | Version | Schema | Description
|
|
---------+---------+------------+------------------------------
|
|
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
|
|
(1 row)
|
|
|
|
--broken version and update to fixed
|
|
\c :TEST_DBNAME_2 :ROLE_SUPERUSER
|
|
CREATE EXTENSION timescaledb VERSION 'mock-broken';
|
|
WARNING: mock init "mock-broken"
|
|
\set ON_ERROR_STOP 0
|
|
--intentional broken version
|
|
SELECT 1;
|
|
WARNING: mock post_analyze_hook "mock-broken"
|
|
ERROR: mock broken "mock-broken"
|
|
--cannot update extension; already loaded bad version
|
|
ALTER EXTENSION timescaledb UPDATE TO 'mock-5';
|
|
ERROR: extension "timescaledb" cannot be updated after the old version has already been loaded
|
|
\set ON_ERROR_STOP 1
|
|
\c :TEST_DBNAME_2 :ROLE_SUPERUSER
|
|
--can update extension now.
|
|
ALTER EXTENSION timescaledb UPDATE TO 'mock-5';
|
|
WARNING: mock init "mock-5"
|
|
SELECT 1;
|
|
WARNING: mock post_analyze_hook "mock-5"
|
|
?column?
|
|
----------
|
|
1
|
|
(1 row)
|
|
|
|
SELECT mock_function();
|
|
WARNING: mock post_analyze_hook "mock-5"
|
|
WARNING: mock function call "mock-5"
|
|
mock_function
|
|
---------------
|
|
|
|
(1 row)
|
|
|
|
\c :TEST_DBNAME_2 :ROLE_SUPERUSER
|
|
ALTER EXTENSION timescaledb UPDATE TO 'mock-6';
|
|
WARNING: mock init "mock-6"
|
|
--The mock-5->mock_6 upgrade is intentionally broken.
|
|
--The mock_function was never changed to point to mock-6 in the update script.
|
|
--Thus mock_function is defined incorrectly to point to the mock-5.so
|
|
--This will now be a FATAL error.
|
|
SELECT format($$\! utils/test_fatal_command.sh %1$s "SELECT mock_function()"$$, :'TEST_DBNAME_2') as command_to_run \gset
|
|
WARNING: mock post_analyze_hook "mock-6"
|
|
:command_to_run
|
|
WARNING: mock init "mock-6"
|
|
WARNING: mock post_analyze_hook "mock-6"
|
|
FATAL: extension "timescaledb" version mismatch: shared library version mock-5; SQL version mock-6
|
|
server closed the connection unexpectedly
|
|
This probably means the server terminated abnormally
|
|
before or while processing the request.
|
|
connection to server was lost
|
|
\dx
|
|
WARNING: mock post_analyze_hook "mock-6"
|
|
List of installed extensions
|
|
Name | Version | Schema | Description
|
|
-------------+---------+------------+--------------------------------------------------------------------------------------
|
|
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
|
|
timescaledb | mock-6 | public | Enables scalable inserts and complex queries for time-series data (Apache 2 Edition)
|
|
(2 rows)
|
|
|
|
--TEST: create extension when old .so already loaded
|
|
\c :TEST_DBNAME :ROLE_SUPERUSER
|
|
--force load of extension with (\dx)
|
|
\dx
|
|
WARNING: mock init "mock-1"
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
List of installed extensions
|
|
Name | Version | Schema | Description
|
|
-------------+---------+------------+--------------------------------------------------------------------------------------
|
|
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
|
|
timescaledb | mock-1 | public | Enables scalable inserts and complex queries for time-series data (Apache 2 Edition)
|
|
(2 rows)
|
|
|
|
DROP EXTENSION timescaledb;
|
|
WARNING: mock post_analyze_hook "mock-1"
|
|
\dx
|
|
List of installed extensions
|
|
Name | Version | Schema | Description
|
|
---------+---------+------------+------------------------------
|
|
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
|
|
(1 row)
|
|
|
|
\set ON_ERROR_STOP 0
|
|
CREATE EXTENSION timescaledb VERSION 'mock-2';
|
|
ERROR: extension "timescaledb" has already been loaded with another version
|
|
\set ON_ERROR_STOP 1
|
|
\dx
|
|
List of installed extensions
|
|
Name | Version | Schema | Description
|
|
---------+---------+------------+------------------------------
|
|
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
|
|
(1 row)
|
|
|
|
--can create in a new session.
|
|
\c :TEST_DBNAME :ROLE_SUPERUSER
|
|
CREATE EXTENSION timescaledb VERSION 'mock-2';
|
|
WARNING: mock init "mock-2"
|
|
\dx
|
|
WARNING: mock post_analyze_hook "mock-2"
|
|
List of installed extensions
|
|
Name | Version | Schema | Description
|
|
-------------+---------+------------+--------------------------------------------------------------------------------------
|
|
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
|
|
timescaledb | mock-2 | public | Enables scalable inserts and complex queries for time-series data (Apache 2 Edition)
|
|
(2 rows)
|
|
|
|
--make sure parallel workers started after a 'DISCARD ALL' work
|
|
CREATE TABLE test (i int, j double precision);
|
|
WARNING: mock post_analyze_hook "mock-2"
|
|
INSERT INTO test SELECT x, x+0.1 FROM generate_series(1,100) AS x;
|
|
WARNING: mock post_analyze_hook "mock-2"
|
|
DISCARD ALL;
|
|
WARNING: mock post_analyze_hook "mock-2"
|
|
SET force_parallel_mode = 'on';
|
|
WARNING: mock post_analyze_hook "mock-2"
|
|
SET max_parallel_workers_per_gather = 1;
|
|
WARNING: mock post_analyze_hook "mock-2"
|
|
SELECT count(*) FROM test;
|
|
WARNING: mock post_analyze_hook "mock-2"
|
|
WARNING: mock init "mock-2"
|
|
count
|
|
-------
|
|
100
|
|
(1 row)
|
|
|
|
-- clean up additional database
|
|
\c :TEST_DBNAME :ROLE_SUPERUSER
|
|
DROP DATABASE :"TEST_DBNAME_2";
|
|
WARNING: mock init "mock-2"
|
|
WARNING: mock post_analyze_hook "mock-2"
|