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):

1
2
3
sudo apt-get update
sudo apt-get upgrade
sudo 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
 2
 3
 4
 5
 6
 7
 8
 9
10
# d'abord passer en root
su -
# passer sur le compte postgres
su - postgres
# lancer le terminal PostgreSql
psql
# changer le mot de passe
\password
# quitter
\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.

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

La réponse doit ressembler à ceci:

1
Active: 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:

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

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

1
SELECT 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;

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

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

1
grant 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).

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

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
2
3
4
5
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.3.1</version>
</dependency>

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

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

Commentaires

C’est par ici