Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
9ae38a3
Add PostgreSQL 19 (beta1) support
sfc-gh-okalaci Jun 18, 2026
486e72f
ci: match PG19 literally for the temporary pgaudit drop
sfc-gh-okalaci Jun 19, 2026
70442ba
ci: build pgaudit for PG19 from the maintainer's PR branch
sfc-gh-okalaci Jun 19, 2026
c523bf0
docker: build all pgaudit versions in one layer and drop the sources
sfc-gh-okalaci Jun 19, 2026
56093e9
pg_extension_base: restore tranche init order
sfc-gh-okalaci Jun 19, 2026
6227db9
pg_extension_base: define PG_SIG_IGN shim for <= 18
sfc-gh-okalaci Jun 19, 2026
ef07252
pg_lake_engine: format pg_plan_query call one arg per line
sfc-gh-okalaci Jun 19, 2026
7f47dce
tests: drop the PG19 version constant
sfc-gh-okalaci Jun 19, 2026
87ffea3
tests: drop pg19 branding from partitioned COPY test names
sfc-gh-okalaci Jun 19, 2026
998a9d8
tests: verify REPACK leaves pg_lake table contents intact
sfc-gh-okalaci Jun 19, 2026
6042462
tests: clarify protocol negotiation docstring
sfc-gh-okalaci Jun 19, 2026
611bf7d
ci: keep pgaudit out of the PG19 preload
sfc-gh-okalaci Jun 19, 2026
0fa7de0
rebase: restore includes lost in the rest_catalog.c split
sfc-gh-okalaci Jun 22, 2026
bf7e3e6
pg_lake_engine: use version-specific pg_plan_query calls
sfc-gh-okalaci Jun 22, 2026
65fb166
pg_lake_copy: define PostgresSupportsJsonCopy as false on < PG19
sfc-gh-okalaci Jun 22, 2026
88c5154
pg_extension_base: include utils/wait_event.h unconditionally
sfc-gh-okalaci Jun 22, 2026
ec1af9f
pg_lake_table: include utils/hsearch.h for HTAB in the catalog header
sfc-gh-okalaci Jun 22, 2026
ab0a534
pg_lake_table: drop empty else branch in iceberg column mapping
sfc-gh-okalaci Jun 22, 2026
4dd6afe
ci: re-enable pgaudit on PG19
sfc-gh-okalaci Jun 23, 2026
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
19 changes: 18 additions & 1 deletion .github/actions/run-test/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,9 @@ runs:
if [ ${{ inputs.installcheck }} == 'true' ]; then
pgduck_server --init_file_path pgduck_server/tests/test_secrets.sql --extensions_dir /tmp/extensions --cache_dir /tmp/cache > /tmp/pgduck_installcheck_logs 2>&1 &

initdb -D /tmp/pg_installcheck_tests -U postgres --set "shared_preload_libraries=pg_extension_base,pg_cron,pg_lake_table,pg_lake_copy,pg_lake,pgaudit,pg_stat_statements" --locale=C.UTF-8 --data-checksums
PRELOAD_LIBS="pg_extension_base,pg_cron,pg_lake_table,pg_lake_copy,pg_lake,pgaudit,pg_stat_statements"

initdb -D /tmp/pg_installcheck_tests -U postgres --set "shared_preload_libraries=$PRELOAD_LIBS" --locale=C.UTF-8 --data-checksums

