From c4a5ed7fd4f75f658162ded2eb86813df45f7e06 Mon Sep 17 00:00:00 2001 From: Adam Guo Date: Tue, 4 Mar 2025 22:39:28 +0000 Subject: [PATCH] Add new test --- Makefile | 2 +- expected/preload_libraries_warning.out | 123 +++++++++++++++++++++++++ sql/preload_libraries_warning.sql | 51 ++++++++++ 3 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 expected/preload_libraries_warning.out create mode 100644 sql/preload_libraries_warning.sql diff --git a/Makefile b/Makefile index 9f770f6..048aa37 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ DATA = pg_ivm--1.0.sql \ pg_ivm--1.9--1.10.sql \ pg_ivm--1.10.sql -REGRESS = pg_ivm create_immv refresh_immv +REGRESS = pg_ivm create_immv refresh_immv preload_libraries_warning PGVER = $(shell $(PG_CONFIG) --version | sed "s/^[^ ]* \([0-9]*\).*$$/\1/" 2>/dev/null) diff --git a/expected/preload_libraries_warning.out b/expected/preload_libraries_warning.out new file mode 100644 index 0000000..91513d7 --- /dev/null +++ b/expected/preload_libraries_warning.out @@ -0,0 +1,123 @@ +-- SQL tests to validate that the session_preload_libraries warning is emitted +-- whenever pg_ivm is not in session_preload_libraries. +DROP EXTENSION IF EXISTS pg_ivm CASCADE; +NOTICE: drop cascades to 12 other objects +DETAIL: drop cascades to trigger IVM_trigger_ins_before_17637 on table t +drop cascades to trigger IVM_trigger_del_before_17638 on table t +drop cascades to trigger IVM_trigger_upd_before_17639 on table t +drop cascades to trigger IVM_trigger_truncate_before_17640 on table t +drop cascades to trigger IVM_trigger_ins_after_17641 on table t +drop cascades to trigger IVM_trigger_del_after_17642 on table t +drop cascades to trigger IVM_trigger_upd_after_17643 on table t +drop cascades to trigger IVM_trigger_truncate_after_17644 on table t +drop cascades to trigger IVM_prevent_immv_change_17621 on table mv +drop cascades to trigger IVM_prevent_immv_change_17622 on table mv +drop cascades to trigger IVM_prevent_immv_change_17623 on table mv +drop cascades to trigger IVM_prevent_immv_change_17624 on table mv +-- Validate that pg_ivm 1.10 cannot be created if pg_ivm is not in +-- session_preload_libraries. +ALTER SYSTEM RESET session_preload_libraries; +SELECT pg_reload_conf(); + pg_reload_conf +---------------- + t +(1 row) + +\c - +CREATE EXTENSION pg_ivm VERSION '1.9'; -- expect success +ALTER EXTENSION pg_ivm UPDATE; -- expect failure +ERROR: pg_ivm is not loaded in shared_preload_libraries or session_preload_libraries +HINT: Add pg_ivm to session_preload_libraries and restart the session. Or, add pg_ivm to shared_preload_libraries and restart Postgres. +CONTEXT: PL/pgSQL function inline_code_block line 13 at RAISE +DROP EXTENSION pg_ivm; +CREATE EXTENSION pg_ivm; -- expect failure +ERROR: pg_ivm is not loaded in shared_preload_libraries or session_preload_libraries +HINT: Add pg_ivm to session_preload_libraries and restart the session. Or, add pg_ivm to shared_preload_libraries and restart Postgres. +CONTEXT: PL/pgSQL function inline_code_block line 13 at RAISE +-- Validate that pg_ivm 1.10 can be created if pg_ivm is in +-- session_preload_libraries. +ALTER SYSTEM SET session_preload_libraries = pg_ivm; +SELECT pg_reload_conf(); + pg_reload_conf +---------------- + t +(1 row) + +\c - +CREATE EXTENSION pg_ivm VERSION '1.9'; -- expect success +ALTER EXTENSION pg_ivm UPDATE; -- expect success +DROP EXTENSION pg_ivm; +CREATE EXTENSION pg_ivm; -- expect success +-- Verify that the warning is emitted when each SQL function is called. +ALTER SYSTEM RESET session_preload_libraries; +SELECT pg_reload_conf(); + pg_reload_conf +---------------- + t +(1 row) + +\c - +CREATE TABLE mytab (i int primary key, a text); +SELECT pgivm.create_immv('myview', 'SELECT i, reverse(a) FROM mytab'); +WARNING: pg_ivm is not loaded in shared_preload_libraries or session_preload_libraries +HINT: Add pg_ivm to session_preload_libraries and restart the session. Or, add pg_ivm to shared_preload_libraries and restart Postgres. +NOTICE: created index "myview_index" on immv "myview" + create_immv +------------- + 0 +(1 row) + +SELECT pgivm.refresh_immv('myview', true); +WARNING: pg_ivm is not loaded in shared_preload_libraries or session_preload_libraries +HINT: Add pg_ivm to session_preload_libraries and restart the session. Or, add pg_ivm to shared_preload_libraries and restart Postgres. + refresh_immv +-------------- + 0 +(1 row) + +SELECT pgivm.get_immv_def('myview'); +WARNING: pg_ivm is not loaded in shared_preload_libraries or session_preload_libraries +HINT: Add pg_ivm to session_preload_libraries and restart the session. Or, add pg_ivm to shared_preload_libraries and restart Postgres. + get_immv_def +--------------------------- + SELECT i, + + reverse(a) AS reverse+ + FROM mytab +(1 row) + +-- Verify that the warning is emitted by the maintenance triggers. +INSERT INTO mytab VALUES (1, 'asdf'); +WARNING: pg_ivm is not loaded in shared_preload_libraries or session_preload_libraries +HINT: Add pg_ivm to session_preload_libraries and restart the session. Or, add pg_ivm to shared_preload_libraries and restart Postgres. +-- Verify that the warning is not emitted after pg_ivm is added to +-- session_preload_libraries. +ALTER SYSTEM SET session_preload_libraries = pg_ivm; +SELECT pg_reload_conf(); + pg_reload_conf +---------------- + t +(1 row) + +\c - +SELECT pgivm.create_immv('myview2', 'SELECT i, reverse(a) FROM mytab'); +NOTICE: created index "myview2_index" on immv "myview2" + create_immv +------------- + 1 +(1 row) + +SELECT pgivm.refresh_immv('myview2', true); + refresh_immv +-------------- + 1 +(1 row) + +SELECT pgivm.get_immv_def('myview2'); + get_immv_def +--------------------------- + SELECT i, + + reverse(a) AS reverse+ + FROM mytab +(1 row) + +INSERT INTO mytab VALUES (2, 'qwer'); diff --git a/sql/preload_libraries_warning.sql b/sql/preload_libraries_warning.sql new file mode 100644 index 0000000..e42aa2b --- /dev/null +++ b/sql/preload_libraries_warning.sql @@ -0,0 +1,51 @@ +-- SQL tests to validate that the session_preload_libraries warning is emitted +-- whenever pg_ivm is not in session_preload_libraries. + +DROP EXTENSION IF EXISTS pg_ivm CASCADE; + +-- Validate that pg_ivm 1.10 cannot be created if pg_ivm is not in +-- session_preload_libraries. +ALTER SYSTEM RESET session_preload_libraries; +SELECT pg_reload_conf(); +\c - + +CREATE EXTENSION pg_ivm VERSION '1.9'; -- expect success +ALTER EXTENSION pg_ivm UPDATE; -- expect failure +DROP EXTENSION pg_ivm; +CREATE EXTENSION pg_ivm; -- expect failure + +-- Validate that pg_ivm 1.10 can be created if pg_ivm is in +-- session_preload_libraries. +ALTER SYSTEM SET session_preload_libraries = pg_ivm; +SELECT pg_reload_conf(); +\c - + +CREATE EXTENSION pg_ivm VERSION '1.9'; -- expect success +ALTER EXTENSION pg_ivm UPDATE; -- expect success +DROP EXTENSION pg_ivm; +CREATE EXTENSION pg_ivm; -- expect success + +-- Verify that the warning is emitted when each SQL function is called. +ALTER SYSTEM RESET session_preload_libraries; +SELECT pg_reload_conf(); +\c - + +CREATE TABLE mytab (i int primary key, a text); +SELECT pgivm.create_immv('myview', 'SELECT i, reverse(a) FROM mytab'); +SELECT pgivm.refresh_immv('myview', true); +SELECT pgivm.get_immv_def('myview'); + +-- Verify that the warning is emitted by the maintenance triggers. +INSERT INTO mytab VALUES (1, 'asdf'); + +-- Verify that the warning is not emitted after pg_ivm is added to +-- session_preload_libraries. +ALTER SYSTEM SET session_preload_libraries = pg_ivm; +SELECT pg_reload_conf(); +\c - + +SELECT pgivm.create_immv('myview2', 'SELECT i, reverse(a) FROM mytab'); +SELECT pgivm.refresh_immv('myview2', true); +SELECT pgivm.get_immv_def('myview2'); +INSERT INTO mytab VALUES (2, 'qwer'); +