PostgreSQL-16.2

Introduction à PostgreSQL

PostgreSQL est un système avancé de gestion de base de données relationnelles (ORDBMS), dérivé du système de gestion de base de données Berkeley Postgres.

This package is known to build and work properly using an LFS 12.1 platform.

Informations sur le paquet

  • Téléchargement (HTTP) : https://ftp.postgresql.org/pub/source/v16.2/postgresql-16.2.tar.bz2

  • Téléchargement (FTP) :

  • Somme de contrôle MD5 : 3d19d93434666db5d33e692472915ae5

  • Taille du téléchargement : 24 Mo

  • Estimation de l'espace disque requis : 227 Mo (plus 43 Mo pour les tests)

  • Estimation du temps de construction : 0,8 SBU (avec parallélisme = 4, plus 0,2 SBU pour les tests)

Dépendances de PostgreSQL

Facultatives

ICU-74.2, libxml2-2.12.5, libxslt-1.1.39, OpenLDAP-2.6.7, Linux-PAM-1.6.0, MIT Kerberos V5-1.21.2 et Bonjour

Facultative (Afin de régénérer la documentation)

fop-2.9, docbook-4.5-dtd, docbook-dsssl-1.79, DocBook-utils-0.6.14, OpenJade-1.3.2 et SGMLSpm-1.1

Notes des auteurs : https://wiki.linuxfromscratch.org/blfs/wiki/postgresql

Installation de PostgreSQL

Pour plus de sécurité, il vaut mieux avoir un groupe et un utilisateur dédié pour lancer le serveur PostgreSQL. Tout d'abord lancez en tant qu'utilisateur root :

groupadd -g 41 postgres &&
useradd -c "PostgreSQL Server" -g postgres -d /srv/pgsql/data \
        -u 41 postgres
[Note]

Note

Il y a plusieurs éléments de configuration qui ajoutent des fonctionnalités supplémentaires avec des paquets facultatifs à PostgreSQL. Utilisez ./configure --help pour voir une liste.

Installez PostgreSQL avec les commandes suivantes :

sed -i '/DEFAULT_PGSOCKET_DIR/s@/tmp@/run/postgresql@' src/include/pg_config_manual.h &&

./configure --prefix=/usr          \
            --enable-thread-safety \
            --docdir=/usr/share/doc/postgresql-16.2 &&
make

Il y a de nombreux programmes dans le répertoire contrib/. Si vous allez lancer cette installation en tant que serveur et souhaitez construire certain d'entre eux, entrez make -C contrib ou make -C contrib/<SUBDIR-NAME> pour chaque sous-répertoire.

Les tests doivent être lancés en utilisateur normal, car ils ont besoin de démarrer un serveur temporaire, ce qui est empêché en tant qu’utilisateur root. Pour la même raison, vous devez arrêter tous les serveurs PostgreSQL lancés. Si une version précédente de PostgreSQL est installée, il peut être nécessaire d’utiliser --disable-rpath avec configure pour éviter des échecs, mais il n’est pas recommandé d’installer les binaires créés en utilisant cette option. Pour tester les résultats, tapez make check.

[Note]

Note

Si vous installez PostgreSQL pour mettre à jour une installation existante, il y a des étapes importantes que vous devez suivre. Si la version majeur de la nouvelle construction est plus grande que la version précédente, il se peut que le format de fichiers de données ait changé. Le nouveau logiciel ne peut pas utiliser les fichiers de données existants. Dans ce cas, le serveur ne démarrera pas parce que les anciens programmes ont été écrasés, donc les données sont indisponibles jusqu'à la conversion du format de fichier.

Avant de mettre à jour une installation existante de PostgreSQL, vérifiez la documentation pour trouver les considérations à garder en tête pendant la mise à jour. Remarquez que les nouvelles versions majeures peuvent utiliser un format binaire différent pour les objets de données, ce qui cause de potentielles incompatibilités. Pour plus d'informations, regardez la documentation en amont à propos de la mise à jour de PostgreSQL ici. https://www.postgresql.org/docs/current/upgrading.html.

Maintenant, vous pourriez avoir à la fois les anciens et les nouveaux binaires sur votre système de fichiers. Ces binaires peuvent être utilisés pour effectuer une mise à jour de vos fichiers de bases de données existants. Pour les instructions suivantes, on suppose que

  • Les fichiers de données sont stockés dans /srv/pgsql/data

  • Les fichiers de données mis à jour seront stockés dans /srv/pgsql/newdata

  • Il y a assez de place disque pour contenir les fichiers de données deux fois. La mise à jour n'est pas une mise à jour en ligne mais elle copie les données vers de nouveaux fichiers de base de données.

Tout d'abord, effectuez une installation temporaire qui rend l'accès aux nouveaux binaires plus facile :

make DESTDIR=$(pwd)/DESTDIR install

Ensuite, créez un répertoire inscriptible pour l'utilisateur postgres, en tant qu'utilisateur root :

install -d -o postgres $(pwd)/DESTDIR/tmp

Maintenant, stoppez l'instance PostgreSQL existante et démarrez le processus de mise à jour en tant qu'utilisateur root :