echo "listen_addresses = 'localhost'" >> /tmp/pg_installcheck_tests/postgresql.conf
echo "max_worker_processes = 100" >> /tmp/pg_installcheck_tests/postgresql.conf
Expand All @@ -116,6 +118,21 @@ runs:
if [ ${{ inputs.installcheck_postgres }} == 'true' ]; then
echo "compute_query_id='regress'" >> /tmp/pg_installcheck_tests/postgresql.conf
echo "pg_lake_table.hide_objects_created_by_lake=true" >> /tmp/pg_installcheck_tests/postgresql.conf
# Fully defer JSON COPY to Postgres for the upstream regression
# suite. The surgical "auto" default already routes plain local
# COPY TO json to Postgres, but pg_lake still keeps COPY FROM json
# and compression (things Postgres cannot do) -- and those diverge
# from the upstream expected output, which is real (not whitespace)
# and is covered by pg_lake_copy's own tests rather than
# PostgreSQL's:
# - pg_lake accepts COPY FROM ... (format json), which Postgres
# rejects, so the inline-data copy test desyncs;
# - it rejects the ENCODING option and mishandles a non-UTF8
# client_encoding (copyencoding);
# - it frames FORCE_ARRAY output differently (tabs/trailing comma).
# Forcing json_copy_mode=postgres makes pg_lake step fully aside so
# those upstream tests stay byte-identical to Postgres.
echo "pg_lake_copy.json_copy_mode=postgres" >> /tmp/pg_installcheck_tests/postgresql.conf
Comment thread
sfc-gh-dachristensen marked this conversation as resolved.
fi

echo "host postgres postgres 127.0.0.1/32 md5" >> /tmp/pg_installcheck_tests/pg_hba.conf
Expand Down
18 changes: 9 additions & 9 deletions .github/workflows/pytest_all.yml
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,6 @@ jobs:
build-and-install-almalinux:
needs: build-image-almalinux
runs-on: ubuntu-latest

container:
image: ghcr.io/snowflake-labs/pg-lake-ci-pg-almalinux:${{ needs.build-image-almalinux.outputs.tag }}
options: --user 1001 --shm-size=128MB
Expand All @@ -92,8 +91,9 @@ jobs:
password: ${{ secrets.github_token }}

strategy:
fail-fast: false
matrix:
pg_version: [16, 17, 18]
pg_version: [16, 17, 18, 19]

steps:
- uses: actions/checkout@v4
Expand All @@ -108,7 +108,6 @@ jobs:
build-and-install-debian:
needs: build-image-debian
runs-on: ubuntu-latest

container:
image: ghcr.io/snowflake-labs/pg-lake-ci-pg-debian:${{ needs.build-image-debian.outputs.tag }}
options: --user 1001 --shm-size=128MB
Expand All @@ -117,8 +116,9 @@ jobs:
password: ${{ secrets.github_token }}

strategy:
fail-fast: false
matrix:
pg_version: [16, 17, 18]
pg_version: [16, 17, 18, 19]

steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -151,7 +151,7 @@ jobs:
strategy:
fail-fast: false
matrix:
pg_version: [17, 18]
pg_version: [17, 18, 19]
test_make_target:
- 'check-duckdb_pglake'
- 'check-avro'
Expand Down Expand Up @@ -189,7 +189,7 @@ jobs:
strategy:
fail-fast: false
matrix:
pg_version: [17, 18]
pg_version: [17, 18, 19]
test_make_target:
- 'check-pg_lake_table'
# helps splitting tests into 5 parallel jobs
Expand Down Expand Up @@ -257,7 +257,7 @@ jobs:
strategy:
fail-fast: false
matrix:
pg_version: [16, 17, 18]
pg_version: [16, 17, 18, 19]
test_make_target:
- 'installcheck-postgres'
- 'installcheck-postgres-with_extensions_created'
Expand Down Expand Up @@ -329,7 +329,7 @@ jobs:
strategy:
fail-fast: false
matrix:
pg_version: [17, 18]
pg_version: [17, 18, 19]
test_make_target:
- 'check-isolation_pg_lake_table'

Expand Down Expand Up @@ -358,7 +358,7 @@ jobs:
strategy:
fail-fast: false
matrix:
pg_version_pairs: ["16-17", "17-18", "16-18"]
pg_version_pairs: ["16-17", "17-18", "16-18", "17-19", "18-19", "16-19"]
test_make_target:
- 'check-pg_lake_table-upgrade'

