[LINUX] Construire PostgreSQL à partir des sources

introduction

J'ai parlé de PostgreSQL dans le projet auquel j'ai participé le plus récemment. Je pense que cela fait environ 5 ans que je n'ai pas touché Postgre. Je ne me souviens pas clairement, mais je pense que le dernier que j'ai utilisé était la série 9. Je pensais rentrer à la maison et le chercher, mais je me demandais où le chercher. Construisons à partir de la source! J'ai décidé de partager ce que j'ai fait. Cette fois, je l'ai construit sur Ubuntu 18.04. Au fait, j'ai tiré l'image Ubuntu avec Docker. Docker m’est redevable au quotidien.

Ajouté le 8 mars: </ font> Ajout de la façon de construire sur ** CentOS **. J'ai tiré Centos: 7 avec Docker comme ci-dessus.

La façon de construire Ubuntu et CentOS est exactement la même. La seule différence est la commande d'installation initiale du package.

PRE INSTALLATION

① Mettre à jour la liste des packages

Tout d'abord, mettez à jour la base de données qui gère le package. (Le package lui-même n'est pas mis à jour.)

Ubuntu.commander


root@2b4511afa430:/# apt-get update
Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:2 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
Get:3 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
....
....
  • CentOS sera ignoré.

② Installation de la bibliothèque de construction

Les bibliothèques nécessaires à la construction sont décrites à la page suivante. https://www.postgresql.org/docs/12/install-requirements.html

  • Puisqu'il est 12.2 à construire cette fois, c'est l'URL ci-dessus. Vous pouvez l'installer en vous référant au site ci-dessus, mais je l'ai mis en même temps avec la commande suivante.

Ubuntu.commander


# apt-get install build-essential

CentOS.commander


# yum groupinstall "Development Tools"

Il existe deux autres packages importants. Il est possible de construire sans les utiliser, mais par contre, certaines fonctions utiles ne peuvent pas être utilisées.

  1. readline: Un outil qui affiche l'historique des commandes lorsque les touches fléchées sont enfoncées.
  2. zlib: outils utilisés par pg_dump et pg_restore pour compresser les données

Ubuntu.commander


# apt-get install libreadline-dev zlib1g-dev

CentOS.commander


# yum install readline-devel zlib-devel

③ Télécharger la source

Téléchargez la source de la version que vous souhaitez créer à partir du lien ci-dessous. https://www.postgresql.org/ftp/source/ Cette fois, j'utiliserai 12.2. Téléchargez et décompressez avec la commande suivante.

# cd /usr/local/src/

# wget https://ftp.postgresql.org/pub/source/v12.2/postgresql-12.2.tar.gz

# tar zxf postgresql-12.2.tar.gz
                                                                                                                                   
  • Si "wget" n'existe pas, installez-le avec la commande suivante.

Ubuntu.commander


# apt-get install wget

CentOS.commander


# yum install wget

INSTALLATION Il est enfin temps de construire. ① configure Cette fois, nous préparerons un répertoire séparé pour la construction. De cette façon, si quelque chose ne va pas, vous pouvez supprimer le répertoire et le reconstruire afin que les données précédentes ne gênent pas.

root@2b4511afa430:/usr/local/src# cd postgresql-12.2
root@2b4511afa430:/usr/local/src/postgresql-12.2# mkdir tmp_build_dir
root@2b4511afa430:/usr/local/src/postgresql-12.2# cd tmp_build_dir/
root@2b4511afa430:/usr/local/src/postgresql-12.2/tmp_build_dir#  

Exécutez la commande suivante à partir de cet emplacement.

/usr/local/src/postgresql-12.2/configure --prefix=/opt/postgresql12

** --prefix ** apparaîtra plus tard, mais les fichiers importants tels que les fichiers exécutables et les fichiers de bibliothèque seront installés dans le répertoire spécifié ici.

  • Si vous voulez en savoir plus, veuillez google avec "--prefix".

Ce que nous faisons ici, c'est d'exécuter le fichier "configure" dans le répertoire source et de vérifier les variables d'environnement et les bibliothèques nécessaires à l'installation. À la suite de la vérification, MakeFile est créé.

② make Ensuite, compilez en fonction du MakeFile créé par configure.

# make

Cela prendra du temps, mais ce n'est pas grave si le message suivant apparaît à la fin.

