|
10 | 10 | # |
11 | 11 | # - `installedExtension`: Function to get the installed extension package for a PostgreSQL version |
12 | 12 | # - `mkDefaultNixosTestNode`: Creates a NixOS test node with standard PostgreSQL setup |
| 13 | +# - `psql_15`: PostgreSQL 15 package with the tested extension |
| 14 | +# - `psql_17`: PostgreSQL 17 package with the tested extension |
| 15 | +# - `versions`: Function to get available extension versions for a PostgreSQL version |
| 16 | +# - `mkPostgresqlWithExtensions`: Builds a PostgreSQL package with a list of extensions |
13 | 17 | # |
14 | 18 | # ## Examples |
15 | 19 | # |
|
55 | 59 | ... |
56 | 60 | }: |
57 | 61 | { |
58 | | - virtualisation = { |
59 | | - forwardPorts = [ |
60 | | - { |
61 | | - from = "host"; |
62 | | - host.port = 13022; |
63 | | - guest.port = 22; |
64 | | - } |
65 | | - ]; |
66 | | - }; |
67 | | - services.openssh = { |
68 | | - enable = true; |
69 | | - }; |
70 | | - |
71 | 62 | services.postgresql = { |
72 | 63 | enable = true; |
73 | 64 | package = psql_15; |
@@ -137,4 +128,63 @@ rec { |
137 | 128 | }; |
138 | 129 | }; |
139 | 130 | }; |
| 131 | + |
| 132 | + # Build a PostgreSQL package that includes a list of extensions. |
| 133 | + # |
| 134 | + # The included extension can be accessed via the `testedExtension` attribute. |
| 135 | + # |
| 136 | + mkPostgresqlWithExtensions = |
| 137 | + postgresql: # The PostgreSQL package to extend with the extension |
| 138 | + extensions: # A list of extension packages to include, the first will be the testedExtension |
| 139 | + let |
| 140 | + majorVersion = pkgs.lib.versions.major postgresql.version; |
| 141 | + # Build paths for all extensions |
| 142 | + extensionPaths = map ( |
| 143 | + ext: self.legacyPackages.${pkgs.system}."psql_${majorVersion}".exts."${ext}" |
| 144 | + ) extensions; |
| 145 | + # Automatically add orioledb if building for OrioleDB |
| 146 | + orioledbPaths = |
| 147 | + pkgs.lib.optional postgresql.isOrioleDB |
| 148 | + self.legacyPackages.${pkgs.system}."psql_orioledb-17".exts.orioledb; |
| 149 | + pkg = pkgs.buildEnv { |
| 150 | + name = "postgresql-${majorVersion}-${testedExtensionName}"; |
| 151 | + paths = [ |
| 152 | + postgresql |
| 153 | + postgresql.lib |
| 154 | + ] |
| 155 | + ++ extensionPaths |
| 156 | + ++ orioledbPaths; |
| 157 | + passthru = { |
| 158 | + inherit (postgresql) version psqlSchema; |
| 159 | + lib = pkg; |
| 160 | + testedExtension = builtins.head extensionPaths; |
| 161 | + withPackages = _: pkg; |
| 162 | + withJIT = pkg; |
| 163 | + withoutJIT = pkg; |
| 164 | + installedExtensions = [ (installedExtension majorVersion) ]; |
| 165 | + }; |
| 166 | + nativeBuildInputs = [ pkgs.makeWrapper ]; |
| 167 | + pathsToLink = [ |
| 168 | + "/" |
| 169 | + "/bin" |
| 170 | + "/lib" |
| 171 | + ]; |
| 172 | + postBuild = '' |
| 173 | + wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib |
| 174 | + wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib |
| 175 | + wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib |
| 176 | + ''; |
| 177 | + }; |
| 178 | + in |
| 179 | + pkg; |
| 180 | + psql_15 = mkPostgresqlWithExtensions self.packages.${pkgs.system}.postgresql_15 [ |
| 181 | + testedExtensionName |
| 182 | + ]; |
| 183 | + psql_17 = mkPostgresqlWithExtensions self.packages.${pkgs.system}.postgresql_17 [ |
| 184 | + testedExtensionName |
| 185 | + ]; |
| 186 | + # Get available extension versions for a specific PostgreSQL major version. |
| 187 | + versions = |
| 188 | + postgresqlMajorVersion: # The PostgreSQL major version (e.g., "15", "17") |
| 189 | + (installedExtension postgresqlMajorVersion).versions; |
140 | 190 | } |
0 commit comments