Skip to content

Commit 570dbb3

Browse files
authored
Test for changes in all extension public interfaces (#1093)
* test for changes in all extension public interfaces * align test output * remove differences across architectures
1 parent 47d598f commit 570dbb3

File tree

6 files changed

+6412
-809
lines changed

6 files changed

+6412
-809
lines changed

nix/tests/expected/extensions_sql_interface.out

Lines changed: 6206 additions & 0 deletions
Large diffs are not rendered by default.

nix/tests/expected/postgis_sql_interface.out

Lines changed: 0 additions & 768 deletions
This file was deleted.

nix/tests/postgresql.conf.in

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# -----------------------------
22
# PostgreSQL configuration file
3+
34
# -----------------------------
45
#
56
# This file consists of lines of the form:
@@ -717,8 +718,9 @@ default_text_search_config = 'pg_catalog.english'
717718

718719
#local_preload_libraries = ''
719720
#session_preload_libraries = ''
720-
shared_preload_libraries = 'auto_explain,pgsodium'
721-
#jit_provider = 'llvmjit' # JIT library to use
721+
shared_preload_libraries = 'pg_stat_statements, pg_stat_monitor, pgaudit, plpgsql, plpgsql_check, pg_cron, pg_net, pgsodium, timescaledb, auto_explain, pg_tle, plan_filter' # (change requires restart)
722+
jit_provider = 'llvmjit' # JIT library to use
723+
722724

723725
# - Other Defaults -
724726

@@ -793,3 +795,6 @@ shared_preload_libraries = 'auto_explain,pgsodium'
793795
# Add settings for extensions here
794796

795797
pgsodium.getkey_script = '@PGSODIUM_GETKEY_SCRIPT@'
798+
799+
auto_explain.log_min_duration = 10s
800+
cron.database_name = 'postgres'

nix/tests/prime.sql

Lines changed: 98 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,101 @@
1-
CREATE EXTENSION IF NOT EXISTS pgtap;
1+
create role postgres;
2+
create extension address_standardizer;
3+
create extension address_standardizer_data_us;
4+
create extension adminpack;
5+
create extension amcheck;
6+
create extension autoinc;
7+
create extension bloom;
8+
create extension btree_gin;
9+
create extension btree_gist;
10+
create extension citext;
11+
create extension cube;
12+
create extension dblink;
13+
create extension dict_int;
14+
create extension dict_xsyn;
15+
create extension earthdistance;
16+
create extension file_fdw;
17+
create extension fuzzystrmatch;
18+
create extension http;
19+
create extension hstore;
20+
create extension hypopg;
21+
create extension index_advisor;
22+
create extension insert_username;
23+
create extension intagg;
24+
create extension intarray;
25+
create extension isn;
26+
create extension lo;
27+
create extension ltree;
28+
create extension moddatetime;
29+
create extension old_snapshot;
30+
create extension pageinspect;
31+
create extension pg_buffercache;
232

3-
CREATE EXTENSION IF NOT EXISTS postgis;
4-
CREATE EXTENSION IF NOT EXISTS pgrouting;
5-
CREATE EXTENSION IF NOT EXISTS pgcrypto;
6-
CREATE EXTENSION IF NOT EXISTS pgsodium;
7-
CREATE EXTENSION IF NOT EXISTS supabase_vault;
33+
/*
34+
TODO: Does not enable locally mode
35+
requires a change to postgresql.conf to set
36+
cron.database_name = 'testing'
37+
*/
38+
-- create extension pg_cron;
839

9-
CREATE EXTENSION IF NOT EXISTS pgjwt;
10-
CREATE EXTENSION IF NOT EXISTS plpgsql_check;
11-
CREATE EXTENSION IF NOT EXISTS plv8;
12-
CREATE EXTENSION IF NOT EXISTS rum;
13-
CREATE EXTENSION IF NOT EXISTS vector;
14-
CREATE EXTENSION IF NOT EXISTS pg_repack;
15-
CREATE EXTENSION IF NOT EXISTS pgroonga;
40+
create extension pg_net;
41+
create extension pg_graphql;
42+
create extension pg_freespacemap;
43+
create extension pg_hashids;
44+
create extension pg_prewarm;
45+
create extension pg_jsonschema;
46+
create extension pg_repack;
47+
create extension pg_stat_monitor;
48+
create extension pg_stat_statements;
49+
create extension pg_surgery;
50+
create extension pg_tle;
51+
create extension pg_trgm;
52+
create extension pg_visibility;
53+
create extension pg_walinspect;
54+
create extension pgaudit;
55+
create extension pgcrypto;
56+
create extension pgtap;
57+
create extension pgjwt;
58+
create extension pgroonga;
59+
create extension pgroonga_database;
60+
create extension pgsodium;
61+
create extension pgrowlocks;
62+
create extension pgstattuple;
63+
create extension plpgsql_check;
64+
65+
/*
66+
TODO: PLs can not be enabled on M1 Macs locally
67+
ERROR: could not load library "/nix/store/..../lib/plv8-3.1.5.so
68+
symbol not found in flat namespace
69+
*/
70+
-- create extension plv8;
71+
-- create extension plcoffee;
72+
-- create extension plls;
73+
74+
create extension postgis;
75+
create extension postgis_raster;
76+
create extension postgis_sfcgal;
77+
create extension postgis_tiger_geocoder;
78+
create extension postgis_topology;
79+
create extension pgrouting; -- requires postgis
80+
create extension postgres_fdw;
81+
create extension rum;
82+
create extension refint;
83+
create extension seg;
84+
create extension sslinfo;
85+
create extension supabase_vault;
86+
create extension tablefunc;
87+
create extension tcn;
88+
create extension timescaledb;
89+
create extension tsm_system_rows;
90+
create extension tsm_system_time;
91+
create extension unaccent;
92+
create extension "uuid-ossp";
93+
create extension vector;
94+
create extension wrappers;
95+
create extension xml2;
96+
97+
98+
99+
100+
16101

17-
CREATE EXTENSION IF NOT EXISTS wrappers;
18-
CREATE EXTENSION IF NOT EXISTS http;
19-
CREATE EXTENSION IF NOT EXISTS pg_graphql;
20-
CREATE EXTENSION IF NOT EXISTS pg_jsonschema;
21-
CREATE EXTENSION IF NOT EXISTS hypopg;
22-
CREATE EXTENSION IF NOT EXISTS index_advisor;
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
/*
2+
3+
The purpose of this test is to monitor the SQL interface exposed
4+
by Postgres extensions so we have to manually review/approve any difference
5+
that emerge as versions change.
6+
7+
*/
8+
9+
10+
/*
11+
12+
List all extensions that are not enabled
13+
If a new entry shows up in this list, that means a new extension has been
14+
added and you should `create extension ...` to enable it in ./nix/tests/prime
15+
16+
*/
17+
18+
select
19+
name
20+
from
21+
pg_available_extensions
22+
where
23+
installed_version is null
24+
order by
25+
name asc;
26+
27+
28+
/*
29+
30+
Monitor relocatability and config of each extension
31+
- lesson learned from pg_cron
32+
33+
*/
34+
35+
select
36+
extname as extension_name,
37+
extrelocatable as is_relocatable
38+
from
39+
pg_extension
40+
order by
41+
extname asc;
42+
43+
44+
/*
45+
46+
Monitor extension public function interface
47+
48+
*/
49+
50+
select
51+
e.extname as extension_name,
52+
n.nspname as schema_name,
53+
p.proname as function_name,
54+
pg_catalog.pg_get_function_identity_arguments(p.oid) as argument_types,
55+
pg_catalog.pg_get_function_result(p.oid) as return_type
56+
from
57+
pg_catalog.pg_proc p
58+
join pg_catalog.pg_namespace n
59+
on n.oid = p.pronamespace
60+
join pg_catalog.pg_depend d
61+
on d.objid = p.oid
62+
join pg_catalog.pg_extension e
63+
on e.oid = d.refobjid
64+
where
65+
d.deptype = 'e'
66+
order by
67+
e.extname,
68+
n.nspname,
69+
p.proname,
70+
pg_catalog.pg_get_function_identity_arguments(p.oid);
71+
72+
/*
73+
74+
Monitor extension public table/view/matview/index interface
75+
76+
*/
77+
78+
select
79+
e.extname as extension_name,
80+
n.nspname as schema_name,
81+
pc.relname as entity_name,
82+
pa.attname
83+
from
84+
pg_catalog.pg_class pc
85+
join pg_catalog.pg_namespace n
86+
on n.oid = pc.relnamespace
87+
join pg_catalog.pg_depend d
88+
on d.objid = pc.oid
89+
join pg_catalog.pg_extension e
90+
on e.oid = d.refobjid
91+
left join pg_catalog.pg_attribute pa
92+
on pa.attrelid = pc.oid
93+
and pa.attnum > 0
94+
and not pa.attisdropped
95+
where
96+
d.deptype = 'e'
97+
and pc.relkind in ('r', 'v', 'm', 'i')
98+
order by
99+
e.extname,
100+
pc.relname,
101+
pa.attname;

nix/tests/sql/postgis_sql_interface.sql

Lines changed: 0 additions & 20 deletions
This file was deleted.

0 commit comments

Comments
 (0)