Installez PostgreSQL 13 sur CentOS 7.5

environnement

PostgreSQL 13.0 est sorti le 24/09/2020, je vais donc l'installer.

L'environnement est le suivant.

La procédure d'installation est presque la même que pour PostgreSQL 12 ci-dessous.

Installation des bibliothèques associées à LLVM

À partir de la version 12.3, les bibliothèques associées à LLVM sont requises pour installer postgresXX-devel. postgresXX-devel est utilisé lors de la compilation d'extensions. Si vous souhaitez simplement exécuter PostgreSQL, vous n'avez pas à l'installer.

# yum -y install epel-release centos-release-scl

Installer le référentiel PostgreSQL yum

Installez le package de référentiel PostgreSQL pour CentOS. Une liste des URL des packages de référentiel pour chaque système d'exploitation est disponible sur les sites suivants.

https://yum.postgresql.org/repopackages.php

# yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
~ Omis ~
Running transaction
  Installing : pgdg-redhat-repo-42.0-13.noarch                                                                                                     1/1 
  Verifying  : pgdg-redhat-repo-42.0-13.noarch                                                                                                     1/1 

Installed:
  pgdg-redhat-repo.noarch 0:42.0-13                                                                                                                    

Complete!

Installez PostgreSQL

Installez PostgreSQL.

# yum -y install postgresql13-contrib postgresql13-devel

~ Omis ~
Installed:
  postgresql13-contrib.x86_64 0:13.0-1PGDG.rhel7                              postgresql13-devel.x86_64 0:13.0-1PGDG.rhel7                             

Dependency Installed:
  audit-libs-python.x86_64 0:2.8.5-4.el7           checkpolicy.x86_64 0:2.5-8.el7                devtoolset-7-binutils.x86_64 0:2.28-11.el7           
  devtoolset-7-gcc.x86_64 0:7.3.1-5.16.el7         devtoolset-7-gcc-c++.x86_64 0:7.3.1-5.16.el7  devtoolset-7-libstdc++-devel.x86_64 0:7.3.1-5.16.el7 
  devtoolset-7-runtime.x86_64 0:7.1-4.el7          libcgroup.x86_64 0:0.41-21.el7                libedit-devel.x86_64 0:3.0-12.20121213cvs.el7        
  libicu.x86_64 0:50.2-4.el7_7                     libicu-devel.x86_64 0:50.2-4.el7_7            libsemanage-python.x86_64 0:2.5-14.el7               
  libxslt.x86_64 0:1.1.28-5.el7                    llvm-toolset-7-clang.x86_64 0:5.0.1-4.el7     llvm-toolset-7-clang-libs.x86_64 0:5.0.1-4.el7       
  llvm-toolset-7-compiler-rt.x86_64 0:5.0.1-2.el7  llvm-toolset-7-libomp.x86_64 0:5.0.1-2.el7    llvm-toolset-7-llvm-libs.x86_64 0:5.0.1-8.el7        
  llvm-toolset-7-runtime.x86_64 0:5.0.1-4.el7      llvm5.0.x86_64 0:5.0.1-7.el7                  llvm5.0-devel.x86_64 0:5.0.1-7.el7                   
  llvm5.0-libs.x86_64 0:5.0.1-7.el7                ncurses-devel.x86_64 0:5.9-14.20130511.el7_4  policycoreutils-python.x86_64 0:2.5-34.el7           
  postgresql13.x86_64 0:13.0-1PGDG.rhel7           postgresql13-libs.x86_64 0:13.0-1PGDG.rhel7   postgresql13-server.x86_64 0:13.0-1PGDG.rhel7        
  python-IPy.noarch 0:0.75-6.el7                   scl-utils.x86_64 0:20130529-19.el7            setools-libs.x86_64 0:3.3.8-4.el7                    

