Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions ansible/vars.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ postgres_major:

# Full version strings for each major version
postgres_release:
postgresorioledb-17: "17.5.1.065-orioledb"
postgres17: "17.6.1.044"
postgres15: "15.14.1.044"
postgresorioledb-17: "17.5.1.066-orioledb"
postgres17: "17.6.1.045"
postgres15: "15.14.1.045"

# Non Postgres Extensions
pgbouncer_release: 1.19.0
Expand Down
1 change: 1 addition & 0 deletions nix/ext/tests/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,7 @@ builtins.listToAttrs (
"pgaudit"
"pg_tle"
"vector"
"wal2json"
"wrappers"
]
)
9 changes: 9 additions & 0 deletions nix/ext/versions.json
Original file line number Diff line number Diff line change
Expand Up @@ -757,5 +757,14 @@
],
"hash": "sha256-crxj5R9jblIv0h8lpqddAoYe2UqgUlnvbOajKTzVces="
}
},
"wal2json": {
"2.6": {
"postgresql": [
"15",
"17"
],
"hash": "sha256-+QoACPCKiFfuT2lJfSUmgfzC5MXf75KpSoc2PzPxKyM="
}
}
}
109 changes: 90 additions & 19 deletions nix/ext/wal2json.nix
Original file line number Diff line number Diff line change
@@ -1,35 +1,106 @@
{
pkgs,
lib,
stdenv,
fetchFromGitHub,
postgresql,
makeWrapper,
}:

stdenv.mkDerivation rec {
let
pname = "wal2json";
version = "2_6";
build =
version: rev: hash:
stdenv.mkDerivation rec {
inherit version pname;

src = fetchFromGitHub {
owner = "eulerto";
repo = "wal2json";
rev = "wal2json_${builtins.replaceStrings [ "." ] [ "_" ] version}";
hash = "sha256-+QoACPCKiFfuT2lJfSUmgfzC5MXf75KpSoc2PzPxKyM=";
};
src = fetchFromGitHub {
owner = "eulerto";
repo = "wal2json";
rev = "wal2json_${builtins.replaceStrings [ "." ] [ "_" ] version}";
inherit hash;
};

buildInputs = [ postgresql ];

makeFlags = [ "USE_PGXS=1" ];

installPhase = ''
runHook preInstall

mkdir -p $out/share/postgresql/extension

# Install versioned library
install -Dm755 ${pname}${postgresql.dlSuffix} $out/lib/${pname}-${version}${postgresql.dlSuffix}
if [[ "${version}" == "${latestVersion}" ]]; then
cp sql/*.sql $out/share/postgresql/extension/
fi

touch $out/share/postgresql/extension/${pname}--${version}.control
touch $out/share/postgresql/extension/${pname}--${version}.sql

runHook postInstall
'';

meta = with lib; {
description = "PostgreSQL JSON output plugin for changeset extraction";
homepage = "https://github.com/eulerto/wal2json";
changelog = "https://github.com/eulerto/wal2json/releases/";
platforms = postgresql.meta.platforms;
license = licenses.bsd3;
};
};
allVersions = (builtins.fromJSON (builtins.readFile ./versions.json)).wal2json;
supportedVersions = lib.filterAttrs (
_: value: builtins.elem (lib.versions.major postgresql.version) value.postgresql
) allVersions;
versions = lib.naturalSort (lib.attrNames supportedVersions);
latestVersion = lib.last versions;
numberOfVersions = builtins.length versions;
packages = builtins.attrValues (
lib.mapAttrs (name: value: build name value.rev value.hash) supportedVersions
);
in
pkgs.buildEnv {
name = pname;
paths = packages;
nativeBuildInputs = [ makeWrapper ];
pathsToLink = [
"/lib"
"/share/postgresql/extension"
];
postBuild = ''
ln -sfn ${pname}-${latestVersion}${postgresql.dlSuffix} $out/lib/${pname}${postgresql.dlSuffix}

buildInputs = [ postgresql ];
{
echo "default_version = '${latestVersion}'"
} > $out/share/postgresql/extension/${pname}.control

makeFlags = [ "USE_PGXS=1" ];
# Create empty upgrade files between consecutive versions
# plpgsql_check ships without upgrade scripts - extensions are backward-compatible
previous_version=""
for ver in ${lib.concatStringsSep " " versions}; do
if [[ -n "$previous_version" ]]; then
touch $out/share/postgresql/extension/${pname}--''${previous_version}--''${ver}.sql
fi
previous_version=$ver
done

installPhase = ''
install -D -t $out/lib *${postgresql.dlSuffix}
install -D -t $out/share/postgresql/extension sql/*.sql
# checks
(set -x
test "$(ls -A $out/lib/${pname}*${postgresql.dlSuffix} | wc -l)" = "${
toString (numberOfVersions + 1)
}"
)
'';

meta = with lib; {
description = "PostgreSQL JSON output plugin for changeset extraction";
homepage = "https://github.com/eulerto/wal2json";
changelog = "https://github.com/eulerto/wal2json/releases/tag/wal2json_${version}";
platforms = postgresql.meta.platforms;
license = licenses.bsd3;
passthru = {
inherit versions numberOfVersions;
pname = "${pname}-all";
version =
"multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions);
defaultSettings = {
wal_level = "logical";
};
};
}
13 changes: 7 additions & 6 deletions nix/tests/expected/wal2json.out
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,17 @@ from
'reg_test',
null,
null,
'include-pk', '1',
'include-pk', 'true',
'include-transaction', 'false',
'include-timestamp', 'false',
'include-type-oids', 'false',
'include-type-oids', 'true',
'format-version', '2',
'actions', 'insert,update,delete'
'actions', 'insert,update,delete',
'add-tables', 'v.foo'
) x;
data
--------------------------------------------------------------------------------------------------------------------------------------
{"action":"I","schema":"v","table":"foo","columns":[{"name":"id","type":"integer","value":1}],"pk":[{"name":"id","type":"integer"}]}
data
----------------------------------------------------------------------------------------------------------------------------------------------------------------
{"action":"I","schema":"v","table":"foo","columns":[{"name":"id","type":"integer","typeoid":23,"value":1}],"pk":[{"name":"id","type":"integer","typeoid":23}]}
(1 row)

select
Expand Down
3 changes: 2 additions & 1 deletion nix/tests/expected/z_15_ext_interface.out
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ order by
pg_cron
pgjwt
tsm_system_time
(3 rows)
wal2json
(4 rows)

/*

Expand Down
3 changes: 2 additions & 1 deletion nix/tests/expected/z_17_ext_interface.out
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ order by
pgjwt
postgis_tiger_geocoder
tsm_system_time
(4 rows)
wal2json
(5 rows)

/*

Expand Down
3 changes: 2 additions & 1 deletion nix/tests/expected/z_orioledb-17_ext_interface.out
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ order by
pgjwt
postgis_tiger_geocoder
tsm_system_time
(4 rows)
wal2json
(5 rows)

/*

Expand Down
7 changes: 4 additions & 3 deletions nix/tests/sql/wal2json.sql
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,13 @@ from
'reg_test',
null,
null,
'include-pk', '1',
'include-pk', 'true',
'include-transaction', 'false',
'include-timestamp', 'false',
'include-type-oids', 'false',
'include-type-oids', 'true',
'format-version', '2',
'actions', 'insert,update,delete'
'actions', 'insert,update,delete',
'add-tables', 'v.foo'
) x;

select
Expand Down