Skip to content

Commit 81baf1c

Browse files
oliricedarora
andauthored
Restore pg_repack to our extensions list (#886)
* restore pg_repack 1.4.8 for non-superuser cli testing * bump image tag for staging * bump pg_repack for pg16 support * update pg_repack in readme --------- Co-authored-by: Div Arora <[email protected]>
1 parent b27a1fd commit 81baf1c

File tree

9 files changed

+107
-2
lines changed

9 files changed

+107
-2
lines changed

Dockerfile

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ ARG pgsodium_release=3.1.6
2727
ARG pg_graphql_release=1.2.2
2828
ARG pg_stat_monitor_release=1.1.1
2929
ARG pg_jsonschema_release=0.1.4
30+
ARG pg_repack_release=1.4.8
3031
ARG vault_release=0.2.8
3132
ARG groonga_release=12.0.8
3233
ARG pgroonga_release=2.4.0
@@ -736,6 +737,32 @@ RUN --mount=type=cache,target=/ccache,from=public.ecr.aws/supabase/postgres:ccac
736737
# Create debian package
737738
RUN checkinstall -D --install=no --fstrans=no --backup=no --pakdir=/tmp --nodoc
738739

740+
####################
741+
# 27-pg_repack.yml
742+
####################
743+
FROM ccache as pg_repack-source
744+
ARG pg_repack_release
745+
ARG pg_repack_release_checksum
746+
ADD --checksum=${pg_repack_release_checksum} \
747+
"https://github.com/reorg/pg_repack/archive/refs/tags/ver_${pg_repack_release}.tar.gz" \
748+
/tmp/pg_repack.tar.gz
749+
RUN tar -xvf /tmp/pg_repack.tar.gz -C /tmp && \
750+
rm -rf /tmp/pg_repack.tar.gz
751+
# Install build dependencies
752+
RUN apt-get update && apt-get install -y --no-install-recommends \
753+
liblz4-dev \
754+
libz-dev \
755+
libzstd-dev \
756+
libreadline-dev \
757+
&& rm -rf /var/lib/apt/lists/*
758+
# Build from source
759+
WORKDIR /tmp/pg_repack-ver_${pg_repack_release}
760+
ENV USE_PGXS=1
761+
RUN --mount=type=cache,target=/ccache,from=public.ecr.aws/supabase/postgres:ccache \
762+
make -j$(nproc)
763+
# Create debian package
764+
RUN checkinstall -D --install=no --fstrans=no --backup=no --pakdir=/tmp --pkgversion=${pg_repack_release} --nodoc
765+
739766
####################
740767
# 28-pgvector.yml
741768
####################
@@ -827,6 +854,7 @@ COPY --from=vault-source /tmp/*.deb /tmp/
827854
COPY --from=pgroonga-source /tmp/*.deb /tmp/
828855
COPY --from=wrappers /tmp/*.deb /tmp/
829856
COPY --from=hypopg-source /tmp/*.deb /tmp/
857+
COPY --from=pg_repack-source /tmp/*.deb /tmp/
830858
COPY --from=pgvector-source /tmp/*.deb /tmp/
831859
COPY --from=pg_tle-source /tmp/*.deb /tmp/
832860
COPY --from=supautils /tmp/*.deb /tmp/

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ Unmodified Postgres with some useful plugins. Our goal with this repo is not to
2626
| [plv8](https://github.com/plv8/plv8) | [commit](https://github.com/plv8/plv8/commit/bcddd92f71530e117f2f98b92d206dafe824f73a) | Write in Javascript functions in Postgres. |
2727
| [pg_plan_filter](https://github.com/pgexperts/pg_plan_filter) | [commit](https://github.com/pgexperts/pg_plan_filter/commit/5081a7b5cb890876e67d8e7486b6a64c38c9a492) | Only allow statements that fulfill set criteria to be executed. |
2828
| [pg_net](https://github.com/supabase/pg_net) | [v0.6.1](https://github.com/supabase/pg_net/releases/tag/v0.6.1) | Expose the SQL interface for async networking. |
29+
| [pg_repack](https://github.com/reorg/pg_repack) | [ver_1.5.0](https://github.com/reorg/pg_repack/releases/tag/ver_1.5.0) | Tool to remove bloat from tables and indexes
2930
| [rum](https://github.com/postgrespro/rum) | [1.3.13](https://github.com/postgrespro/rum/releases/tag/1.3.13) | An alternative to the GIN index. |
3031
| [pg_hashids](https://github.com/iCyberon/pg_hashids) | [commit](https://github.com/iCyberon/pg_hashids/commit/83398bcbb616aac2970f5e77d93a3200f0f28e74) | Generate unique identifiers from numbers. |
3132
| [pgsodium](https://github.com/michelp/pgsodium) | [3.1.0](https://github.com/michelp/pgsodium/releases/tag/2.0.0) | Modern encryption API using libsodium. |

ansible/files/postgresql_config/supautils.conf.j2

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
# full list: address_standardizer, address_standardizer_data_us, adminpack, amcheck, autoinc, bloom, btree_gin, btree_gist, citext, cube, dblink, dict_int, dict_xsyn, earthdistance, file_fdw, fuzzystrmatch, hstore, http, hypopg, insert_username, intagg, intarray, isn, lo, ltree, moddatetime, old_snapshot, orioledb, pageinspect, pg_buffercache, pg_cron, pg_freespacemap, pg_graphql, pg_hashids, pg_jsonschema, pg_net, pg_prewarm, pg_stat_monitor, pg_stat_statements, pg_surgery, pg_tle, pg_trgm, pg_visibility, pg_walinspect, pgaudit, pgcrypto, pgjwt, pgroonga, pgroonga_database, pgrouting, pgrowlocks, pgsodium, pgstattuple, pgtap, plcoffee, pljava, plls, plpgsql, plpgsql_check, plv8, postgis, postgis_raster, postgis_sfcgal, postgis_tiger_geocoder, postgis_topology, postgres_fdw, refint, rum, seg, sslinfo, supabase_vault, supautils, tablefunc, tcn, timescaledb, tsm_system_rows, tsm_system_time, unaccent, uuid-ossp, vector, wrappers, xml2
1+
# full list: address_standardizer, address_standardizer_data_us, adminpack, amcheck, autoinc, bloom, btree_gin, btree_gist, citext, cube, dblink, dict_int, dict_xsyn, earthdistance, file_fdw, fuzzystrmatch, hstore, http, hypopg, insert_username, intagg, intarray, isn, lo, ltree, moddatetime, old_snapshot, orioledb, pageinspect, pg_buffercache, pg_cron, pg_freespacemap, pg_graphql, pg_hashids, pg_jsonschema, pg_net, pg_prewarm, pg_repack, pg_stat_monitor, pg_stat_statements, pg_surgery, pg_tle, pg_trgm, pg_visibility, pg_walinspect, pgaudit, pgcrypto, pgjwt, pgroonga, pgroonga_database, pgrouting, pgrowlocks, pgsodium, pgstattuple, pgtap, plcoffee, pljava, plls, plpgsql, plpgsql_check, plv8, postgis, postgis_raster, postgis_sfcgal, postgis_tiger_geocoder, postgis_topology, postgres_fdw, refint, rum, seg, sslinfo, supabase_vault, supautils, tablefunc, tcn, timescaledb, tsm_system_rows, tsm_system_time, unaccent, uuid-ossp, vector, wrappers, xml2
22
# omitted because may be unsafe: adminpack, amcheck, file_fdw, lo, old_snapshot, pageinspect, pg_buffercache, pg_freespacemap, pg_prewarm, pg_surgery, pg_visibility, pgstattuple
33
# omitted because deprecated: intagg, xml2
4-
supautils.privileged_extensions = 'address_standardizer, address_standardizer_data_us, autoinc, bloom, btree_gin, btree_gist, citext, cube, dblink, dict_int, dict_xsyn, earthdistance, fuzzystrmatch, hstore, http, hypopg, insert_username, intarray, isn, ltree, moddatetime, orioledb, pg_cron, pg_graphql, pg_hashids, pg_jsonschema, pg_net, pg_stat_monitor, pg_stat_statements, pg_tle, pg_trgm, pg_walinspect, pgaudit, pgcrypto, pgjwt, pgroonga, pgroonga_database, pgrouting, pgrowlocks, pgsodium, pgtap, plcoffee, pljava, plls, plpgsql, plpgsql_check, plv8, postgis, postgis_raster, postgis_sfcgal, postgis_tiger_geocoder, postgis_topology, postgres_fdw, refint, rum, seg, sslinfo, supabase_vault, supautils, tablefunc, tcn, timescaledb, tsm_system_rows, tsm_system_time, unaccent, uuid-ossp, vector, wrappers'
4+
supautils.privileged_extensions = 'address_standardizer, address_standardizer_data_us, autoinc, bloom, btree_gin, btree_gist, citext, cube, dblink, dict_int, dict_xsyn, earthdistance, fuzzystrmatch, hstore, http, hypopg, insert_username, intarray, isn, ltree, moddatetime, orioledb, pg_cron, pg_graphql, pg_hashids, pg_jsonschema, pg_net, pg_repack, pg_stat_monitor, pg_stat_statements, pg_tle, pg_trgm, pg_walinspect, pgaudit, pgcrypto, pgjwt, pgroonga, pgroonga_database, pgrouting, pgrowlocks, pgsodium, pgtap, plcoffee, pljava, plls, plpgsql, plpgsql_check, plv8, postgis, postgis_raster, postgis_sfcgal, postgis_tiger_geocoder, postgis_topology, postgres_fdw, refint, rum, seg, sslinfo, supabase_vault, supautils, tablefunc, tcn, timescaledb, tsm_system_rows, tsm_system_time, unaccent, uuid-ossp, vector, wrappers'
55
supautils.privileged_extensions_custom_scripts_path = '/etc/postgresql-custom/extension-custom-scripts'
66
supautils.privileged_extensions_superuser = 'supabase_admin'
77
supautils.privileged_role = 'postgres'
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# pg_repack
2+
- name: pg_repack - download & install dependencies
3+
apt:
4+
pkg:
5+
- liblz4-dev
6+
- libz-dev
7+
- libzstd-dev
8+
- libreadline-dev
9+
update_cache: yes
10+
install_recommends: no
11+
12+
- name: pg_repack - download latest release
13+
git:
14+
repo: https://github.com/reorg/pg_repack.git
15+
dest: /tmp/pg_repack
16+
version: "ver_{{ pg_repack_release }}"
17+
become: yes
18+
19+
- name: pg_repack - build
20+
make:
21+
chdir: /tmp/pg_repack
22+
params:
23+
USE_PGXS: 1
24+
become: yes
25+
26+
- name: pg_repack - install
27+
make:
28+
chdir: /tmp/pg_repack
29+
target: install
30+
params:
31+
USE_PGXS: 1
32+
become: yes
33+
34+
- name: pg_repack - cleanup
35+
file:
36+
state: absent
37+
path: /tmp/pg_repack
38+

ansible/tasks/setup-extensions.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@
7979

8080
- name: Install hypopg
8181
import_tasks: tasks/postgres-extensions/26-hypopg.yml
82+
83+
- name: Install pg_repack
84+
import_tasks: tasks/postgres-extensions/27-pg_repack.yml
8285

8386
- name: Install pgvector
8487
import_tasks: tasks/postgres-extensions/28-pgvector.yml

ansible/vars.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,9 @@ wrappers_release: "0.2.0"
132132
hypopg_release: "1.3.1"
133133
hypopg_release_checksum: sha256:e7f01ee0259dc1713f318a108f987663d60f3041948c2ada57a94b469565ca8e
134134

135+
pg_repack_release: "1.5.0"
136+
pg_repack_release_checksum: sha256:9a14d6a95bfa29f856aa10538238622c1f351d38eb350b196c06720a878ccc52
137+
135138
pgvector_release: "0.6.0"
136139
pgvector_release_checksum: sha256:b0cf4ba1ab016335ac8fb1cada0d2106235889a194fffeece217c5bda90b2f19
137140

docker/orioledb/Dockerfile

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ ARG pgsodium_release=3.1.6
2727
ARG pg_graphql_release=1.4.2
2828
ARG pg_stat_monitor_release=1.1.1
2929
ARG pg_jsonschema_release=0.2.0
30+
ARG pg_repack_release=1.4.8
3031
ARG vault_release=0.2.8
3132
ARG groonga_release=12.0.8
3233
ARG pgroonga_release=2.4.0
@@ -838,6 +839,32 @@ RUN --mount=type=cache,target=/ccache,from=public.ecr.aws/supabase/postgres:ccac
838839
# Create debian package
839840
RUN checkinstall -D --install=no --fstrans=no --backup=no --pakdir=/tmp --nodoc
840841

842+
####################
843+
# 27-pg_repack.yml
844+
####################
845+
FROM ccache as pg_repack-source
846+
ARG pg_repack_release
847+
ARG pg_repack_release_checksum
848+
ADD --checksum=${pg_repack_release_checksum} \
849+
"https://github.com/reorg/pg_repack/archive/refs/tags/ver_${pg_repack_release}.tar.gz" \
850+
/tmp/pg_repack.tar.gz
851+
RUN tar -xvf /tmp/pg_repack.tar.gz -C /tmp && \
852+
rm -rf /tmp/pg_repack.tar.gz
853+
# Install build dependencies
854+
RUN apt-get update && apt-get install -y --no-install-recommends \
855+
liblz4-dev \
856+
libz-dev \
857+
libzstd-dev \
858+
libreadline-dev \
859+
&& rm -rf /var/lib/apt/lists/*
860+
# Build from source
861+
WORKDIR /tmp/pg_repack-ver_${pg_repack_release}
862+
ENV USE_PGXS=1
863+
RUN --mount=type=cache,target=/ccache,from=public.ecr.aws/supabase/postgres:ccache \
864+
make -j$(nproc)
865+
# Create debian package
866+
RUN checkinstall -D --install=no --fstrans=no --backup=no --pakdir=/tmp --pkgversion=${pg_repack_release} --nodoc
867+
841868
####################
842869
# 28-pgvector.yml
843870
####################
@@ -944,6 +971,7 @@ COPY --from=vault-source /tmp/*.deb /tmp/
944971
COPY --from=pgroonga-source /tmp/*.deb /tmp/
945972
COPY --from=wrappers-source /tmp/*.deb /tmp/
946973
COPY --from=hypopg-source /tmp/*.deb /tmp/
974+
COPY --from=pg_repack-source /tmp/*.deb /tmp/
947975
COPY --from=pgvector-source /tmp/*.deb /tmp/
948976
COPY --from=pg_tle-source /tmp/*.deb /tmp/
949977
COPY --from=supautils-source /tmp/*.deb /tmp/
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
BEGIN;
2+
create extension if not exists pg_repack with schema "extensions";
3+
ROLLBACK;

migrations/tests/extensions/test.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,6 @@
2525
\ir 24-pgroonga.sql
2626
\ir 25-wrappers.sql
2727
\ir 26-hypopg.sql
28+
\ir 27-pg_repack.sql
2829
\ir 28-pgvector.sql
2930
\ir 29-pg_tle.sql

0 commit comments

Comments
 (0)