pushd $(pwd)/DESTDIR/tmp
/etc/rc.d/init.d/postgresql stop
su postgres -c "../usr/bin/initdb -D /srv/pgsql/newdata"
su postgres -c "../usr/bin/pg_upgrade \
                    -d /srv/pgsql/data    -b /usr/bin \
                    -D /srv/pgsql/newdata -B ../usr/bin"
popd

Ici, vos fichiers de bases de données sont disponibles à deux emplacement sur le disque. Les anciennes données sont situées dans /srv/pgsql/data, et les nouvelles données sont dans /srv/pgsql/newdata. Nous vous conseillons de sauvegarder les anciens fichiers avant de continuer.

Ensuite, supprimez les anciens fichiers de bases de données et renommez le nouveau répertoire de données en tant qu'utilisateur root :

rm -rf /srv/pgsql/data
mv /srv/pgsql/newdata /srv/pgsql/data

Maintenant, en tant qu'utilisateur root :

make install      &&
make install-docs

Si vous avez fait tous les programmes de contrib/, en tant qu'utilisateur root:

make -C contrib/<SUBDIR-NAME> install
[Astuce]

Astuce

Si vous pensez utiliser PostgreSQL en tant que client pour se connecter a un serveur sur une autre machine, votre installation est terminée et vous n'avez pas à lancer les commandes suivantes.

Si vous avez mis à jour une base de données existante, sautez le reste des commandes car votre base de données est prête à être utilisée. Si c'est votre première installation de PostgreSQL, continuez l'initialisation.

Initialisez un morceau (cluster) de base de données avec les commandes suivantes effectuées par l'utilisateur root :

install -v -dm700 /srv/pgsql/data &&
install -v -dm755 /run/postgresql &&
chown -Rv postgres:postgres /srv/pgsql /run/postgresql

Maintenant, initialisez la base de données en tant qu'utilisateur root :

su - postgres -c '/usr/bin/initdb -D /srv/pgsql/data'

Explication des commandes

sed -i ... : ce sed modifie l'endroit du socket de /tmp vers /run/postgresql.

--enable-thread-safety : Ce paramètre rend les bibliothèques clientes thread-safe en autorisant les threads parallèles dans libpq et aux programmes ECPG de contrôler en sécurité leur gestions de connexion privée.

--with-openssl : construit avec le support de OpenSSL pour les connexions chiffrées.

--with-perl : Construit le langage coté serveur PL/Perl.

--with-python : Construit le langage coté serveur PL/Python. Python3 est utilisé par défaut, Python2 n'étant plus pris en charge.

--with-tcl : construit le langage coté serveur PL/Tcl.

Configuration de PostgreSQL

Fichiers de configuration

$PGDATA/pg_ident.con, $PGDATA/pg_hba.conf et $PGDATA/postgresql.conf

La variable d'environnement PGDATA est utilisée pour distinguer les clusters de base de données entre eux en la réglant sur la valeur du répertoire qui contient le cluster désiré. Les trois fichiers de configuration existent dans tout répertoire PGDATA/. Vous pouvez trouver des détails sur le format des fichiers et les options qu'on peut régler dans chacun d'eux dans /usr/share/doc/postgresql-16.2/html/index.html.

Script de démarrage

Installez le script de démarrage /etc/rc.d/init.d/postgresql inclus dans le paquet blfs-bootscripts-20240209  :

make install-postgresql

Démarrage du serveur postgreSQL et création d'une base de donnée

