From dfe1c24809767a74b64f92c82638c1dd3452f1df Mon Sep 17 00:00:00 2001 From: myypo Date: Sun, 5 Jan 2025 13:52:30 +0200 Subject: [PATCH 1/4] pgx_ulid: init at 0.2.0 --- nixos/tests/postgresql/default.nix | 1 + nixos/tests/postgresql/pgx_ulid.nix | 93 ++++++++++++++++++++ pkgs/servers/sql/postgresql/ext/default.nix | 2 + pkgs/servers/sql/postgresql/ext/pgx_ulid.nix | 50 +++++++++++ 4 files changed, 146 insertions(+) create mode 100644 nixos/tests/postgresql/pgx_ulid.nix create mode 100644 pkgs/servers/sql/postgresql/ext/pgx_ulid.nix diff --git a/nixos/tests/postgresql/default.nix b/nixos/tests/postgresql/default.nix index 4fe7e7a37e7e..3aa7db540397 100644 --- a/nixos/tests/postgresql/default.nix +++ b/nixos/tests/postgresql/default.nix @@ -20,6 +20,7 @@ in anonymizer = importWithArgs ./anonymizer.nix; pgjwt = importWithArgs ./pgjwt.nix; pgvecto-rs = importWithArgs ./pgvecto-rs.nix; + pgx_ulid = importWithArgs ./pgx_ulid.nix; timescaledb = importWithArgs ./timescaledb.nix; tsja = importWithArgs ./tsja.nix; wal2json = importWithArgs ./wal2json.nix; diff --git a/nixos/tests/postgresql/pgx_ulid.nix b/nixos/tests/postgresql/pgx_ulid.nix new file mode 100644 index 000000000000..e6ee9a129632 --- /dev/null +++ b/nixos/tests/postgresql/pgx_ulid.nix @@ -0,0 +1,93 @@ +{ + pkgs, + makeTest, +}: +let + inherit (pkgs) lib; + + test-sql = pkgs.writeText "postgresql-test" '' + CREATE EXTENSION ulid; + + CREATE TABLE items ( + id ulid NOT NULL DEFAULT gen_monotonic_ulid() PRIMARY KEY, + created_at TIMESTAMP GENERATED ALWAYS AS (id::TIMESTAMP) STORED + ); + + INSERT INTO items (id) VALUES + ('01JGSK6X4APE5X5629ESGJBBV8'), -- 2025-01-03T21:23:17.770Z + ('01ARZ3NDEKTSV4RRFFQ69G5FAV'); -- 2016-07-30T23:54:10.259Z + ''; + + makeTestFor = + package: + makeTest { + name = "pgx_ulid-${package.name}"; + meta = with lib.maintainers; { + maintainers = [ myypo ]; + }; + + nodes.machine = + { ... }: + { + services.postgresql = { + inherit package; + enable = true; + enableJIT = lib.hasInfix "-jit-" package.name; + extensions = + ps: with ps; [ + pgx_ulid + ]; + settings.shared_preload_libraries = "pgx_ulid"; + }; + }; + + testScript = + { nodes, ... }: + let + inherit (nodes.machine.services.postgresql.package.pkgs) pgx_ulid; + in + '' + def check_count(statement, lines): + return 'test $(sudo -u postgres psql postgres -tAc "{}"|wc -l) -eq {}'.format( + statement, lines + ) + + machine.start() + machine.wait_for_unit("postgresql") + + with subtest("Postgresql with extension ulid is available just after unit start"): + machine.succeed(check_count("SELECT * FROM pg_available_extensions WHERE name = 'ulid' AND default_version = '${pgx_ulid.version}';", 1)) + + machine.succeed("sudo -u postgres psql -f ${test-sql}") + + machine.succeed(check_count("SELECT gen_ulid();", 1)) + machine.succeed(check_count("SELECT gen_monotonic_ulid();", 1)) + + with subtest("Can generate default ULIDs and query by ULID-derived timestamps"): + machine.succeed(""" + sudo -u postgres \\ + psql -c "SELECT id FROM items ORDER BY created_at DESC LIMIT 1;" \\ + | grep "01JGSK6X4APE5X5629ESGJBBV8" + """) + machine.succeed(""" + sudo -u postgres \\ + psql -c "INSERT INTO items DEFAULT VALUES;" + """) + machine.succeed(""" + sudo -u postgres \\ + psql -c "SELECT id FROM items ORDER BY created_at ASC LIMIT 1;" \\ + | grep "01ARZ3NDEKTSV4RRFFQ69G5FAV" + """) + + machine.shutdown() + ''; + }; +in +lib.recurseIntoAttrs ( + lib.concatMapAttrs (n: p: { ${n} = makeTestFor p; }) ( + lib.filterAttrs (_: p: !p.pkgs.pgx_ulid.meta.broken) pkgs.postgresqlVersions + ) + // { + passthru.override = p: makeTestFor p; + } +) diff --git a/pkgs/servers/sql/postgresql/ext/default.nix b/pkgs/servers/sql/postgresql/ext/default.nix index c9cedba780c8..7c346fbfd0de 100644 --- a/pkgs/servers/sql/postgresql/ext/default.nix +++ b/pkgs/servers/sql/postgresql/ext/default.nix @@ -93,6 +93,8 @@ in { pgrouting = super.callPackage ./pgrouting.nix { }; + pgx_ulid = super.callPackage ./pgx_ulid.nix { }; + pg_partman = super.callPackage ./pg_partman.nix { }; pg_relusage = super.callPackage ./pg_relusage.nix { }; diff --git a/pkgs/servers/sql/postgresql/ext/pgx_ulid.nix b/pkgs/servers/sql/postgresql/ext/pgx_ulid.nix new file mode 100644 index 000000000000..802fe834142a --- /dev/null +++ b/pkgs/servers/sql/postgresql/ext/pgx_ulid.nix @@ -0,0 +1,50 @@ +{ + lib, + buildPgrxExtension, + fetchFromGitHub, + nix-update-script, + nixosTests, + postgresql, + util-linux, +}: +buildPgrxExtension rec { + inherit postgresql; + + pname = "pgx_ulid"; + version = "0.2.0"; + + src = fetchFromGitHub { + owner = "pksunkara"; + repo = "pgx_ulid"; + tag = "v${version}"; + hash = "sha256-VdLWwkUA0sVs5Z/Lyf5oTRhcHVzPmhgnYQhIM8MWJ0c="; + }; + + cargoHash = "sha256-Gn+SjzGaxnGKJYI9+WyE1+TzlF/2Ne43aKbXrSzfQKM="; + + postInstall = '' + # Upstream renames the extension when packaging + # https://github.com/pksunkara/pgx_ulid/blob/084778c3e2af08d16ec5ec3ef4e8f345ba0daa33/.github/workflows/release.yml#L81 + # Upgrade scripts should be added later, so we also rename them with wildcard + # https://github.com/pksunkara/pgx_ulid/issues/49 + ${util-linux}/bin/rename ${pname} ulid $out/share/postgresql/extension/${pname}* + ''; + + # pgrx tests try to install the extension into postgresql nix store + doCheck = false; + + passthru = { + updateScript = nix-update-script { }; + tests = nixosTests.postgresql.pgx_ulid.passthru.override postgresql; + }; + + meta = { + # Support for PostgreSQL 13 was removed in 0.2.0: https://github.com/pksunkara/pgx_ulid/blob/084778c3e2af08d16ec5ec3ef4e8f345ba0daa33/CHANGELOG.md?plain=1#L6 + broken = (lib.versionOlder postgresql.version "14") && (lib.versionAtLeast version "0.2.0"); + description = "ULID Postgres extension written in Rust"; + homepage = "https://github.com/pksunkara/pgx_ulid"; + changelog = "https://github.com/pksunkara/pgx_ulid/blob/v${version}/CHANGELOG.md"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ myypo ]; + }; +} From 70d01826df529e11cdadf5be0e150cace938f289 Mon Sep 17 00:00:00 2001 From: myypo Date: Mon, 6 Jan 2025 22:08:42 +0200 Subject: [PATCH 2/4] remove redundant pkg version check for broken attribute --- pkgs/servers/sql/postgresql/ext/pgx_ulid.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/servers/sql/postgresql/ext/pgx_ulid.nix b/pkgs/servers/sql/postgresql/ext/pgx_ulid.nix index 802fe834142a..43e48542d87d 100644 --- a/pkgs/servers/sql/postgresql/ext/pgx_ulid.nix +++ b/pkgs/servers/sql/postgresql/ext/pgx_ulid.nix @@ -40,7 +40,7 @@ buildPgrxExtension rec { meta = { # Support for PostgreSQL 13 was removed in 0.2.0: https://github.com/pksunkara/pgx_ulid/blob/084778c3e2af08d16ec5ec3ef4e8f345ba0daa33/CHANGELOG.md?plain=1#L6 - broken = (lib.versionOlder postgresql.version "14") && (lib.versionAtLeast version "0.2.0"); + broken = lib.versionOlder postgresql.version "14"; description = "ULID Postgres extension written in Rust"; homepage = "https://github.com/pksunkara/pgx_ulid"; changelog = "https://github.com/pksunkara/pgx_ulid/blob/v${version}/CHANGELOG.md"; From e66f498baf4ee4001f4e333a393a1bd3f35e1c44 Mon Sep 17 00:00:00 2001 From: myypo Date: Mon, 6 Jan 2025 23:35:14 +0200 Subject: [PATCH 3/4] remove nixos tests --- nixos/tests/postgresql/default.nix | 1 - nixos/tests/postgresql/pgx_ulid.nix | 93 -------------------- pkgs/servers/sql/postgresql/ext/pgx_ulid.nix | 2 - 3 files changed, 96 deletions(-) delete mode 100644 nixos/tests/postgresql/pgx_ulid.nix diff --git a/nixos/tests/postgresql/default.nix b/nixos/tests/postgresql/default.nix index 3aa7db540397..4fe7e7a37e7e 100644 --- a/nixos/tests/postgresql/default.nix +++ b/nixos/tests/postgresql/default.nix @@ -20,7 +20,6 @@ in anonymizer = importWithArgs ./anonymizer.nix; pgjwt = importWithArgs ./pgjwt.nix; pgvecto-rs = importWithArgs ./pgvecto-rs.nix; - pgx_ulid = importWithArgs ./pgx_ulid.nix; timescaledb = importWithArgs ./timescaledb.nix; tsja = importWithArgs ./tsja.nix; wal2json = importWithArgs ./wal2json.nix; diff --git a/nixos/tests/postgresql/pgx_ulid.nix b/nixos/tests/postgresql/pgx_ulid.nix deleted file mode 100644 index e6ee9a129632..000000000000 --- a/nixos/tests/postgresql/pgx_ulid.nix +++ /dev/null @@ -1,93 +0,0 @@ -{ - pkgs, - makeTest, -}: -let - inherit (pkgs) lib; - - test-sql = pkgs.writeText "postgresql-test" '' - CREATE EXTENSION ulid; - - CREATE TABLE items ( - id ulid NOT NULL DEFAULT gen_monotonic_ulid() PRIMARY KEY, - created_at TIMESTAMP GENERATED ALWAYS AS (id::TIMESTAMP) STORED - ); - - INSERT INTO items (id) VALUES - ('01JGSK6X4APE5X5629ESGJBBV8'), -- 2025-01-03T21:23:17.770Z - ('01ARZ3NDEKTSV4RRFFQ69G5FAV'); -- 2016-07-30T23:54:10.259Z - ''; - - makeTestFor = - package: - makeTest { - name = "pgx_ulid-${package.name}"; - meta = with lib.maintainers; { - maintainers = [ myypo ]; - }; - - nodes.machine = - { ... }: - { - services.postgresql = { - inherit package; - enable = true; - enableJIT = lib.hasInfix "-jit-" package.name; - extensions = - ps: with ps; [ - pgx_ulid - ]; - settings.shared_preload_libraries = "pgx_ulid"; - }; - }; - - testScript = - { nodes, ... }: - let - inherit (nodes.machine.services.postgresql.package.pkgs) pgx_ulid; - in - '' - def check_count(statement, lines): - return 'test $(sudo -u postgres psql postgres -tAc "{}"|wc -l) -eq {}'.format( - statement, lines - ) - - machine.start() - machine.wait_for_unit("postgresql") - - with subtest("Postgresql with extension ulid is available just after unit start"): - machine.succeed(check_count("SELECT * FROM pg_available_extensions WHERE name = 'ulid' AND default_version = '${pgx_ulid.version}';", 1)) - - machine.succeed("sudo -u postgres psql -f ${test-sql}") - - machine.succeed(check_count("SELECT gen_ulid();", 1)) - machine.succeed(check_count("SELECT gen_monotonic_ulid();", 1)) - - with subtest("Can generate default ULIDs and query by ULID-derived timestamps"): - machine.succeed(""" - sudo -u postgres \\ - psql -c "SELECT id FROM items ORDER BY created_at DESC LIMIT 1;" \\ - | grep "01JGSK6X4APE5X5629ESGJBBV8" - """) - machine.succeed(""" - sudo -u postgres \\ - psql -c "INSERT INTO items DEFAULT VALUES;" - """) - machine.succeed(""" - sudo -u postgres \\ - psql -c "SELECT id FROM items ORDER BY created_at ASC LIMIT 1;" \\ - | grep "01ARZ3NDEKTSV4RRFFQ69G5FAV" - """) - - machine.shutdown() - ''; - }; -in -lib.recurseIntoAttrs ( - lib.concatMapAttrs (n: p: { ${n} = makeTestFor p; }) ( - lib.filterAttrs (_: p: !p.pkgs.pgx_ulid.meta.broken) pkgs.postgresqlVersions - ) - // { - passthru.override = p: makeTestFor p; - } -) diff --git a/pkgs/servers/sql/postgresql/ext/pgx_ulid.nix b/pkgs/servers/sql/postgresql/ext/pgx_ulid.nix index 43e48542d87d..7fdd04a4285e 100644 --- a/pkgs/servers/sql/postgresql/ext/pgx_ulid.nix +++ b/pkgs/servers/sql/postgresql/ext/pgx_ulid.nix @@ -3,7 +3,6 @@ buildPgrxExtension, fetchFromGitHub, nix-update-script, - nixosTests, postgresql, util-linux, }: @@ -35,7 +34,6 @@ buildPgrxExtension rec { passthru = { updateScript = nix-update-script { }; - tests = nixosTests.postgresql.pgx_ulid.passthru.override postgresql; }; meta = { From 5d524ce3764ea99d218b3d8d42ae14904bed5eae Mon Sep 17 00:00:00 2001 From: myypo Date: Mon, 6 Jan 2025 23:41:12 +0200 Subject: [PATCH 4/4] hardcode the renamed extension files --- pkgs/servers/sql/postgresql/ext/pgx_ulid.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/servers/sql/postgresql/ext/pgx_ulid.nix b/pkgs/servers/sql/postgresql/ext/pgx_ulid.nix index 7fdd04a4285e..6d64689c0863 100644 --- a/pkgs/servers/sql/postgresql/ext/pgx_ulid.nix +++ b/pkgs/servers/sql/postgresql/ext/pgx_ulid.nix @@ -26,7 +26,7 @@ buildPgrxExtension rec { # https://github.com/pksunkara/pgx_ulid/blob/084778c3e2af08d16ec5ec3ef4e8f345ba0daa33/.github/workflows/release.yml#L81 # Upgrade scripts should be added later, so we also rename them with wildcard # https://github.com/pksunkara/pgx_ulid/issues/49 - ${util-linux}/bin/rename ${pname} ulid $out/share/postgresql/extension/${pname}* + ${util-linux}/bin/rename pgx_ulid ulid $out/share/postgresql/extension/pgx_ulid* ''; # pgrx tests try to install the extension into postgresql nix store