Dependency Updated:
  audit.x86_64 0:2.8.5-4.el7              audit-libs.x86_64 0:2.8.5-4.el7    libselinux.x86_64 0:2.5-15.el7    libselinux-python.x86_64 0:2.5-15.el7   
  libselinux-utils.x86_64 0:2.5-15.el7    libsemanage.x86_64 0:2.5-14.el7    libsepol.x86_64 0:2.5-10.el7      policycoreutils.x86_64 0:2.5-34.el7     

Complete!

PostgreSQL est installé sous "/ usr / pgsql-13 /".

# ls -l /usr/pgsql-13/
total 20
drwxr-xr-x. 2 root root 4096 Sep 25 23:11 bin
drwxr-xr-x. 3 root root   23 Sep 25 23:11 doc
drwxr-xr-x. 6 root root 4096 Sep 25 23:11 include
drwxr-xr-x. 5 root root 4096 Sep 25 23:11 lib
drwxr-xr-x. 8 root root 4096 Sep 25 23:11 share

Démarrage automatique de PostgreSQL

Exécutez la commande suivante pour démarrer PostgreSQL automatiquement.

# systemctl enable postgresql-13.service

Création d'un cluster de base de données

Créez un cluster de base de données. Je cours en tant qu'utilisateur root. Le fichier de base de données est créé par défaut dans "/ var / lib / pgsql / 13 / data /", mais cette fois il est changé en "/ data /" et ci-dessous. Il peut être spécifié par la variable d'environnement "PGDATA" dans le fichier postgresql-13.service.

# vi /usr/lib/systemd/system/postgresql-13.service

Changer avant)
Environment=PGDATA=/var/lib/pgsql/13/data/
Après le changement)
Environment=PGDATA=/data/

# systemctl daemon-reload

Exécutez ensuite la commande suivante pour créer le cluster de base de données.

# PGSETUP_INITDB_OPTIONS="-E UTF8 --no-locale" /usr/pgsql-13/bin/postgresql-13-setup initdb
Initializing database ... OK

Confirmez qu'il est généré sous "/ data /".

# cat /data/PG_VERSION 
13

Démarrez PostgreSQL

Ajoutez le répertoire bin PostgreSQL au chemin avant de démarrer.

# su - postgres

/var/lib/pgsql/.pgsql_Ajoutez le chemin à votre profil.

# vi /var/lib/pgsql/.pgsql_profile
PATH=/usr/pgsql-13/bin:$PATH
export PATH

Modifiez PGDATA.

# vi /var/lib/pgsql/.bash_profile
#PGDATA=/var/lib/pgsql/12/data
PGDATA=/data

# source ~/.bash_profile

Démarrez PostgreSQL avec "pg_ctl start".

$ pg_ctl start
2020-09-25 23:16:08.611 CEST [12910] HINT:  Future log output will appear in directory "log".
 done
server started

Vérification de la base de données

Vérifions le cluster de base de données créé. Affiche une liste de versions et de bases de données.

$ psql -V
psql (PostgreSQL) 13.0
$ psql -l
                             List of databases
   Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges   
-----------+----------+----------+---------+-------+-----------------------
 postgres  | postgres | UTF8     | C       | C     | 
 template0 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
 template1 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
(3 rows)

Création d'utilisateurs et de bases de données

Créez un utilisateur ("testuser") et une base de données ("testdb").

$ createuser --login --pwprompt testuser
Enter password for new role: 
Enter it again:

$ createdb --owner=testuser testdb

Autoriser les connexions externes

PostgreSQL n'autorise pas la connexion à distance par défaut, modifiez donc les paramètres.

# vi /data/postgresql.conf
* Par défaut, "/var/lib/pgsql/13/data/postgresql.conf」

Changer avant)
#listen_addresses = 'localhost'
Après le changement)
listen_addresses = '*'

Puis modifiez pg_hba.conf.

# vi /data/pg_hba.conf
* Par défaut, "/var/lib/pgsql/13/data/pg_hba.conf」