Le serveur de bases de données peut être lancé manuellement avec la commande suivante (en tant qu'utilisateur root) :

su - postgres -c '/usr/bin/postgres -D /srv/pgsql/data > \
                  /srv/pgsql/data/logfile 2>&1 &'
[Note]

Note

Si vous scriptez cette partie, vous devriez attendre que le serveur soit démarré avant de continuer, en ajoutant par exemple sleep 2 après la commande ci-dessus.

Les instructions ci-dessous montrent comment créer une base de données, y ajouter une table, insérer quelques lignes dans la table et les sélectionner pour vérifier que l'installation fonctionne correctement. Toujours en tant qu'utilisateur root, lancez :

su - postgres -c '/usr/bin/createdb test' &&
echo "create table t1 ( name varchar(20), state_province varchar(20) );" \
    | (su - postgres -c '/usr/bin/psql test ') &&
echo "insert into t1 values ('Billy', 'NewYork');" \
    | (su - postgres -c '/usr/bin/psql test ') &&
echo "insert into t1 values ('Evanidus', 'Quebec');" \
    | (su - postgres -c '/usr/bin/psql test ') &&
echo "insert into t1 values ('Jesse', 'Ontario');" \
    | (su - postgres -c '/usr/bin/psql test ') &&
echo "select * from t1;" | (su - postgres -c '/usr/bin/psql test')

Lorsque vous avez fini de tester, vous pouvez couper le serveur, en lançant en tant qu'utilisateur root :

su - postgres -c "/usr/bin/pg_ctl stop -D /srv/pgsql/data"

Contenu

Programmes installés: clusterdb, createdb, createuser, dropdb, dropuser, ecpg, initdb, pg_amcheck, pg_archivecleanup, pg_basebackup, pg_checksums, pg_config, pg_controldata, pg_ctl, pg_dump, pg_dumpall, pg_isready, pg_receivewal, pg_recvlogical, pg_resetwal, pg_restore, pg_rewind, pg_test_fsync, pg_test_timing, pg_upgrade, pg_verifybackup, pg_waldump, pgbench, postgres, psql, reindexdb, vacuumdb, éventuellement, si la prise en charge de Tcl a été construite, pltcl_delmod, pltcl_listmod, pltcl_loadmod et éventuellement (dans contrib/) oid2name, pg_standby, vacuumlo et plusieurs autres
Bibliothèques installées: libecpg.{so,a}, libecpg_compat.{so,a}, libpgcommon.a, libpgcommon_shlib.a, libpgfeutils.a, libpgport.a, libpgport_shlib.a, libpgtypes.{so,a}, libpq.{so,a}, divers modules de jeux de caractères et éventuellement de langages de programmations dans /usr/lib/postgresql
Répertoires installés: /usr/include/{libpq,postgresql}, /usr/lib/postgresql, /usr/share/{doc/postgresql-16.2,postgresql} et /srv/pgsql

Descriptions courtes

clusterdb

est un outil pour reconstruire des tables dans une base de données PostgreSQL

createdb

crée une nouvelle base de données PostgreSQL

createuser

définit un nouveau compte utilisateur PostgreSQL

dropdb

supprime une base de données PostgreSQL

dropuser

supprime un compte utilisateur PostgreSQL

ecpg

est le préprocesseur SQL embarqué

initdb

crée un nouveau cluster de base de données

oid2name

résous les OIDs (Object IDs) et les nœuds de fichier dans le répertoire des données de PostgreSQL

pg_amcheck

vérifie si une ou plusieurs bases de données PostgreSQL sont corrompues

pg_archivecleanup

nettoie les fichiers d'archives de PostgreSQL WAL (write-ahead log)

pg_basebackup

fait des sauvegardes de la base sur une grappe PostgreSQL

pg_checksums

active, désactive ou vérifie les sommes de contrôle des données dans une grape de bases de données PostgreSQL

pg_config

récupère des informations sur la version de PostgreSQL

pg_controldata

retourne des informations initialisées pendant initdb, telles que la version du catalogue et la locale du serveur

pg_ctl

contrôle l'arrêt et le démarrage du serveur de base de données

pg_dump

place dans un script des données et des méta-données de base de données, elles sont utilisées pour recréer la base de données

pg_dumpall

appelle de manière récursive pg_dump pour chaque base de données d'un cluster

pg_isready

vérifie le statut de la connexion du serveur PostgreSQL

pg_receivewal

est utilisé pour envoyer des journaux en écriture continue depuis un serveur PostgreSQL

pg_recvlogical

contrôle les flux de décodage logique de PostgreSQL

pg_resetwal

supprime le journal d'écriture et d'autres informations de contrôle d'un cluster de base de données PostgreSQL

pg_restore

crée des bases de données à partir de fichiers cachés créés par pg_dump

pg_rewind

synchronise un répertoire de données PostgreSQL avec un autre répertoire qui a été copié depuis le premier

pg_standby

supporte la création d'un serveur PostgreSQL de secours à chaud

pg_test_fsync

détermine la méthode wal_sync la plus rapide pour PostgreSQL

pg_test_timing

mesure le temps de synchronisation

pg_upgrade

met à jour une instance de serveur PostgreSQL

pg_verifybackup

vérifie le statut de la connexion du serveur PostgreSQL

pg_waldump

affiche une sortie lisible par un humain du log d'écriture d'un cluster de base de données PostgreSQL

pgbench

lance un test de performance sur PostgreSQL

pltcl_delmod

est un script de support utilisé pour effacer un module d'une table PL/Tcl. La commande exige que le paquet Pgtcl soit aussi installé

pltcl_listmod

est un script de support utilisé pour effacer un module d'une table PL/Tcl. La commande exige que le paquet Pgtcl soit aussi installé

pltcl_loadmod

est un script de support utilisé pour effacer un module d'une table PL/Tcl. La commande exige que le paquet Pgtcl soit aussi installé

postgres

est le serveur de bases de données PostgreSQL

psql

est un shell de base de données en console

reindexdb

est un outil pour reconstruire les index d'une base de données

vacuumdb

compacte des bases de données et génère des statistiques pour l'analyseur de demandes

vacuumlo

efface les gros objets orphelins d'une base de données PostgreSQL

libecpg.{so,a}

contiens des fonctions pour supporter du SQL embarqué dans des programmes C

libecpg_compat.{so,a}

est la bibliothèque de compatibilité ecpg

libgport.a

est le sous-système de port spécifique au backend Postgres

libpgtypes.{so,a}

contiens des fonctions pour traiter des types de données Postgres

libpq.{so,a}

est l'API de programmation C pour Postgres