@@ -666,7 +666,7 @@ RUN apt-get update && \
666
666
#
667
667
# Use new version only for v17
668
668
# because Release_2024_09_1 has some backward incompatible changes
669
- # https://github.com/rdkit/rdkit/releases/tag/Release_2024_09_1
669
+ # https://github.com/rdkit/rdkit/releases/tag/Release_2024_09_1
670
670
ENV PATH="/usr/local/pgsql/bin/:/usr/local/pgsql/:$PATH"
671
671
RUN case "${PG_VERSION}" in \
672
672
"v17" ) \
@@ -860,18 +860,98 @@ ENV PATH="/home/nonroot/.cargo/bin:/usr/local/pgsql/bin/:$PATH"
860
860
USER nonroot
861
861
WORKDIR /home/nonroot
862
862
863
- RUN case "${PG_VERSION}" in "v17" ) \
864
- echo "v17 is not supported yet by pgrx. Quit" && exit 0;; \
865
- esac && \
866
- curl -sSO https://static.rust-lang.org/rustup/dist/$(uname -m)-unknown-linux-gnu/rustup-init && \
863
+ RUN curl -sSO https://static.rust-lang.org/rustup/dist/$(uname -m)-unknown-linux-gnu/rustup-init && \
867
864
chmod +x rustup-init && \
868
865
./rustup-init -y --no-modify-path --profile minimal --default-toolchain stable && \
869
866
rm rustup-init && \
867
+ case "${PG_VERSION}" in \
868
+ 'v17' ) \
869
+ echo 'v17 is not supported yet by pgrx. Quit' && exit 0;; \
870
+ esac && \
870
871
cargo install --locked --version 0.11.3 cargo-pgrx && \
871
872
/bin/bash -c 'cargo pgrx init --pg${PG_VERSION:1}=/usr/local/pgsql/bin/pg_config'
872
873
873
874
USER root
874
875
876
+ # ########################################################################################
877
+ #
878
+ # Layer "rust extensions pgrx12"
879
+ #
880
+ # pgrx started to support Postgres 17 since version 12,
881
+ # but some older extension aren't compatible with it.
882
+ # This layer should be used as a base for new pgrx extensions,
883
+ # and eventually get merged with `rust-extensions-build`
884
+ #
885
+ # ########################################################################################
886
+ FROM build-deps AS rust-extensions-build-pgrx12
887
+ ARG PG_VERSION
888
+ COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
889
+
890
+ RUN apt-get update && \
891
+ apt-get install --no-install-recommends -y curl libclang-dev && \
892
+ useradd -ms /bin/bash nonroot -b /home
893
+
894
+ ENV HOME=/home/nonroot
895
+ ENV PATH="/home/nonroot/.cargo/bin:/usr/local/pgsql/bin/:$PATH"
896
+ USER nonroot
897
+ WORKDIR /home/nonroot
898
+
899
+ RUN curl -sSO https://static.rust-lang.org/rustup/dist/$(uname -m)-unknown-linux-gnu/rustup-init && \
900
+ chmod +x rustup-init && \
901
+ ./rustup-init -y --no-modify-path --profile minimal --default-toolchain stable && \
902
+ rm rustup-init && \
903
+ cargo install --locked --version 0.12.6 cargo-pgrx && \
904
+ /bin/bash -c 'cargo pgrx init --pg${PG_VERSION:1}=/usr/local/pgsql/bin/pg_config'
905
+
906
+ USER root
907
+
908
+ # ########################################################################################
909
+ #
910
+ # Layers "pg-onnx-build" and "pgrag-pg-build"
911
+ # Compile "pgrag" extensions
912
+ #
913
+ # ########################################################################################
914
+
915
+ FROM rust-extensions-build-pgrx12 AS pg-onnx-build
916
+
917
+ # cmake 3.26 or higher is required, so installing it using pip (bullseye-backports has cmake 3.25).
918
+ # Install it using virtual environment, because Python 3.11 (the default version on Debian 12 (Bookworm)) complains otherwise
919
+ RUN apt-get update && apt-get install -y python3 python3-pip python3-venv && \
920
+ python3 -m venv venv && \
921
+ . venv/bin/activate && \
922
+ python3 -m pip install cmake==3.30.5 && \
923
+ wget https://github.com/microsoft/onnxruntime/archive/refs/tags/v1.18.1.tar.gz -O onnxruntime.tar.gz && \
924
+ mkdir onnxruntime-src && cd onnxruntime-src && tar xzf ../onnxruntime.tar.gz --strip-components=1 -C . && \
925
+ ./build.sh --config Release --parallel --skip_submodule_sync --skip_tests --allow_running_as_root
926
+
927
+
928
+ FROM pg-onnx-build AS pgrag-pg-build
929
+
930
+ RUN apt-get install -y protobuf-compiler && \
931
+ wget https://github.com/neondatabase-labs/pgrag/archive/refs/tags/v0.0.0.tar.gz -O pgrag.tar.gz && \
932
+ echo "2cbe394c1e74fc8bcad9b52d5fbbfb783aef834ca3ce44626cfd770573700bb4 pgrag.tar.gz" | sha256sum --check && \
933
+ mkdir pgrag-src && cd pgrag-src && tar xzf ../pgrag.tar.gz --strip-components=1 -C . && \
934
+ \
935
+ cd exts/rag && \
936
+ sed -i 's/pgrx = "0.12.6"/pgrx = { version = "0.12.6", features = [ "unsafe-postgres" ] }/g' Cargo.toml && \
937
+ cargo pgrx install --release && \
938
+ echo "trusted = true" >> /usr/local/pgsql/share/extension/rag.control && \
939
+ \
940
+ cd ../rag_bge_small_en_v15 && \
941
+ sed -i 's/pgrx = "0.12.6"/pgrx = { version = "0.12.6", features = [ "unsafe-postgres" ] }/g' Cargo.toml && \
942
+ ORT_LIB_LOCATION=/home/nonroot/onnxruntime-src/build/Linux \
943
+ REMOTE_ONNX_URL=http://pg-ext-s3-gateway/pgrag-data/bge_small_en_v15.onnx \
944
+ cargo pgrx install --release --features remote_onnx && \
945
+ echo "trusted = true" >> /usr/local/pgsql/share/extension/rag_bge_small_en_v15.control && \
946
+ \
947
+ cd ../rag_jina_reranker_v1_tiny_en && \
948
+ sed -i 's/pgrx = "0.12.6"/pgrx = { version = "0.12.6", features = [ "unsafe-postgres" ] }/g' Cargo.toml && \
949
+ ORT_LIB_LOCATION=/home/nonroot/onnxruntime-src/build/Linux \
950
+ REMOTE_ONNX_URL=http://pg-ext-s3-gateway/pgrag-data/jina_reranker_v1_tiny_en.onnx \
951
+ cargo pgrx install --release --features remote_onnx && \
952
+ echo "trusted = true" >> /usr/local/pgsql/share/extension/rag_jina_reranker_v1_tiny_en.control
953
+
954
+
875
955
# ########################################################################################
876
956
#
877
957
# Layer "pg-jsonschema-pg-build"
@@ -1041,6 +1121,31 @@ RUN wget https://github.com/pgpartman/pg_partman/archive/refs/tags/v5.1.0.tar.gz
1041
1121
make -j $(getconf _NPROCESSORS_ONLN) install && \
1042
1122
echo 'trusted = true' >> /usr/local/pgsql/share/extension/pg_partman.control
1043
1123
1124
+ # ########################################################################################
1125
+ #
1126
+ # Layer "pg_mooncake"
1127
+ # compile pg_mooncake extension
1128
+ #
1129
+ # ########################################################################################
1130
+ FROM rust-extensions-build AS pg-mooncake-build
1131
+ ARG PG_VERSION
1132
+ COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/
1133
+
1134
+ ENV PG_MOONCAKE_VERSION=882175dbba07ba2e6e59b1088d61bf325b910b9e
1135
+ ENV PATH="/usr/local/pgsql/bin/:$PATH"
1136
+
1137
+ RUN case "${PG_VERSION}" in \
1138
+ 'v14' ) \
1139
+ echo "pg_mooncake is not supported on Postgres ${PG_VERSION}" && exit 0;; \
1140
+ esac && \
1141
+ git clone --depth 1 --branch neon https://github.com/kelvich/pg_mooncake.git pg_mooncake-src && \
1142
+ cd pg_mooncake-src && \
1143
+ git checkout "${PG_MOONCAKE_VERSION}" && \
1144
+ git submodule update --init --depth 1 --recursive && \
1145
+ make BUILD_TYPE=release -j $(getconf _NPROCESSORS_ONLN) && \
1146
+ make BUILD_TYPE=release -j $(getconf _NPROCESSORS_ONLN) install && \
1147
+ echo 'trusted = true' >> /usr/local/pgsql/share/extension/pg_mooncake.control
1148
+
1044
1149
# ########################################################################################
1045
1150
#
1046
1151
# Layer "neon-pg-ext-build"
@@ -1059,6 +1164,7 @@ COPY --from=h3-pg-build /h3/usr /
1059
1164
COPY --from=unit-pg-build /usr/local/pgsql/ /usr/local/pgsql/
1060
1165
COPY --from=vector-pg-build /usr/local/pgsql/ /usr/local/pgsql/
1061
1166
COPY --from=pgjwt-pg-build /usr/local/pgsql/ /usr/local/pgsql/
1167
+ COPY --from=pgrag-pg-build /usr/local/pgsql/ /usr/local/pgsql/
1062
1168
COPY --from=pg-jsonschema-pg-build /usr/local/pgsql/ /usr/local/pgsql/
1063
1169
COPY --from=pg-graphql-pg-build /usr/local/pgsql/ /usr/local/pgsql/
1064
1170
COPY --from=pg-tiktoken-pg-build /usr/local/pgsql/ /usr/local/pgsql/
@@ -1084,6 +1190,7 @@ COPY --from=wal2json-pg-build /usr/local/pgsql /usr/local/pgsql
1084
1190
COPY --from=pg-anon-pg-build /usr/local/pgsql/ /usr/local/pgsql/
1085
1191
COPY --from=pg-ivm-build /usr/local/pgsql/ /usr/local/pgsql/
1086
1192
COPY --from=pg-partman-build /usr/local/pgsql/ /usr/local/pgsql/
1193
+ COPY --from=pg-mooncake-build /usr/local/pgsql/ /usr/local/pgsql/
1087
1194
COPY pgxn/ pgxn/
1088
1195
1089
1196
RUN make -j $(getconf _NPROCESSORS_ONLN) \
@@ -1247,6 +1354,7 @@ COPY --from=unit-pg-build /postgresql-unit.tar.gz /ext-src/
1247
1354
COPY --from=vector-pg-build /pgvector.tar.gz /ext-src/
1248
1355
COPY --from=vector-pg-build /pgvector.patch /ext-src/
1249
1356
COPY --from=pgjwt-pg-build /pgjwt.tar.gz /ext-src
1357
+ # COPY --from=pgrag-pg-build /usr/local/pgsql/ /usr/local/pgsql/
1250
1358
# COPY --from=pg-jsonschema-pg-build /home/nonroot/pg_jsonschema.tar.gz /ext-src
1251
1359
# COPY --from=pg-graphql-pg-build /home/nonroot/pg_graphql.tar.gz /ext-src
1252
1360
# COPY --from=pg-tiktoken-pg-build /home/nonroot/pg_tiktoken.tar.gz /ext-src
0 commit comments