réduction
make[1]: Entering directory '/usr/local/src/postgresql-12.2/tmp_build_dir/config'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/usr/local/src/postgresql-12.2/tmp_build_dir/config'
All of PostgreSQL successfully made. Ready to install.

③ install Ensuite, installez celui compilé ci-dessus dans le répertoire spécifié par ** --prefix **.

# make install

Enfin, si vous voyez le message suivant, c'est OK.

réduction
/usr/bin/install -c -m 755 /usr/local/src/postgresql-12.2/config/missing '/opt/postgresql12/lib/pgxs/config/missing'
make[1]: Leaving directory '/opt/temp/build_dir/config'
PostgreSQL installation complete.

Le contenu de la destination d'installation est le suivant.

postgresql12/
|-- bin
|-- include
|-- lib
`-- share

POST INSTALLATION

① Ajouter à la variable d'environnement

Ajoutez le répertoire contenant les fichiers exécutables à votre PATH afin que chaque outil puisse être exécuté de n'importe où. ](Https://qiita.com/dakc/items/e26d7540c98e59c6b101)

export PATH=/opt/postgresql12/bin:$PATH

La méthode ci-dessus est temporaire. Lorsque vous avez terminé le chronométrage, la valeur de PATH reviendra à la valeur d'origine. Si vous voulez qu'il soit toujours mémorisé, vous devez ajouter la commande ci-dessus au fichier qui s'exécute au démarrage. Par exemple, ~ / .bash_profile, / etc / profile ,,

① Ajouter un utilisateur

Le Site officiel recommande que l'accès aux données de la base de données soit limité à un utilisateur dédié. ..

As with any server daemon that is accessible to the outside world, it is advisable to run PostgreSQL under a separate user account. This user account should only own the data that is managed by the server, and should not be shared with other daemons.

Ajouter un nouvel utilisateur "postgres".

# useradd postgres

Un répertoire personnel pour l'utilisateur "postgres" est créé sous / home. S'il n'est pas créé, supprimez-le avec ** userdel postgres ** et spécifiez le répertoire personnel comme indiqué ci-dessous.


# useradd --create-home --home-dir /home/posgtres postgres
# ls -al /home
total 12
drwxr-xr-x 1 root     root     4096 Mar  8 04:32 .
drwxr-xr-x 1 root     root     4096 Mar  8 04:12 ..
drwx------ 2 postgres postgres 4096 Mar  8 04:32 posgtres
  • Créez un répertoire "data" directement sous ce répertoire personnel et sauvegardez les données DB. Je pense que "/ var / lib / pgsql / data" et "/ usr / local / pgsql / data" sont communs. Une chose à savoir ici est la ** propriété **. Comme mentionné ci-dessus, n'autorisez que l'utilisateur "postgres" afin qu'il ne soit pas accessible par d'autres utilisateurs.

② Initialisation des données

Ensuite, préparez les données et les fichiers de configuration requis pour démarrer le serveur de base de données. Le Site officiel déclare soigneusement ce qui suit.

Before you can do anything, you must initialize a database storage area on disk. We call this a database cluster. (The SQL standard uses the term catalog cluster.) A database cluster is a collection of databases that is managed by a single instance of a running database server. After initialization, a database cluster will contain a database named postgres, which is meant as a default database for use by utilities, users and third party applications. The database server itself does not require the postgres database to exist, but many external utility programs assume it exists. Another database created within each cluster during initialization is called template1. As the name suggests, this will be used as a template for subsequently created databases; it should not be used for actual work.

Ce processus est exécuté par l'utilisateur "postgres" créé précédemment.

# su postgres

Il existe d'autres moyens d'initialiser les données, mais je vais utiliser "pg_ctl". Vous pouvez effectuer les opérations suivantes avec cette ** commande unique **. ・ Initialisation de la base de données ・ Démarrez le serveur ・ Arrêtez le serveur ・ Redémarrez le serveur Etc Tout d'abord, exécutez le processus d'initialisation avec la commande suivante. ** - pgdata ** spécifie le répertoire dans lequel les données seront créées. Il sera créé même si le dossier spécifié n'existe pas, mais l'utilisateur "postgres" doit avoir l'autorisation de création. Cette fois, "data" est spécifié directement sous "/ home / postgres". Si vous vérifiez les autorisations lorsque vous avez créé l'utilisateur ci-dessus, vous pouvez voir que "/ home / postgres" a toutes les autorisations (lecture, écriture, exécution).

$ pg_ctl --pgdata=/home/posgtres/data initdb
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
...
...réduction
Success. You can now start the database server using:

    /opt/postgresql12/bin/pg_ctl -D /home/posgtres/data -l logfile start
  • Vous pouvez également écrire --pgdata comme -D.

③ Démarrez le serveur

Comme vous l'avez peut-être déjà remarqué, la commande de démarrage du serveur de base de données est en fait affichée à la toute fin lorsque le processus d'initialisation a été effectué plus tôt. À l'exception du paramètre ** -l **, la commande d'initialisation est exactement la même. Cependant, le dernier paramètre est "start" au lieu de "initdb". Spécifiez un fichier journal pour -l ou --log. Il y a un point à noter ici. L'utilisateur "postgres" doit avoir l'autorisation de créer des fichiers journaux dans le chemin spécifié ici. En tenant compte de ces éléments, exécutez la commande suivante pour démarrer le serveur de base de données.

$ pg_ctl --pgdata=/home/posgtres/data --log=/home/posgtres/db.log start
waiting for server to start.... done
server started
  • Au fait, le serveur sera démarré même si vous ne spécifiez pas -l ou --log.

④ Arrêtez le serveur

Il est facile d'arrêter le serveur DB. Spécifiez simplement l'arrêt à la fin.

$ pg_ctl --pgdata=/home/posgtres/data stop

pg_ctl est utile pour d'autres choses que le démarrage et l'arrêt. Consultez l'aide pour plus de détails.

[postgres@af6184923e89 /]$ pg_ctl --help
pg_ctl is a utility to initialize, start, stop, or control a PostgreSQL server.

Usage:
  pg_ctl init[db]   [-D DATADIR] [-s] [-o OPTIONS]
  pg_ctl start      [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]
                    [-o OPTIONS] [-p PATH] [-c]
  pg_ctl stop       [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]
  pg_ctl restart    [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]
                    [-o OPTIONS] [-c]
  pg_ctl reload     [-D DATADIR] [-s]
  pg_ctl status     [-D DATADIR]
  pg_ctl promote    [-D DATADIR] [-W] [-t SECS] [-s]
  pg_ctl logrotate  [-D DATADIR] [-s]
  pg_ctl kill       SIGNALNAME PID

...réduction

⑤ Connexion à la base de données

Commencez par démarrer le serveur DB en vous référant à (3) ci-dessus.

$ pg_ctl -D /home/posgtres/data -l /home/posgtres/db.log start
waiting for server to start.... done
server started

Ici, la commande "psql" est ajoutée. Il semble être appelé un terminal interactif PostgreSQL, mais vous pouvez le considérer comme un outil qui utilise le terminal pour interroger la base de données et afficher les résultats. Une base de données nommée "postgres" est créée lors de l'initialisation de la base de données. Exécutez simplement la commande psql pour vous connecter à cette base de données. Encore une fois, une chose à garder à l'esprit est que vous devez passer à l'utilisateur "posgres" et exécuter.

$ psql
psql (12.2)
Type "help" for help.

postgres=#

  • Bien que les paramètres soient omis ci-dessus, diverses spécifications peuvent être faites comme suit. Essayez d'exécuter ** psql --help **.
$ psql --host=localhost --port=5432 --username=postgres --no-password --dbname=postgres

Pour quitter psql, entrez "\ q" et appuyez sur la touche Entrée.

$ psql
psql (12.2)
Type "help" for help.

postgres=# \q
$

finalement

J'ai écrit sur la construction de PostgreSQL et comment se connecter au serveur. J'espère que cela vous sera utile.

Recommended Posts

Construire PostgreSQL à partir des sources
Installez PostgreSQL à partir du code source sur CentOS
Installer Python à partir de la source
Installez Apache 2.4.41 depuis la source
Installer ansible à partir du code source
La version source de SciPy 1.4 nécessite pybind11
Moteur Docker - Construction source CE
Installation d'Apache Maven (à partir des sources)
Installez Python à partir des sources avec Ansible
Compilez et installez Git à partir des sources.
[Note] Obtenir des données de PostgreSQL avec Python
Flux du code source à la création du format d'exécution