API Rest avec PostgreSQL
Il est très simple de migrer nos API vers une BD PostgreSQL.
PostgreSQL et Devilbox
Devilbox à déjà une instance de PostgreSQL qui est lancé quand on le démarre, pratique si on veut effectuer des tests. Elle est accessible via le port 5432 en localhost.
Par défaut le nom d'utilisateur est postgres et le mot de passe est vide. Il y a aussi une base de données appelée postgres où vous allez créer vos table.
À l'aide de votre IDE préféré créez une connexion vers l'instance PostgreSQL. Dans DBeaver, quand vous créer une nouvelle connexion vous devez choisir PostgreSQL au lieu de MariaDB. Vous devrez surement installer des pilotes, juste à suivre les indications.
Migration des données MySQL vers une BD PostgreSQL
Le plus simple à notre niveau est de refaire un script sql de création de tables. Les instructions et les types de données sont sensiblement les mêmes à quelques exceptions prêt. Voici un exemple de création de la table pokemon qu'on a utilisé à l'exercice 04.
create_table_pokemon.sql | |
---|---|
Dans PosgreSQL il existe un concept de schemas qu'on ne couvrira pas (dans mon exemple public est le nom du schema). Le seul autre changement qu'on peut remarquer ici est au niveau du champ id qui est de type SERIAL, c'est l'équivalent du champs auto-increment.
Manuel
- Pour plus de détail sur PostgreSQL : https://docs.postgresql.fr/16/
Connexion depuis un projet Express.js
Nous allons conserver la même structure de projet qu'on a utilisé jusqu'à maintenant. Dans le fichier .env ajoutez les entrées suivantes :
Les valeurs ci-dessus correspondent à une connexion à l'instance PostgreSQL de Devilbox.
Ensuite installer le module PG avec npm.
Maintenant créer un nouveau fichier nommé db_pg.js
dans le répertoire ./src/config
et copiez le code suivant :
dp_pg.js | |
---|---|
Le fonctionnement est similaire à ce qu'on faisait avec MySQL, on créé un pool de connexion qui va être utilisé à chaque fois qu'on veut faire une requête.
La dernière chose à faire est d'utilisé le fichier db_pg.js
au lieu de db.js
dans vos modèles.
script.js | |
---|---|
Modification des requètes préparées
La syntaxe pour passer des paramêtres à une requête préparée avec le module PG est un peu différente, vous allez devoir les modifier. Au lieu d'utiliser le caractère ? pour indiquer un paramêtre vous devez utiliser le signe de dollar suivi d'un nombre incrémenté à partir de 1.
const requete = 'SELECT id, nom, type_primaire, type_secondaire, pv, attaque, defense FROM public.pokemon WHERE type_primaire LIKE $1;';
// un autre exemple
const requete = 'INSERT INTO pokemon (nom, type_primaire, type_secondaire, pv, attaque, defense) VALUES ($1, $2, $3, $4, $5, $6)';
Vous devez aussi modifier la façon dont vous récupérez les résultats. Auparavant quand on lançait la requête avec sql.query
on recevait un objet resultat qui contenait un tableau de toutes les lignes du résultat de la requête. Avec PG vous devez faire resultat.rows
pour obtenir les résultats.
Et voilà! Vous êtes maintenant prêt à utiliser PostgreSQL