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
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]
....
....
Les bibliothèques nécessaires à la construction sont décrites à la page suivante. https://www.postgresql.org/docs/12/install-requirements.html
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.
Ubuntu.commander
# apt-get install libreadline-dev zlib1g-dev
CentOS.commander
# yum install readline-devel zlib-devel
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
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.
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
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 ,,
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
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
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
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
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=#
$ 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
$
J'ai écrit sur la construction de PostgreSQL et comment se connecter au serveur. J'espère que cela vous sera utile.
Recommended Posts