postgresql 18

This commit is contained in:
2025-10-05 19:16:58 +02:00
parent 52241d96b7
commit 5d5e882e56
3 changed files with 41 additions and 26 deletions

View File

@@ -1,4 +1,4 @@
FROM debian:trixie AS build-essential FROM debian:forky AS build-essential
RUN set -eux; \ RUN set -eux; \
apt-get update; \ apt-get update; \
@@ -10,6 +10,7 @@ RUN set -eux; \
build-essential \ build-essential \
cmake \ cmake \
checkinstall \ checkinstall \
ca-certificates \
; ;
FROM build-essential AS build-pgdev FROM build-essential AS build-pgdev
@@ -17,21 +18,18 @@ FROM build-essential AS build-pgdev
RUN set -eux; \ RUN set -eux; \
apt-get update; \ apt-get update; \
apt-get install -y --no-install-recommends \ apt-get install -y --no-install-recommends \
postgresql-server-dev-17 \ postgresql-server-dev-18 \
; ;
# ============================================================================= # =============================================================================
# pgTAP # pgTAP
# #
FROM debian:trixie AS pgtap FROM build-pgdev AS pgtap
# Installer les outils nécessaires pour compiler pgTAP # Installer les outils nécessaires pour compiler pgTAP
RUN apt-get update && \ RUN apt-get update && \
apt-get install -y --no-install-recommends \ apt-get install -y --no-install-recommends \
git \ git \
build-essential \
ca-certificates \
postgresql-server-dev-17 \
make make
# Cloner et compiler pgTAP # Cloner et compiler pgTAP
@@ -96,7 +94,7 @@ RUN checkinstall -D --install=no --fstrans=no --backup=no --pakdir=/tmp --nodoc
# #
FROM build-pgdev AS pgvector FROM build-pgdev AS pgvector
ARG pgvector_release=0.6.2 ARG pgvector_release=0.8.1
ADD "https://github.com/pgvector/pgvector/archive/refs/tags/v${pgvector_release}.tar.gz" \ ADD "https://github.com/pgvector/pgvector/archive/refs/tags/v${pgvector_release}.tar.gz" \
/tmp/pgvector.tar.gz /tmp/pgvector.tar.gz
@@ -115,7 +113,7 @@ RUN checkinstall -D --install=no --fstrans=no --backup=no --pakdir=/tmp \
# ============================================================================= # =============================================================================
# Étape 3 : image finale PostgreSQL propre # Étape 3 : image finale PostgreSQL propre
# #
FROM postgres:17.6 FROM postgres:18-trixie
RUN set -eux; \ RUN set -eux; \
apt-get update; \ apt-get update; \
@@ -124,15 +122,27 @@ RUN set -eux; \
sed -i '/fr_FR.UTF-8/s/^# //' /etc/locale.gen; \ sed -i '/fr_FR.UTF-8/s/^# //' /etc/locale.gen; \
locale-gen locale-gen
RUN localedef -i fr_FR -c -f UTF-8 -A /usr/share/locale/locale.alias fr_FR.UTF-8
ENV TZ=Europe/Paris ENV TZ=Europe/Paris
ENV LANG=fr_FR.UTF-8 ENV LANG=fr_FR.UTF-8
ENV LANGUAGE=fr_FR:fr ENV LANGUAGE=fr_FR:fr
ENV LC_ALL=fr_FR.UTF-8 ENV LC_ALL=fr_FR.UTF-8
ENV POSTGIS_MAJOR=3
ENV POSTGIS_VERSION=3.6.0+dfsg-1.pgdg13+1
RUN set -eux; \ RUN set -eux; \
apt-get update; \ apt-get update; \
apt-cache showpkg postgresql-$PG_MAJOR-postgis-$POSTGIS_MAJOR; \
apt-get install -y --no-install-recommends \ apt-get install -y --no-install-recommends \
postgresql-postgis # ca-certificates: for accessing remote raster files;
# fix: https://github.com/postgis/docker-postgis/issues/307
ca-certificates \
\
postgresql-18-postgis-$POSTGIS_MAJOR=$POSTGIS_VERSION \
postgresql-18-postgis-$POSTGIS_MAJOR-scripts; \
rm -rf /var/lib/apt/lists/*
# Copier uniquement les fichiers installés depuis le builder # Copier uniquement les fichiers installés depuis le builder
COPY --from=pgtap /pgtap-dist/ / COPY --from=pgtap /pgtap-dist/ /

View File

@@ -1,3 +1,5 @@
select * from pg_available_extensions;
create extension if not exists ltree; create extension if not exists ltree;
create extension if not exists pgtap; create extension if not exists pgtap;
create extension if not exists postgis; create extension if not exists postgis;

View File

@@ -1,22 +1,25 @@
create table item (
id bigint primary key,
caracteristiques jsonb
);
DO $$ DO $$
DECLARE DECLARE
f TEXT; f TEXT;
BEGIN BEGIN
FOR f IN SELECT pg_catalog.pg_ls_dir('/tmp/json') FOR f IN SELECT pg_catalog.pg_ls_dir('/tmp/json')
LOOP LOOP
IF right(f, 5) = '.json' THEN IF right(f, 5) = '.json' THEN
INSERT INTO item (id, caracteristiques) BEGIN
VALUES ( RAISE NOTICE 'Import du fichier : %', f;
replace(f, '.json','')::bigint,
pg_read_file('/tmp/json/' || f)::jsonb INSERT INTO item (id, caracteristiques)
) VALUES (
ON CONFLICT (id) DO UPDATE SET caracteristiques = EXCLUDED.caracteristiques; replace(f, '.json','')::bigint,
END IF; pg_read_file('/tmp/json/' || f)::jsonb
END LOOP; )
ON CONFLICT (id) DO UPDATE
SET caracteristiques = EXCLUDED.caracteristiques;
EXCEPTION WHEN OTHERS THEN
RAISE WARNING 'Erreur lors de l''import du fichier % : %', f, SQLERRM;
END;
END IF;
END LOOP;
END; END;
$$ LANGUAGE plpgsql; $$ LANGUAGE plpgsql;