Bonjour,
J'utilise depuis quelques temps le SGBD PostgreSQL à titre perso.
Voici un modeste tutoriel pour démarrer avec PostgreSQL. N'hésitez pas à me faire des retours.
PostgreSQL
Introduction
PostgreSQL est un système open source de gestion de base de données relationnelle et objet (SGBDRO) fonctionnant en mode Client-Serveur.
Ecrit en C et developpé depuis 1995, PostgreSQL est un logiciel mutliplateforme dont le développement et la maintenance sont assurés par une communauté mondiale de développeurs et d'entreprises. La dernière version disponible est la 9.6.1.
Pour plus d'informations, rendez-vous sur le site officiel.
PostrgeSQL est également très bien documenté, les versions françaises se trouvent ici.
Les avantages de PostgreSQL
Comparé à d'autres SGBD, PostgreSQL supporte la plupart des fonctionnalités majeures de la norme SQL:2011. Pour plus d'informations sur la compatibilié SQL des différents SGBD, je vous invite à parcourir les slides de Markus Winand ou parcourir ses sites Use The Index Luke et Modern SQL.
Un autre avantage de PostgreSQL est la possiblité d'utiliser des types "complexes" (Array, JSON/JSONB, XML, Hstore facilitant la dénormalisation des données et permettant de "faire du NoSQL" dans un SGBD relationnel.
Vous pouvez également créer vos propres types. D'ailleurs, chaque table dans PostgreSQL est un type composite du nom de la table créée.
Pour en savoir plus sur les types de PostgreSQL et sur les fonctions d'agrégats .
PostgreSQL est extensible et dispose d'un très grand nombre d'extensions (Ex: PostGIS pour la gestion des données spatiales).
PostgreSQL offre également la possiblité de créer des fonctions, des procédures grâce au support natif de langage tels que le PL/pqSQL, PL/Python, PL/Perl. D'autres langages peuvent être ajouter facilement comme le PL/v8 qui permet de faire du JavaScript dans le SGBD.
Pour en terminer sur les avantages de PostgreSQL, en voici quelques autres :
- Les schémas.
- Le SGBD dispose d'un système de notification asynchrone natif (Listen/Notify).
- Il implémente des portions de la norme SQL/MED permettant d'accéder en SQL à des données qui résident en dehors de PostgreSQL (Foreign data wrappers).
- La création de vue matérialisée est possible.
- Un système de réplication est également disponible.
- La création de plusieurs schémas dans une même base.
- Héritage de tables.
- L'opérateur RETURNING.
- Index partiels.
- et bien d'autres...
Installation
Nous nous focaliserons sur l'installation sur une machine Debian Jessie. Si vous disposez d'un autre système, je invite à recupérer l'installeur depuis ce lien.
Par défaut, la version de PostgreSQL dans la distribution Jessie est la 9.4. Si vous souhaiter utiliser une version plus à jour, je vous invite à suivre le lien
Que vous installiez PostgreSQL depuis un dépot tiers ou depuis le dépot Jessie la commande est la suivante :
Cette commande installera le serveur et client de PostgreSQL et créera un utilisateur postgres (équivalent de l'utilisateur root avec MySQL). Une fois l'installation terminée, le serveur PosgreSQL demarrera.
Voici quelques commandes de base pour lancer / arrêter / recharger / redémarrer le serveur PostgreSQL:
- sudo service postgresql start
- sudo service postgresql stop
- sudo service postgresql reload
- sudo service postgresql restart
Configuration
Par défaut, la configuration de PostgreSQL se trouve dans le dossier /etc/postgresql/X.X/main/ où X.X correspond au numéro de version installé, dans moncas c'est la 9.5.
Dans ce dossier, les fichiers qui nous intéressent sont les suivants :
- pg_hba.conf, contient les configuration pour l'authentification
- postgresql.conf, contient les configurations
Le fichier pg_hba.conf permet de gérer les configurations d'authentification du client. Ce fichier permet entre autres de filtrer les machines, utilisateurs, bases de données acessibles.
Avant de faire un modification sur le fichier, je vous conseille d'en réailiser une sauvegarde.
Le fichier postgresql.conf, contient les configurations globales (activation des logs, port, adresses d'écoute,...). C'est ce fichier qui sera notamment altéré lorsque vous voudrez améliorer les performances de PostgreSQL. Tout comme pour le fichier pg_hba.conf, je vous conseille de réailiser une sauvegarde avant toute modification.
Psql, le terminal interactif PostgreSQL
psql est une interface en mode texte pour PostgreSQL. Il permet de saisir, exécuter et visualiser des requêtes SQL et leurs résultats. Il dispose également de quelques raccourcis pour lister les tables, visualiser les index, ... , sans passer par du SQL.
- Exemple psql
$ su postgres $ psql template1 template1=# CREATE USER tester WITH PASSWORD 'test_password'; template1=# CREATE DATABASE "test_database"; template1=# GRANT ALL PRIVILEGES ON DATABASE "test_database" to tester; template1=# \q Dans l'exemple ci-dessus, je :
- change d'utilisateur système pour me mettre en postgres (utilisateur créer lors de l'installation)
- me connecte à la base template1 (base crée par défaut à lors de l'installation) à l'aide de psql
- crée un utilisateur "tester" avec comme mot de passe "test_password"
- crée une base de donnée "test_database"
- donne toute les permissions à l'utilisateur "tester" sur "test_database"
- quitte le terminal
Attention à ne pas oublier le ";" à la fin des requêtes.
Général
Connexion
Informations sur la connexion
Nettoyer l'écran
Déconnexion
Base de données
Lister les bases
Connexion
Création
Suppression
Utilisateurs
Lister les rôles
Création
Suppression
Modification du mot de passe
Droit d'accés
Autoriser tous les droits d'accès à une base de données
Autoriser la connexion à une base de données
Autoriser l'USAGE pour un schéma
Autoriser l'exécution d'une fonction
Autoriser le CRUD sur toutes les tables
Autoriser le CRUD sur une table
Autoriser le SELECT sur toutes les tables
Schema
Lister les schémas
Création
Suppression
Tables
Lister des tables de la base courante
Lister les tables (Global)
Lister les tables du schema
Création
Suppression
Ajout d'une colonne
Modification d'une colonne
Suppression d'une colonne
Création d'une clé primaire auto-incrementée
Modification d'une colonne en clé primaire auto-incrementée
Insérer dans une table avec une clé primaire auto-incrementée
Scripting
Exécuter un script local
Sauvegarder une base
Sauvegarder un schema
Restaurer une base
Restaurer un schema
Exporter une table dans un fichier CSV
Exporter une table (X colonnes), dans un fichier CSV
Importer un fichier CSV dans une table
Importer un fichier CSV (X colonnes) dans une table
Quelques outils pour PostgreSQL
- PgAdmin III et PgAdmin 4 => Client GUI pour travailler avec PostgreSQL
- PostGIS => Extension spatiale
- Pgloader => Charger des données (migration de données depuis MySQL, CSV,...)
- PgTune => Outil de calcul pour mieux configurer PostgreSQL
- Pomm => OMM PHP
- Extension native
- PGXN Client => Installer plus facilement des extensions
- Multicorn => Pour création des foreigns data wrappers plus facilement
- Listing de ressources