# "local" is for Unix domain socket connections only
local   testdb          testuser                                md5
→ Ajout d'une ligne pour que testuser puisse se connecter à testdb de local à md5.
local   all             all                                     peer
# IPv4 local connections:
host    all             all             192.168.10.0/24         md5
→192.168.10.0/Ajout d'une ligne pour que vous puissiez vous connecter à partir de 24 (cet environnement de serveur).
host    all             all             127.0.0.1/32            ident

Rechargez les modifications de configuration.

$ pg_ctl reload
* Ou systemctl reload postgresql-13 devrait être bien.

Changer le mot de passe de l'utilisateur postgres (bien que vous n'ayez pas à le faire)

$ psql
alter role postgres with password 'postgres';

Vérifier la connexion à distance (A5: j'ai vérifié la connexion depuis SQL, mais l'explication est omise)

Pour vérifier la connexion depuis le local, procédez comme suit.

$ psql testdb testuser

Password for user testuser: 
psql (13.0)
Type "help" for help.

testdb=> 

Créer une table

Créez une table et remplissez-la de données.

testdb=> create table test (id int, value text);
CREATE TABLE
testdb=> insert into test (id, value) values (1, 'test text');
INSERT 0 1
testdb=> select * from test;
 id |   value   
----+-----------
  1 | test text
(1 row)

"\ D" affiche une liste de tables et "\ du" affiche une liste de rôles.

testdb=> \d
        List of relations
 Schema | Name | Type  |  Owner   
--------+------+-------+----------
 public | test | table | testuser
(1 row)

testdb=> \du
                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 testuser  |                                                            | {}

Autres changements de paramètres

Il semble que PostgreSQL dispose de divers paramètres définis sur de petites valeurs dans leur ensemble. J'ai changé uniquement le tampon partagé de 128 Mo à 512 Mo (20% à 40% de la mémoire totale semble être bonne). Il existe de nombreux autres paramètres qui devraient être modifiés, mais comme ils dépendent du système, y compris le tampon partagé, nous ne les modifierons pas cette fois.

Voici comment changer le tampon partagé.

# vi /data/postgresql.conf
* Par défaut, "/var/lib/pgsql/13/data/postgresql.conf」

Changer avant)
shared_buffers = 128MB
Après le changement)
shared_buffers = 512MB

Tout ce que vous avez à faire est de redémarrer PostgreSQL.

Paramètres du journal

J'ai changé les paramètres du journal comme suit.

$ vi /data/postgresql.conf

Avant le changement, c'est comme suit.

log_filename = 'postgresql-%a.log'
log_rotation_size = 0
#log_min_duration_statement = -1
#log_checkpoints = off
#log_connections = off
#log_disconnections = off
#log_lock_waits = off

Après le changement, c'est comme suit.

log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_rotation_size = 1GB
log_min_duration_statement = 500ms
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0

Exécutez le benchmark avec pgbench

Dans PostgreSQL, l'outil de référence pgbench est inclus en standard. Tout d'abord, créez un tableau et des données pour l'analyse comparative avec pgbench.

$ pgbench -i -s 10 testdb
dropping old tables...
NOTICE:  table "pgbench_accounts" does not exist, skipping
NOTICE:  table "pgbench_branches" does not exist, skipping
NOTICE:  table "pgbench_history" does not exist, skipping
NOTICE:  table "pgbench_tellers" does not exist, skipping
creating tables...
generating data (client-side)...
1000000 of 1000000 tuples (100%) done (elapsed 9.02 s, remaining 0.00 s)
vacuuming...
creating primary keys...
done in 12.99 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 9.12 s, vacuum 0.87 s, primary keys 3.00 s).

Une fois que les données sont prêtes, il est temps d'exécuter le benchmark.

$ pgbench -c 10 -j 10 -t 2000 -N testdb
starting vacuum...end.
transaction type: <builtin: simple update>
scaling factor: 10
query mode: simple
number of clients: 10
number of threads: 10
number of transactions per client: 2000
number of transactions actually processed: 20000/20000
latency average = 4.910 ms
tps = 2036.732154 (including connections establishing)
tps = 2039.124174 (excluding connections establishing)

"-c 10" représente le nombre de clients "10" et "-t 1000" représente le nombre de transactions par client.

