diff --git a/README.md b/README.md index 77ad4b7..d962a99 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/banque/banque.1.tables.sql b/banque/banque.1.tables.sql index 695dc8c..7ebe31d 100644 --- a/banque/banque.1.tables.sql +++ b/banque/banque.1.tables.sql @@ -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 @@ -119,7 +157,7 @@ select rate limit 1; $$; --- Jeu de caractères utilisé +-- Jeu de caractères utilisé CREATE OR REPLACE FUNCTION chars36() RETURNS text AS $$ SELECT '12345ABCDE'; @@ -147,13 +185,13 @@ DECLARE c text; i int; BEGIN - + FOR i IN 1..length(code5) LOOP c := substr(code5, i, 1); total := total + char_to_int(c) * weights[i]; END LOOP; - total := total % length(chars); + total := total % length(chars); RETURN substr(chars, total + 1, 1); END; $$ LANGUAGE plpgsql IMMUTABLE; diff --git a/postgresql.Dockerfile b/postgresql.Dockerfile deleted file mode 100644 index 4c1ea1f..0000000 --- a/postgresql.Dockerfile +++ /dev/null @@ -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;