Skip to content

Commit 4a4bc61

Browse files
authored
Merge branch 'develop' into feat/predefined-role-grants
2 parents 861da6f + 7efb009 commit 4a4bc61

File tree

8 files changed

+189
-45
lines changed

8 files changed

+189
-45
lines changed

ansible/files/postgresql_extension_custom_scripts/pgmq/after-create.sql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ begin
1818
physical backups everywhere
1919
*/
2020
-- Detach and delete the official function
21-
alter extension pgmq drop function pgmq.drop_queue;
22-
drop function pgmq.drop_queue;
21+
alter extension pgmq drop function pgmq.drop_queue(TEXT);
22+
drop function pgmq.drop_queue(TEXT);
2323

2424
-- Create and reattach the patched function
2525
CREATE FUNCTION pgmq.drop_queue(queue_name TEXT)
@@ -134,7 +134,7 @@ BEGIN
134134
END;
135135
$func$ LANGUAGE plpgsql;
136136

137-
alter extension pgmq add function pgmq.drop_queue;
137+
alter extension pgmq add function pgmq.drop_queue(TEXT);
138138

139139

140140
update pg_extension set extowner = 'postgres'::regrole where extname = 'pgmq';

nix/ext/pgmq.nix

Lines changed: 90 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,36 +3,101 @@
33
stdenv,
44
fetchFromGitHub,
55
postgresql,
6+
buildEnv,
67
}:
7-
8-
stdenv.mkDerivation rec {
8+
let
99
pname = "pgmq";
10-
version = "1.4.4";
11-
buildInputs = [ postgresql ];
12-
src = fetchFromGitHub {
13-
owner = "tembo-io";
14-
repo = pname;
15-
rev = "v${version}";
16-
hash = "sha256-z+8/BqIlHwlMnuIzMz6eylmYbSmhtsNt7TJf/CxbdVw=";
17-
};
1810

19-
buildPhase = ''
20-
cd pgmq-extension
21-
'';
11+
# Load version configuration from external file
12+
allVersions = (builtins.fromJSON (builtins.readFile ./versions.json)).${pname};
13+
14+
# Filter versions compatible with current PostgreSQL version
15+
supportedVersions = lib.filterAttrs (
16+
_: value: builtins.elem (lib.versions.major postgresql.version) value.postgresql
17+
) allVersions;
18+
19+
# Derived version information
20+
versions = lib.naturalSort (lib.attrNames supportedVersions);
21+
latestVersion = lib.last versions;
22+
numberOfVersions = builtins.length versions;
23+
packages = builtins.attrValues (
24+
lib.mapAttrs (name: value: build name value.hash) supportedVersions
25+
);
26+
27+
# Build function for individual versions
28+
build =
29+
version: hash:
30+
stdenv.mkDerivation rec {
31+
inherit pname version;
32+
buildInputs = [ postgresql ];
33+
src = fetchFromGitHub {
34+
owner = "tembo-io";
35+
repo = pname;
36+
rev = "v${version}";
37+
inherit hash;
38+
};
39+
40+
buildPhase = ''
41+
cd pgmq-extension
42+
'';
43+
44+
installPhase = ''
45+
runHook preInstall
46+
47+
mkdir -p $out/share/postgresql/extension
48+
49+
# Create versioned sql install script
50+
cp sql/${pname}.sql $out/share/postgresql/extension/${pname}--${version}.sql
51+
52+
# Create versioned control file with modified module path
53+
sed -e "/^default_version =/d" \
54+
-e "s|^module_pathname = .*|module_pathname = '\$libdir/${pname}'|" \
55+
${pname}.control > $out/share/postgresql/extension/${pname}--${version}.control
56+
57+
# For the latest version, create default control file and symlink and copy SQL upgrade scripts
58+
if [[ "${version}" == "${latestVersion}" ]]; then
59+
{
60+
echo "default_version = '${version}'"
61+
cat $out/share/postgresql/extension/${pname}--${version}.control
62+
} > $out/share/postgresql/extension/${pname}.control
63+
cat >> sql/pgmq--1.5.0--1.5.1.sql <<EOF
64+
65+
CREATE FUNCTION pgmq._extension_exists(extension_name TEXT)
66+
RETURNS BOOLEAN
67+
LANGUAGE SQL
68+
AS \$\$
69+
SELECT EXISTS (
70+
SELECT 1
71+
FROM pg_extension
72+
WHERE extname = extension_name
73+
)
74+
\$\$;
75+
EOF
76+
cp sql/*.sql $out/share/postgresql/extension
77+
fi
78+
79+
runHook postInstall
80+
'';
2281

23-
installPhase = ''
24-
mkdir -p $out/{lib,share/postgresql/extension}
82+
meta = with lib; {
83+
description = "A lightweight message queue. Like AWS SQS and RSMQ but on Postgres.";
84+
homepage = "https://github.com/tembo-io/pgmq";
85+
maintainers = with maintainers; [ olirice ];
86+
inherit (postgresql.meta) platforms;
87+
license = licenses.postgresql;
88+
};
89+
};
90+
in
91+
buildEnv {
92+
name = pname;
93+
paths = packages;
2594

26-
mv sql/pgmq.sql $out/share/postgresql/extension/pgmq--${version}.sql
27-
cp sql/*.sql $out/share/postgresql/extension
28-
cp *.control $out/share/postgresql/extension
29-
'';
95+
pathsToLink = [ "/share/postgresql/extension" ];
3096

31-
meta = with lib; {
32-
description = "A lightweight message queue. Like AWS SQS and RSMQ but on Postgres.";
33-
homepage = "https://github.com/tembo-io/pgmq";
34-
maintainers = with maintainers; [ olirice ];
35-
platforms = postgresql.meta.platforms;
36-
license = licenses.postgresql;
97+
passthru = {
98+
inherit versions numberOfVersions;
99+
pname = "${pname}-all";
100+
version =
101+
"multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions);
37102
};
38103
}

nix/ext/tests/default.nix

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ let
151151
with subtest("Check upgrade path with postgresql 15"):
152152
test.check_upgrade_path("15")
153153
154-
with subtest("Check pg_regress with postgresql 15"):
154+
with subtest("Check pg_regress with postgresql 15 after extension upgrade"):
155155
test.check_pg_regress(Path("${psql_15}/lib/pgxs/src/test/regress/pg_regress"), "15", pg_regress_test_name)
156156
157157
last_version = None
@@ -162,18 +162,27 @@ let
162162
with subtest("Test switch_${pname}_version"):
163163
test.check_switch_extension_with_background_worker(Path("${psql_15}/lib/${pname}.so"), "15")
164164
165+
with subtest("Check pg_regress with postgresql 15 after installing the last version"):
166+
test.check_pg_regress(Path("${psql_15}/lib/pgxs/src/test/regress/pg_regress"), "15", pg_regress_test_name)
167+
165168
with subtest("switch to postgresql 17"):
166169
server.succeed(
167170
f"{pg17_configuration}/bin/switch-to-configuration test >&2"
168171
)
169172
170-
with subtest("Check last version of the extension after upgrade"):
173+
with subtest("Check last version of the extension after postgresql upgrade"):
171174
test.assert_version_matches(last_version)
172175
173176
with subtest("Check upgrade path with postgresql 17"):
174177
test.check_upgrade_path("17")
175178
176-
with subtest("Check pg_regress with postgresql 17"):
179+
with subtest("Check pg_regress with postgresql 17 after extension upgrade"):
180+
test.check_pg_regress(Path("${psql_17}/lib/pgxs/src/test/regress/pg_regress"), "17", pg_regress_test_name)
181+
182+
with subtest("Check the install of the last version of the extension"):
183+
test.check_install_last_version("17")
184+
185+
with subtest("Check pg_regress with postgresql 17 after installing the last version"):
177186
test.check_pg_regress(Path("${psql_17}/lib/pgxs/src/test/regress/pg_regress"), "17", pg_regress_test_name)
178187
'';
179188
};
@@ -196,6 +205,7 @@ builtins.listToAttrs (
196205
"pg_cron"
197206
"pg_graphql"
198207
"pg_net"
208+
"pgmq"
199209
"vector"
200210
"wrappers"
201211
]

nix/ext/versions.json

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,21 @@
277277
],
278278
"hash": "sha256-Cpi2iASi1QJoED0Qs1dANqg/BNZTsz5S+pw8iYyW03Y="
279279
}
280+
},
281+
"pgmq": {
282+
"1.4.4": {
283+
"postgresql": [
284+
"15"
285+
],
286+
"hash": "sha256-z+8/BqIlHwlMnuIzMz6eylmYbSmhtsNt7TJf/CxbdVw="
287+
},
288+
"1.5.1": {
289+
"postgresql": [
290+
"15",
291+
"17"
292+
],
293+
"hash": "sha256-IU+i6ONPwtgsFKdzya6E+222ualR66gkbb0lDr+7Rb8="
294+
}
280295
},
281296
"pgrouting": {
282297
"3.4.1": {
@@ -412,7 +427,7 @@
412427
"hash": "sha256-JsZV+I4eRMypXTjGmjCtMBXDVpqTIPHQa28ogXncE/Q="
413428
}
414429
},
415-
"wrappers": {
430+
"wrappers": {
416431
"0.5.4": {
417432
"postgresql": [
418433
"15",

nix/tests/expected/pgmq.out

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ order by
160160
-------------+-------------------------------+----------
161161
pgmq | _belongs_to_pgmq | postgres
162162
pgmq | _ensure_pg_partman_installed | postgres
163+
pgmq | _extension_exists | postgres
163164
pgmq | _get_partition_col | postgres
164165
pgmq | _get_pg_partman_major_version | postgres
165166
pgmq | _get_pg_partman_schema | postgres
@@ -174,6 +175,7 @@ order by
174175
pgmq | delete | postgres
175176
pgmq | detach_archive | postgres
176177
pgmq | drop_queue | postgres
178+
pgmq | drop_queue | postgres
177179
pgmq | format_table_name | postgres
178180
pgmq | list_queues | postgres
179181
pgmq | metrics | postgres
@@ -183,8 +185,18 @@ order by
183185
pgmq | read | postgres
184186
pgmq | read_with_poll | postgres
185187
pgmq | send | postgres
188+
pgmq | send | postgres
189+
pgmq | send | postgres
190+
pgmq | send | postgres
191+
pgmq | send | postgres
192+
pgmq | send | postgres
193+
pgmq | send_batch | postgres
194+
pgmq | send_batch | postgres
195+
pgmq | send_batch | postgres
196+
pgmq | send_batch | postgres
197+
pgmq | send_batch | postgres
186198
pgmq | send_batch | postgres
187199
pgmq | set_vt | postgres
188200
pgmq | validate_queue_name | postgres
189-
(28 rows)
201+
(40 rows)
190202

0 commit comments

Comments
 (0)