Le taux de succès du cache après l'exécution du benchmark peut être vu comme suit.

select relname,
   round(heap_blks_hit * 100 / (heap_blks_hit+heap_blks_read), 2)
   as cache_hit_ratio from pg_statio_user_tables
     where heap_blks_read > 0 order by cache_hit_ratio;

     relname      | cache_hit_ratio 
------------------+-----------------
 test             |           50.00
 pgbench_accounts |           63.00
 pgbench_branches |           82.00
 pgbench_tellers  |           95.00
 pgbench_history  |           99.00
(5 rows)

Le taux de réussite du cache de l'index est le suivant.

select relname, indexrelname,
   round(idx_blks_hit * 100 / (idx_blks_hit + idx_blks_read), 2)
   as cache_hit_ratio from pg_statio_user_indexes
     where idx_blks_read > 0 order by cache_hit_ratio;

     relname      |     indexrelname      | cache_hit_ratio 
------------------+-----------------------+-----------------
 pgbench_tellers  | pgbench_tellers_pkey  |           33.00
 pgbench_branches | pgbench_branches_pkey |           50.00
 pgbench_accounts | pgbench_accounts_pkey |           98.00
(3 rows)

référence

Recommended Posts

Installez PostgreSQL 12 sur Centos8
Installez PostgreSQL 13 sur CentOS 7.5
Installez Golang sur CentOS 8
Installez Vertica 10.0 sur CentOS 6.10
Installez Python 3 sur CentOS 7
Installez kuromoji sur CentOS7
Installez PostGIS 2.5.5 sur CentOS7
Installez jpndistrict sur CentOS 7
Installez Redmine 4.1.1 sur CentOS 7
Installation de Smokeping sur CentOS7
Installez OpenFOAM v2006 sur CentOS
Installez Apache sur CentOS sur VirtualBox
Installez Ruby 2.7 sur CentOS 7 (SCL)
Remarque: installez PostgreSQL 9.5 sur Ubuntu 18.04
Installation de Java Open JDK 8 sur CentOS 7
Comment installer MariaDB 10.4 sur CentOS 8
Installez apache 2.4.46 à partir des sources sur CentOS 7
Étapes pour installer devtoolset-6 sur CentOS 7
Installez Java 9 sur Windows 10 et CentOS 7
[CentOS] Installez apache-loggen
Installez samba4 à partir du code source sur CentOS8
Installez le client de messagerie Web Rainloop sur CentOS 8
Comment installer la beta php8.0 sur CentOS8
Installez NextCloud sur CentOS 7 avec Alibaba Cloud ECS
Installez Corretto 8 sur Windows
Tutoriel Maven sur CentOS 7
Installez OpenJDK sur macOS
Installez Java sur Mac
Installation de Docker sur CentOS 6
Utiliser perltidy sur CentOS 8
Installez pyqt5 sur ubuntu
Essayez OpenLiteSpeed sur CentOS8
Tomcat v8 sur CentOS7
Exécutez PostgreSQL sur Java
Installez Docker sur Manjaro
Installation de Zabbix 5 sur CentOS 8
Installez Ruby sur Ubuntu 20.04
Utilisez mod_auth_cas sur CentOS 8
Installez lombok sur SpringToolSuite4
Installation d'OpenJDK sur CentOS7
Installez openjdk11 sur Mac
Installez OpenJDK 8 sur mac
Installer le wiki de documentation BookStack sur Elastic Compute Service sur CentOS 7
Installez le dernier pilote matériel d'ELRepo sur CentOS
Installez MySQL 5.6 sur CentOS6 [Comment spécifier la version]
Installez ag (le chercheur d'argent) [sur CentOS / Ubuntu / Mac]
Essayez Rabbit MQ + PHP sur CentOS
Installez Docker sur Raspberry Pi
Installez Docker sur Windows 10 PRO
Réseau installer CentOS 8 avec Kickstart.
Installez OpenJDK7 (JAVA) sur ubuntu 14.04