Je me suis un peu lassé de MySql et son fork MariaDB n’apporte pas grand-chose au produit. Du coup, je me lance et je teste PostgreSql. Après tout, c’est “The World’s Most Advanced Open Source Relational Database”.

Installation

Le plus simple est d’installer PostgreSql grâce au gestionnaire de paquets de sa distribution (ici apt sous Debian):

    
1sudo apt-get update
2sudo apt-get upgrade
3sudo apt-get install postgresql-13

Après quelques secondes, le serveur PostgreSql est installé et démarré.

Configuration

Avant d’avancer dans la création de base et de tables, il convient de changer le mot de passe par défaut et d’ajouter les utilisateurs nécessaires.

Changement du mot de passe par défaut

    
 1# d'abord passer en root
 2su -
 3# passer sur le compte postgres
 4su - postgres
 5# lancer le terminal PostgreSql
 6psql
 7# changer le mot de passe
 8\password
 9# quitter
10\q

Test de connexion

On va d’abord s’assurer que la base est bien démarrée puis on pourra tester que l’authentification fonctionne.

    
1sudo systemctl status postgresql@13-main | grep running

La réponse doit ressembler à ceci:

    
1Active: active (running) since ....

Ensuite, j’ai ajouté une connexion dans dBeaver (un super client SQL multibases):

Connexion PostgreSql

Connexion PostgreSql

Le test de connexion est positif:

PostgreSql: test de connexion

PostgreSql: test de connexion

Création d’un utilisateur

Une bonne pratique consiste a créer un utilisateur dédié à chaque application, avec les droits minimums (donc pas de DROP DATABASE par exemple). Ici je vais créer l’utilisateur “hged” avec la commande:

    
1create user 'hged' with encrypted password 'SuperPassword';

On peut vérifier que l’utilisateur est bien créé:

    
1SELECT usename FROM pg_catalog.pg_user;

Attention! La colonne n’est pas nommée “username” mais bien “usename”. Oui c’est surprenant.

Création d’une base de données

Pour créer une base, il suffit d’exécuter la commande suivante;

    
1create database homeged with owner='postgres' encoding='utf8';

Ensuite, on autorise l’utilisateur créé à l’étape précédente à manipuler uniquement les données:

    
1grant select, insert, update, delete on all tables in schema public to hged;

Création d’une table

La requête de création est plus simple qu’avec MySql puisqu’il n’y a pas à indiquer le type de stockage (InnoDB par exemple) ni même l’encodage par défaut (puisque configuré lors de la création de la base). Autre bonus sympa: le type Boolean existe (donc plus besoin d’utiliser un tinyint par exemple).

    
1CREATE TABLE syst_user (
2	id varchar(36) NULL,
3	login varchar(50) NULL,
4	password varchar(128) NULL,
5	registration TIMESTAMP NULL,
6	lastLogin TIMESTAMP NULL,
7	enabled BOOLEAN NULL,
8	CONSTRAINT syst_user_PK PRIMARY KEY (id)
9);

Utilisation avec TomEE et Apache Deltaspike

Ajouter le connecteur Jdbc

Pour ajouter le connecteur Jdbc, on va éditer le fichier pom.xml et ajouter cette dépendance:

    
1<dependency>
2<groupId>org.postgresql</groupId>
3<artifactId>postgresql</artifactId>
4<version>42.3.1</version>
5</dependency>

Ensuite on modifie le fichier WEB-INF/resources.xml comme ceci (en bleu):

    
1<Resource id="homeGedDB" type="javax.sql.DataSource">
2        JdbcDriver org.postgresql.Driver
3        JdbcUrl jdbc:postgresql://localhost:5432/homeged
4        UserName homeged
5        Password SuperPassword
6    </Resource>

Et voilà! Rien de plus compliqué que cela.

Conclusion

PostgreSql est facile à installer et remplace sans difficulté MySql. C’est plutôt encourageant et je pense que je vais continuer à l’utiliser afin de voir si son titre est justifié ou non. Affaire à suivre donc.