Expand Down
63 changes: 46 additions & 17 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,20 @@ ARG BASE_IMAGE_TAG

# Set environment variables for non-interactive installations and PostgreSQL/PostGIS versions
ENV PG_LAKE_REF=main
ARG PG16_VERSION=16.11
ARG PG17_VERSION=17.7
ARG PG18_VERSION=18.1
ARG POSTGIS_VERSION=3.6.0
ARG PG16_VERSION=16.14
ARG PG17_VERSION=17.10
ARG PG18_VERSION=18.4
ARG PG19_VERSION=19beta1
ARG POSTGIS_VERSION=3.6.3
ARG PGAUDIT16_VERSION=REL_16_STABLE
ARG PGAUDIT17_VERSION=REL_17_STABLE
ARG PGAUDIT18_VERSION=REL_18_STABLE
# pgaudit has no PG19 release yet, so build the maintainer's PG19 support branch
# (dwsteele/pgaudit#317, dev-pg19). It now fixes the SQL/PGQ graph_table audit
# crash (commit ffbae89), so pgaudit can stay preloaded on PG19 like the other
# versions. Switch to REL_19_STABLE once it is tagged.
ARG PGAUDIT19_REPO=dwsteele/pgaudit
ARG PGAUDIT19_VERSION=dev-pg19
Comment on lines +24 to +25

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
ARG PGAUDIT19_REPO=dwsteele/pgaudit
ARG PGAUDIT19_VERSION=dev-pg19
ARG PGAUDIT19_VERSION=REL_19_STABLE


# Install build dependencies
RUN if [ "$BASE_IMAGE_OS" = "almalinux" ]; then \
Expand All @@ -28,6 +35,7 @@ RUN if [ "$BASE_IMAGE_OS" = "almalinux" ]; then \
ninja-build \
wget \
git \
bzip2 \
readline-devel \
zlib-devel \
flex \
Expand Down Expand Up @@ -73,6 +81,7 @@ RUN if [ "$BASE_IMAGE_OS" = "debian" ]; then \
apt-get update \
&& apt-get install -y \
build-essential \
bzip2 \
cmake \
ninja-build \
libreadline-dev \
Expand Down Expand Up @@ -128,7 +137,8 @@ RUN if [ "$BASE_IMAGE_OS" = "debian" ]; then \
wget https://download.oracle.com/java/21/latest/jdk-21_linux-${ARCH}_bin.tar.gz && \
mkdir -p /usr/lib/jvm && \
tar -xzf jdk-21_linux-${ARCH}_bin.tar.gz -C /usr/lib/jvm/ && \
mv /usr/lib/jvm/jdk-21.0.10 /usr/lib/jvm/java-21-openjdk && \
JDK_DIR=$(tar -tzf jdk-21_linux-${ARCH}_bin.tar.gz | head -1 | cut -d/ -f1) && \
mv "/usr/lib/jvm/${JDK_DIR}" /usr/lib/jvm/java-21-openjdk && \
rm jdk-21_linux-${ARCH}_bin.tar.gz; \
fi

Expand Down Expand Up @@ -157,26 +167,31 @@ RUN echo "postgres ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/postgres
USER 1001:1001
WORKDIR /home/postgres

