This commit is contained in:
2025-11-27 07:43:22 +01:00
parent f8b3d0768b
commit 3a833a049a
3 changed files with 43 additions and 177 deletions

View File

@@ -1,23 +1,5 @@
### Construire l'image
```shell
docker build -t iut/pgsql:2025-12 -f postgresql.Dockerfile .
```
```shell
docker network create pg_net
```
```shell
docker run --detach --name pgsql --restart=always \
--network pg_net -p "5432:5432" \
-e "POSTGRES_INITDB_ARGS=--locale-provider=icu --icu-locale=fr-FR" \
-e "POSTGRES_PASSWORD=ChangeMe" \
-e "POSTGRES_USER=iut" \
-v pgsql_data:/var/lib/postgresql:rw \
-v caddy_data:/data \
iut/pgsql:2025-12
```
## Données

View File

@@ -1,9 +1,22 @@
show server_version;
-- ----------------------------------------------------------------------
-- extensions
-- ----------------------------------------------------------------------
select * from pg_available_extensions;
SHOW shared_preload_libraries;
drop schema if exists public cascade;
create schema public;
create schema if not exists ext;
create extension if not exists pgcrypto schema ext;
create extension if not exists pg_cron;
create type holder_type as enum ('BANK', 'PERSON', 'COMPANY');
create table holder (
@@ -60,7 +73,11 @@ create table currency (
insert into currency
values ('EUR', 'Euro'), ('JPY', 'Yen'), ('USD', 'US Dollar'),
('GBP', 'Livre Sterling'), ('KRW', 'Won');
('GBP', 'Livre Sterling'), ('KRW', 'Won'), ('ZAR', 'Rand sud africain'),
('CHF', 'Franc suisse'),
('AUD', 'Dollar australien'), ('CAD', 'Dollar canadien'),
('SEK', 'Couronne suédoise'),
('NOK', 'Couronne norvégienne');
/************************************************************************
* Exchange Rate
@@ -90,7 +107,7 @@ create temporary table if not exists eurofxref (
dumb text
);
copy eurofxref FROM '/docker-entrypoint-initdb.d/banque/eurofxref-hist.csv' (FORMAT CSV, header, delimiter ',', ENCODING 'UTF8');
\copy eurofxref FROM '/docker-entrypoint-initdb.d/eurofxref-hist.csv' (FORMAT CSV, header, delimiter ',', ENCODING 'UTF8');
insert into exchange_rate
select 'USD', date, USD from eurofxref;
@@ -104,6 +121,27 @@ select 'GBP', date, GBP from eurofxref;
insert into exchange_rate
select 'KRW', date, KRW from eurofxref;
insert into exchange_rate
select 'ZAR', date, ZAR from eurofxref;
/*insert into exchange_rate
select 'BRL', date, BRL from eurofxref where BRL <> 'N/A';*/
insert into exchange_rate
select 'CHF', date, CHF from eurofxref;
insert into exchange_rate
select 'AUD', date, AUD from eurofxref;
insert into exchange_rate
select 'CAD', date, CAD from eurofxref;
/*insert into exchange_rate
select 'MXN', date, MXN from eurofxref;*/
insert into exchange_rate
select 'NOK', date, NOK from eurofxref;
create or replace function latest_exchange_rate (
p_code text,
p_date date

View File

@@ -1,154 +0,0 @@
FROM debian:forky AS build-essential
RUN set -eux; \
apt-get update; \
apt-get upgrade -y
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends \
build-essential \
ca-certificates \
checkinstall \
cmake \
;
FROM build-essential AS build-pgdev
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends \
postgresql-server-dev-18 \
;
# =============================================================================
# pgTAP
#
FROM build-pgdev AS pgtap
# Installer les outils nécessaires pour compiler pgTAP
RUN apt-get update && \
apt-get install -y --no-install-recommends \
git \
make
# Cloner et compiler pgTAP
RUN git clone --depth 1 https://github.com/theory/pgtap.git /usr/src/pgtap && \
cd /usr/src/pgtap && \
make && \
make install DESTDIR=/pgtap-dist
# =============================================================================
# pgRouting
#
FROM build-pgdev AS pgrouting
ARG pgrouting_release=3.8.0
ADD "https://github.com/pgRouting/pgrouting/releases/download/v${pgrouting_release}/pgrouting-${pgrouting_release}.tar.gz" \
/tmp/pgrouting.tar.gz
RUN set -eux; \
tar -xvf /tmp/pgrouting.tar.gz -C /tmp; \
rm -rf /tmp/pgrouting.tar.gz;
# Installer les dépendances de compilation
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends \
libboost-all-dev \
;
WORKDIR /tmp/pgrouting-${pgrouting_release}/build
RUN cmake -DBUILD_HTML=OFF -DBUILD_DOXY=OFF ..
# Create debian package
RUN checkinstall -D --install=no --fstrans=no --backup=no --pakdir=/tmp \
--pkgname=pgrouting --pkgversion=${pgrouting_release} \
--nodoc
# =============================================================================
# pg_cron
#
FROM build-pgdev AS pgcron
# Télécharger
ARG pg_cron_release=1.6.7
ADD "https://github.com/citusdata/pg_cron/archive/refs/tags/v${pg_cron_release}.tar.gz" \
/tmp/pg_cron.tar.gz
# Extraire
RUN tar -xvf /tmp/pg_cron.tar.gz -C /tmp && \
rm -rf /tmp/pg_cron.tar.gz
# Build from source
WORKDIR /tmp/pg_cron-${pg_cron_release}
RUN make
# Create debian package
RUN checkinstall -D --install=no --fstrans=no --backup=no --pakdir=/tmp --nodoc
# =============================================================================
# pgVector
#
FROM build-pgdev AS pgvector
ARG pgvector_release=0.8.1
ADD "https://github.com/pgvector/pgvector/archive/refs/tags/v${pgvector_release}.tar.gz" \
/tmp/pgvector.tar.gz
RUN tar -xvf /tmp/pgvector.tar.gz -C /tmp && \
rm -rf /tmp/pgvector.tar.gz
# Build from source
WORKDIR /tmp/pgvector-${pgvector_release}
RUN make
# Create debian package
RUN checkinstall -D --install=no --fstrans=no --backup=no --pakdir=/tmp \
--nodoc
# =============================================================================
# Étape 3 : image finale PostgreSQL propre
#
FROM postgres:18-trixie
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends \
locales; \
apt-get clean; \
sed -i '/fr_FR.UTF-8/s/^# //' /etc/locale.gen; \
locale-gen;
ENV TZ=Europe/Paris
ENV LANG=fr_FR.UTF-8
ENV LANGUAGE=fr_FR:fr
ENV LC_ALL=fr_FR.UTF-8
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends \
# ca-certificates: for accessing remote raster files;
# fix: https://github.com/postgis/docker-postgis/issues/307
ca-certificates \
postgresql-postgis
RUN set -eux; \
apt-get install -y --no-install-recommends \
postgresql-18-pglogical; \
rm -rf /var/lib/apt/lists/*
# Copier uniquement les fichiers installés depuis le builder
COPY --from=pgtap /pgtap-dist/ /
COPY --from=pgrouting /tmp/*.deb /tmp
COPY --from=pgvector /tmp/*.deb /tmp
COPY --from=pgcron /tmp/*.deb /tmp
RUN set -eux; \
apt-get install \
/tmp/*.deb \
-y; \
rm /tmp/*.deb;