Linux Debian 10 : Installer et utiliser PostgreSQL
Source : https://www.linuxtricks.fr/wiki/debian-10-installer-et-utiliser-postgresql
Table des matières
- Introduction
- Installation
- Paramétrer PostgreSQL
- Utiliser postgresql
- Connexion à un hôte PostgreSQL distant
Introduction
Dans cet article, nous allons voir comment installer et utiliser PostgreSQL sur Linux Debian 10 !
Installation
Dans un premier temps, on s’assure que le système est à jour :
$ sudo apt update $ sudo apt full-upgrade
On installe ensuite le moteur de base de données :
$ sudo apt install postgresql postgresql-client
On peut aussi installer phppgadmin (Interface web de gestion de PostgreSQL) ou pgadmin3 (client lourd de gestion de PostgreSQL)
Par défaut, le nom d’utilisateur s’appelle postgres et la base de données par défaut postgres aussi.
Pour gérer le service, c’est avec systemd :
Si le service n’est pas démarré ni activé au démarrage, on l’active et on le démarre ainsi :
$ sudo systemctl enable --now postgresql Synchronizing state of postgresql.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable postgresql $
Paramétrer PostgreSQL
Fichier de configuration
Le fichier principal de postgresql est /etc/postgresql/11/main/postgresql.conf
On peut modifier quelques paramètres :
$ sudo vi /etc/postgresql/11/main/postgresql.conf
Par exemple, pour se connecter en dehors de la machine locale (autoriser les connexions de toutes les IP) :
listen_addresses = '*'
Le fichier gérant les connexions des clients est /etc/postgresql/11/main/pg_hba.conf
On peut modifier quelques paramètres :
vi /etc/postgresql/11/main/pg_hba.conf
Par exemple, autoriser les clients à se connecter depuis notre réseau local :
host all all 192.168.21.0/24 md5
Après chaque modification, il ne faut pas oublier de redémarrer postgresql :
$ sudo systemctl restart postgresql
Définir un mot de passe à l’administrateur
Toutes les modifications doivent se faire avec l’utilisateur postgres. L’administrateur postgres s’appelle … postgres
On se connecte (depuis root) à cet utilisateur :
$ su - postgres
Puis on définit un mot de passe depuis le client SQL « psql » :
$ psql -c "ALTER USER postgres WITH password 'monsupermotdepasse'"
Créer une base de données et des utilisateurs
Créons une base de donnée nommée « dupontsarl« , et un utilisateur « jules » dont le mot de passe sera « medor » :
postgres=# create database dupontsarl; CREATE DATABASE postgres=# create user jules with encrypted password 'medor'; CREATE ROLE postgres=# grant all privileges on database dupontsarl to jules; GRANT postgres=# postgres=# \c dupontsarl You are now connected to database "dupontsarl" as user "postgres". dupontsarl=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jules; GRANT dupontsarl=#
Utiliser postgresql
Lister les bases de données
Pour lister les bases de données :
postgres@triton:~$ psql -l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges ------------+----------+----------+-------------+-------------+----------------------- dupontsarl | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres + | | | | | postgres=CTc/postgres+ | | | | | jules=CTc/postgres postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (4 rows) postgres$
Se connecter à une base de données
Pour se connecter à une base de données :
postgres@triton:~$ psql dupontsarl psql (11.18 (Debian 11.18-0+deb10u1)) Type "help" for help. dupontsarl=# Une fois dans la session psql, on peut se connecter à une autre base de données avec la commande "\c" : postgres=# \c durand You are now connected to database "durand" as user "postgres". dupontsarl=#
Commandes SQL de base
Après, on peut saisir n’importe quelle commande de type SQL :
dupontsarl=# ALTER USER utilisateurbdd WITH password 'supermdp'; ALTER ROLE
Créer une table
dupontsarl=# CREATE TABLE eleves ( id SERIAL PRIMARY KEY, nom CHAR(64), age INT); CREATE TABLE dupontsarl=#
Pour lister les tables existantes
dupontsarl=# \dt
List of relations
Schema | Name | Type | Owner
——–+——–+——-+———-
public | eleves | table | postgres
(1 row)
dupontsarl=#
Insérer des données dans une table
dupontsarl=# INSERT INTO eleves (nom, age) VALUES ('Charlotte',25); INSERT 0 1 dupontsarl=#
Lister les données
dupontsarl=# SELECT * FROM eleves; id | nom | age ----+------------------------------------------------------------------+----- 1 | Charlotte | 25 (1 row) dupontsarl=#
Pour supprimer une table
dupontsarl=# DROP TABLE eleves; DROP TABLE dupontsarl=#
Quitter la console Postgres
Et pour quitter :
\q
Supprimer une base de données
Pour supprimer une base de données :
#= dropdb masuperbdd
Connexion à la base depuis PHP
Les commandes ci-dessous sont pour Linux Debian
Installer le paquet :
toto@triton:~$ sudo apt install php-pgsql
[sudo] password for toto:
...
Do you want to continue? [Y/n] y
...
Creating config file /etc/php/7.3/mods-available/pdo_pgsql.ini with new version
Setting up php-pgsql (2:7.3+69) ...
Processing triggers for libapache2-mod-php7.3 (7.3.31-1~deb10u1) ...
toto@triton:~$
Redémarrer apache
$ sudo systemctl restart apache2
$
Créons un script
<?php
$host = 'localhost';
$dbname = 'dupontsarl';
$username = 'jules';
$password = 'medor';
$conn = pg_connect("host=$host dbname=$dbname user=$username password=$password")
or die ("Could not connect to server\n");
$requete="SELECT id, nom, age
FROM eleves";
$result = pg_query($conn, $requete) or die("<br>Echec d'éxecution de la requête: $requete\n");
while ($row = pg_fetch_row($result)) {
echo "$row[0] $row[1] $row[2]\n";
}
pg_close($conn);
?>
Résultat
Connexion à un hôte PostgreSQL distant
Sources :
$ sudo vi /etc/postgresql/11/main/postgresql.conf
listen_addresses = '*'
Puis
$ sudo vi /etc/postgresql/11/main/pg_hba.conf
host all all 0.0.0.0/0 md5
$ sudo systemctl restart postgresql
$