# Download PostgreSQL 16, 17, 18, PostGIS
# Download PostgreSQL 16, 17, 18, 19, PostGIS
RUN wget https://ftp.postgresql.org/pub/source/v$PG16_VERSION/postgresql-$PG16_VERSION.tar.gz && \
wget https://ftp.postgresql.org/pub/source/v$PG17_VERSION/postgresql-$PG17_VERSION.tar.gz && \
wget https://ftp.postgresql.org/pub/source/v$PG18_VERSION/postgresql-$PG18_VERSION.tar.gz && \
wget https://ftp.postgresql.org/pub/source/v$PG19_VERSION/postgresql-$PG19_VERSION.tar.bz2 && \
wget https://download.osgeo.org/postgis/source/postgis-$POSTGIS_VERSION.tar.gz && \
wget https://github.com/pgaudit/pgaudit/archive/refs/heads/$PGAUDIT16_VERSION.tar.gz && \
wget https://github.com/pgaudit/pgaudit/archive/refs/heads/$PGAUDIT17_VERSION.tar.gz && \
wget https://github.com/pgaudit/pgaudit/archive/refs/heads/$PGAUDIT18_VERSION.tar.gz && \
wget https://github.com/$PGAUDIT19_REPO/archive/refs/heads/$PGAUDIT19_VERSION.tar.gz && \

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
wget https://github.com/$PGAUDIT19_REPO/archive/refs/heads/$PGAUDIT19_VERSION.tar.gz && \
wget https://github.com/pgaudit/pgaudit/archive/refs/heads/$PGAUDIT19_VERSION.tar.gz && \

tar -xzf postgresql-$PG16_VERSION.tar.gz && rm postgresql-$PG16_VERSION.tar.gz && \
tar -xzf postgresql-$PG17_VERSION.tar.gz && rm postgresql-$PG17_VERSION.tar.gz && \
tar -xzf postgresql-$PG18_VERSION.tar.gz && rm postgresql-$PG18_VERSION.tar.gz && \
tar -xjf postgresql-$PG19_VERSION.tar.bz2 && rm postgresql-$PG19_VERSION.tar.bz2 && \
tar -xzf $PGAUDIT16_VERSION.tar.gz && rm $PGAUDIT16_VERSION.tar.gz && \
tar -xzf $PGAUDIT17_VERSION.tar.gz && rm $PGAUDIT17_VERSION.tar.gz && \
tar -xzf $PGAUDIT18_VERSION.tar.gz && rm $PGAUDIT18_VERSION.tar.gz && \
tar -xzf $PGAUDIT19_VERSION.tar.gz && rm $PGAUDIT19_VERSION.tar.gz && \
tar -xzf postgis-$POSTGIS_VERSION.tar.gz && rm postgis-$POSTGIS_VERSION.tar.gz

ARG PG_COMPILE_FLAGS_16="--enable-debug --enable-cassert --enable-depend --with-openssl --with-libxml --with-libxslt --with-icu --with-uuid=ossp --with-lz4 --with-pam"
# PG17 has asserts disabled
ARG PG_COMPILE_FLAGS_17="--enable-debug --enable-depend --with-openssl --with-libxml --with-libxslt --with-icu --with-uuid=ossp --with-lz4 --enable-injection-points --with-pam"
ARG PG_COMPILE_FLAGS_18="--enable-debug --enable-cassert --enable-depend --with-openssl --with-libxml --with-libxslt --with-icu --with-uuid=ossp --with-lz4 --enable-injection-points --with-pam"
ARG PG_COMPILE_FLAGS_19="--enable-debug --enable-cassert --enable-depend --with-openssl --with-libxml --with-libxslt --with-icu --with-uuid=ossp --with-lz4 --enable-injection-points --with-pam"
ENV PGBASEDIR=/home/postgres

# Compile and install PostgreSQL 16 with pgindent
Expand Down Expand Up @@ -217,31 +232,44 @@ RUN cd postgresql-$PG18_VERSION && \
(cd contrib && make -j `nproc` install) && \
cd .. && rm -rf postgresql-$PG18_VERSION*

# Compile and install PG AUDIT 16
RUN cd pgaudit-$PGAUDIT16_VERSION && \
make -j `nproc` install USE_PGXS=1 PG_CONFIG=$PGBASEDIR/pgsql-16/bin/pg_config

