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 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.
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 :
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 :
sudo apt-get install postgresql postgresql-client
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:
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 :
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 PostgreSQLpsql 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.
$ 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 :
Attention à ne pas oublier le ";" à la fin des requêtes.
$ psql
$ psql -U <username> -d <database> -h <hostname> -p <port>
$ psql --username=<username> --dbname=<database> --host=<hostname> --port=<port>
\conninfo
(CTRL + L)
\q
\!
\l
\c <database_name>
CREATE DATABASE <database_name> WITH OWNER <username>;
DROP DATABASE IF EXISTS <database_name>;
SELECT rolname FROM pg_roles;
CREATE USER <user_name> WITH PASSWORD '<password>';
DROP USER IF EXISTS <user_name>;
ALTER ROLE <user_name> WITH PASSWORD '<password>';
GRANT ALL PRIVILEGES ON DATABASE <db_name> TO <user_name>;
GRANT CONNECT ON DATABASE <db_name> TO <user_name>;
GRANT USAGE ON SCHEMA public TO <user_name>;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO <user_name>;
GRANT SELECT, UPDATE, INSERT, DELETE ON ALL TABLES IN SCHEMA public TO <user_name>;
GRANT SELECT, UPDATE, INSERT ON <table_name> TO <user_name>;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO <user_name>;
\dn
SELECT schema_name FROM information_schema.schemata;
SELECT nspname FROM pg_catalog.pg_namespace;
CREATE SCHEMA IF NOT EXISTS <schema_name>;
DROP SCHEMA IF EXISTS <schema_name> CASCADE;
\dt
SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;
\dt *.*.
SELECT * FROM pg_catalog.pg_tables
\d <table_name>
\d+ <table_name>
SELECT column_name, data_type, character_maximum_length
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = '<table_name>';
CREATE TABLE <table_name>(
<column_name> <column_type>,
<column_name> <column_type>
);
DROP TABLE IF EXISTS <table_name> CASCADE;
ALTER TABLE <table_name> IF EXISTS
ADD <column_name> <data_type> [<constraints>];
ALTER TABLE <table_name> IF EXISTS
ALTER <column_name> TYPE <data_type> [<constraints>];
ALTER TABLE <table_name> IF EXISTS
DROP <column_name>;
CREATE TABLE <table_name> (
<column_name> SERIAL PRIMARY KEY
);
ALTER TABLE <table_name>
ADD COLUMN <column_name> SERIAL PRIMARY KEY;
INSERT INTO <table_name>
VALUES (DEFAULT, <value1>);
INSERT INTO <table_name> (<column1_name>,<column2_name>)
VALUES ( <value1>,<value2> );
psql -U <username> -d <database> -h <host> -f <local_file>
pg_dump -a <database_name>
pg_dump --data-only <database_name>
pg_dump -s <database_name>
pg_dump --schema-only <database_name>
pg_restore -a <database_name> <file_pathway>
pg_restore -d <database_name> <file_pathway>
COPY <table_name> TO '<file_path>' DELIMITER ',' CSV;
\copy <table_name> TO '<file_path>' DELIMITER ',' CSV
COPY <table_name>(<column_1>,<column_1>,<column_1>) TO '<file_path>' DELIMITER ',' CSV;
\copy <table_name>(<column_1>,<column_1>,<column_1>) TO '<file_path>' DELIMITER ',' CSV
COPY <table_name> FROM '<file_path>' DELIMITER ',' CSV;
\copy <table_name> FROM '<file_path>' DELIMITER ',' CSV
COPY <table_name>(<column_1>,<column_1>,<column_1>) FROM '<file_path>' DELIMITER ',' CSV;
\copy <table_name>(<column_1>,<column_1>,<column_1>) FROM '<file_path>' DELIMITER ',' CSV
Quelques outils pour PostgreSQL