# Compile and install PG AUDIT 17
RUN cd pgaudit-$PGAUDIT17_VERSION && \
make -j `nproc` install USE_PGXS=1 PG_CONFIG=$PGBASEDIR/pgsql-17/bin/pg_config
# Compile and install PostgreSQL 19 with pgindent
RUN cd postgresql-$PG19_VERSION && \
./configure --prefix=$PGBASEDIR/pgsql-19 $PG_COMPILE_FLAGS_19 && \
make -j `nproc` && make install && \
make -C src/test/isolation install && \
make -C src/test/modules/injection_points install && \
make -j `nproc` -C src/tools/pg_bsd_indent install && \
cp src/tools/pgindent/pgindent $PGBASEDIR/pgsql-19/bin/ && \
cp src/tools/pgindent/typedefs.list $PGBASEDIR/pgsql-19/share/ && \
mkdir -pv $PGBASEDIR/pgsql-19/regress && cp -r src/test/regress/* $PGBASEDIR/pgsql-19/regress && \
(cd contrib && make -j `nproc` install) && \
cd .. && rm -rf postgresql-$PG19_VERSION*

# Compile and install PG AUDIT 18
RUN cd pgaudit-$PGAUDIT18_VERSION && \
make -j `nproc` install USE_PGXS=1 PG_CONFIG=$PGBASEDIR/pgsql-18/bin/pg_config
# Compile and install pgaudit for every PostgreSQL version, then drop the sources
RUN (cd pgaudit-$PGAUDIT16_VERSION && make -j `nproc` install USE_PGXS=1 PG_CONFIG=$PGBASEDIR/pgsql-16/bin/pg_config) && \
(cd pgaudit-$PGAUDIT17_VERSION && make -j `nproc` install USE_PGXS=1 PG_CONFIG=$PGBASEDIR/pgsql-17/bin/pg_config) && \
(cd pgaudit-$PGAUDIT18_VERSION && make -j `nproc` install USE_PGXS=1 PG_CONFIG=$PGBASEDIR/pgsql-18/bin/pg_config) && \
(cd pgaudit-$PGAUDIT19_VERSION && make -j `nproc` install USE_PGXS=1 PG_CONFIG=$PGBASEDIR/pgsql-19/bin/pg_config) && \
rm -rf pgaudit-$PGAUDIT16_VERSION pgaudit-$PGAUDIT17_VERSION pgaudit-$PGAUDIT18_VERSION pgaudit-$PGAUDIT19_VERSION

# Compile and install PostGIS
RUN cd postgis-$POSTGIS_VERSION && \
./configure --prefix=$PGBASEDIR/pgsql-16/ --with-pgconfig=$PGBASEDIR/pgsql-16/bin/pg_config && make -j `nproc` && make install && make clean && \
./configure --prefix=$PGBASEDIR/pgsql-17/ --with-pgconfig=$PGBASEDIR/pgsql-17/bin/pg_config && make -j `nproc` && make install && make clean && \
./configure --prefix=$PGBASEDIR/pgsql-18/ --with-pgconfig=$PGBASEDIR/pgsql-18/bin/pg_config && make -j `nproc` && make install && make clean && \
./configure --prefix=$PGBASEDIR/pgsql-19/ --with-pgconfig=$PGBASEDIR/pgsql-19/bin/pg_config && make -j `nproc` && make install && make clean && \
cd .. && rm -rf postgis-$POSTGIS_VERSION*

# Compile and install pg_cron
RUN git clone https://github.com/citusdata/pg_cron.git && \
# Use CyberDem0n's postgresql-19 branch (PR citusdata/pg_cron#430) until the

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sfc-gh-mslot do you have plans to merge that branch :)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Heh, I'd thought the same... 😁

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like this is in main now...

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i.e., we can revert this hunk.

# PG19 support patch is merged upstream. The patch is backward compatible
# with PG 16/17/18, so we can build all four from the same source.
RUN git clone -b postgresql-19 https://github.com/CyberDem0n/pg_cron.git && \
cd pg_cron && \
make install PG_CONFIG=$PGBASEDIR/pgsql-16/bin/pg_config && make clean PG_CONFIG=$PGBASEDIR/pgsql-16/bin/pg_config && \
make install PG_CONFIG=$PGBASEDIR/pgsql-17/bin/pg_config && make clean PG_CONFIG=$PGBASEDIR/pgsql-17/bin/pg_config && \
make install PG_CONFIG=$PGBASEDIR/pgsql-18/bin/pg_config && make clean PG_CONFIG=$PGBASEDIR/pgsql-18/bin/pg_config && \
make install PG_CONFIG=$PGBASEDIR/pgsql-19/bin/pg_config && make clean PG_CONFIG=$PGBASEDIR/pgsql-19/bin/pg_config && \
cd .. && rm -rf pg_cron

# Compile and install pg_incremental
Expand All @@ -250,6 +278,7 @@ RUN git clone https://github.com/CrunchyData/pg_incremental.git && \
make install PG_CONFIG=$PGBASEDIR/pgsql-16/bin/pg_config && make clean PG_CONFIG=$PGBASEDIR/pgsql-16/bin/pg_config && \
make install PG_CONFIG=$PGBASEDIR/pgsql-17/bin/pg_config && make clean PG_CONFIG=$PGBASEDIR/pgsql-17/bin/pg_config && \
make install PG_CONFIG=$PGBASEDIR/pgsql-18/bin/pg_config && make clean PG_CONFIG=$PGBASEDIR/pgsql-18/bin/pg_config && \
make install PG_CONFIG=$PGBASEDIR/pgsql-19/bin/pg_config && make clean PG_CONFIG=$PGBASEDIR/pgsql-19/bin/pg_config && \
cd .. && rm -rf pg_incremental

# Install vcpkg as postgres user
Expand Down
6 changes: 4 additions & 2 deletions docker/LOCAL_DEV.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ You can customize builds using these variables (can be set as environment variab

| Variable | Default | Description | Example |
|----------|---------|-------------|---------|
| `PG_MAJOR` | `18` | PostgreSQL major version (16, 17, or 18) | `PG_MAJOR=17` |
| `PG_MAJOR` | `18` | PostgreSQL major version (16, 17, 18, or 19) | `PG_MAJOR=17` |
| `BASE_IMAGE_OS` | `almalinux` | Base OS (almalinux or debian) | `BASE_IMAGE_OS=debian` |
| `BASE_IMAGE_TAG` | `9` | Base OS version tag | `BASE_IMAGE_TAG=12` |
| `VERSION` | `latest` | Image version tag (for registry) | `VERSION=v1.0.0` |
Expand Down Expand Up @@ -311,7 +311,7 @@ task compose:up PG_MAJOR=16
Create a `.env` file in the `docker` directory:

```env
# PostgreSQL Version (16, 17, or 18)
# PostgreSQL Version (16, 17, 18, or 19)
PG_MAJOR=18

# AWS Profile for LocalStack (optional)
Expand Down Expand Up @@ -559,6 +559,7 @@ Each PostgreSQL version uses its own buildx builder:
- PG 16: `pg_lake_builder_pg16`
- PG 17: `pg_lake_builder_pg17`
- PG 18: `pg_lake_builder_pg18`
- PG 19: `pg_lake_builder_pg19`

This prevents cache conflicts when switching between versions.

Expand Down Expand Up @@ -590,6 +591,7 @@ This prevents cache conflicts when switching between versions.
- PG 16: `pg_lake_builder_pg16`
- PG 17: `pg_lake_builder_pg17`
- PG 18: `pg_lake_builder_pg18`
- PG 19: `pg_lake_builder_pg19`

---

Expand Down
2 changes: 1 addition & 1 deletion docker/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ docker-compose exec pgduck-server psql -p 5332 -h /home/postgres/pgduck_socket_d

### Key Optimizations

✅ **Single Runner PostgreSQL Version**: Builds only PG 16, 17, or 18 (not all 3)
✅ **Single Runner PostgreSQL Version**: Builds only PG 16, 17, 18, or 19 (not all 4)
✅ **Separate Build Stages**: Compilation happens in builder stages
✅ **Minimal Runtime**: Final images contain only binaries and libraries
✅ **Network Retry Logic**: Handles vcpkg download failures
Expand Down
7 changes: 4 additions & 3 deletions docker/TASKFILE.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ This Taskfile uses **per-version buildx builders** to prevent cache conflicts:
- **PG 16**: Uses `pg_lake_builder_pg16`
- **PG 17**: Uses `pg_lake_builder_pg17`
- **PG 18**: Uses `pg_lake_builder_pg18`
- **PG 19**: Uses `pg_lake_builder_pg19`

Each builder maintains its own isolated cache, allowing you to build and switch between PostgreSQL versions without cache conflicts. Builders are created automatically on first use.

Expand Down Expand Up @@ -186,7 +187,7 @@ task compose:restart

### Cache Management

Each PostgreSQL version (16, 17, 18) uses its own isolated buildx builder to prevent cache conflicts:
Each PostgreSQL version (16, 17, 18, 19) uses its own isolated buildx builder to prevent cache conflicts:

```bash
# Clear cache for specific PostgreSQL version
Expand Down Expand Up @@ -239,7 +240,7 @@ You can customize builds using these variables:
| `REGISTRY` | `docker.io` | Container registry (docker.io, ghcr.io, etc.) |
| `IMAGE_OWNER` | `${DOCKER_HUB_USERNAME}` | Registry username/org |
| `VERSION` | `latest` | Image version tag |
| `PG_MAJOR` | `18` | PostgreSQL major version (16, 17, or 18) |
| `PG_MAJOR` | `18` | PostgreSQL major version (16, 17, 18, or 19) |
| `PLATFORMS` | `linux/amd64,linux/arm64` | Target platforms for registry builds |
| `BASE_IMAGE_OS` | `almalinux` | Base OS (almalinux or debian) |
| `BASE_IMAGE_TAG` | `9` | Base OS version |
Expand Down Expand Up @@ -510,7 +511,7 @@ task push:all-pg-versions VERSION=v3.1.0
- `build:pg-lake-postgres` - Build pg_lake_postgres for registry (multi-platform, cache only unless PUSH=true)
- `build:pgduck-server` - Build pgduck_server for registry (multi-platform, cache only unless PUSH=true)
- `build:all` - Build all images (multi-platform, cache only unless PUSH=true)
- `build:all-pg-versions` - Build for PostgreSQL 16, 17, and 18
- `build:all-pg-versions` - Build for PostgreSQL 16, 17, 18, and 19

### Push Tasks

Expand Down
7 changes: 5 additions & 2 deletions docker/Taskfile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ tasks:
}

build:all-pg-versions:
desc: Build all images for PostgreSQL 16, 17, and 18
desc: Build all images for PostgreSQL 16, 17, 18, and 19
silent: true
cmds:
- task: build:all
Expand All @@ -148,9 +148,11 @@ tasks:
vars: { PG_MAJOR: "17", VERSION: "{{.VERSION}}", PUSH: "{{.PUSH}}" }
- task: build:all
vars: { PG_MAJOR: "18", VERSION: "{{.VERSION}}", PUSH: "{{.PUSH}}" }
- task: build:all
vars: { PG_MAJOR: "19", VERSION: "{{.VERSION}}", PUSH: "{{.PUSH}}" }

push:all-pg-versions:
desc: Build and push all images for PostgreSQL 16, 17, and 18
desc: Build and push all images for PostgreSQL 16, 17, 18, and 19
silent: true
cmds:
- task: build:all-pg-versions
Expand All @@ -170,6 +172,7 @@ tasks:
- docker buildx rm pg_lake_builder_pg16 || true
- docker buildx rm pg_lake_builder_pg17 || true
- docker buildx rm pg_lake_builder_pg18 || true
- docker buildx rm pg_lake_builder_pg19 || true
- docker buildx rm pg_lake_builder || true
- echo "✅ All buildx builders removed"
ignore_error: true
Expand Down
Loading
Loading