Utiliser PGadmin4
Toutes les autres options sont dispo ici
Un "SGBD" permet d'acceder a une "BDD" qui contient des "Tables relationnelles ou non" qui contiennent des "Enregistrement"
1# Se connecter a psql 2sudo -u postgres psql 3# Sur windows 4psql -U postgres 5 6# Se connecter à une BDD avec le rôle responsable 7\c "nom-database" "nom-role" 8 9# Liste les tables 10\dt 11 12# Liste les relations 13\d 14 15# Liste les BDD 16\l 17 18# Liste les roles 19\du 20 21# Crée un utilisateur avec logging (-l) et password (-W) 22createuser "nom-user" -l -W 23 24# Crée une DATABASE owner un user (-o ...) 25createdb "nom-DB" -o "nom-user" 26
1-- Crée un nouveau user === CREATE ROLE mais ROLE oblige l'option LOGIN 2CREATE USER "nom-role" WITH PASSWORD 'mdp'; 3 4-- Crée une nouvelle BDD 5CREATE DATABASE "nom-DB" OWNER "nom-role"; 6 7-- Crée une table 8CREATE TABLE IF NOT EXISTS "nom-table" ( 9 "nom-champ" OPTION (INT/VARCHAR/...), 10); 11 12-- Supprimer une table 13DROP TABLE IF EXISTS "nom-table"; 14 15-- Créer un type personalisé utilisable partout dans la DB 16-- Permet d'avoir une column adress avec des sous column "postal_code" TEXT, "enter_code" INT, "city" TEXT, ... 17CREATE TYPE "article" AS ( 18 "page" TEXT, 19 "numero" INT 20); 21 22-- Crée un nouveau domaine pour vérifier les info qui rentrent en BDD (même utilisation que TEXT/INT/...) 23CREATE DOMAIN nbr_supp_zero AS INT CHECK ( VALUE > 0 ); 24CREATE DOMAIN text_ok AS TEXT CHECK ( VALUE ~ '^\w{5}$' ); 25-- Ce domain est disponible partout dans la DB 26-- On peut donc faire 27ALTER TABLE "tutu" ADD COLUMN "toto" text_ok NOT NULL; 28 29-- Crée un index permet d'accélérer la vitesse de calcul de la BDD 30-- Un index est placé sur une colonne 31-- Il y a plusieurs types d'index : 32-- => le HASH qui est utilisé pour les opérations [=] 33-- => le B-TREE pour utilisé surtout pour les [< <= >= >] 34-- => le BRIN qui fait tout mais est utilisé en particulier pour les très grosses bases de données 35CREATE INDEX "nom-index" ON "nom-table" USING HASH ("nom-column"); 36
1-- Inserer des enregistrements 2INSERT INTO "nom-table" 3("nom-champs-1", "nom-champs-2") 4VALUES 5('nom-value-1.1', 'nom-value-2.1'), 6('nom-value-1.2', 'nom-value-2.2'); 7 8-- Chercher un enregistrement 9SELECT * FROM "nom-table"; 10 11-- Joindre 2 tables et récuperer uniquement les data lier 12SELECT * FROM "table-gauche" 13INNER JOIN "table-droite" ON "table-gauche"."table-droite-id" = "table-droite"."id"; 14 15-- Joindre 2 tables avec toutes les data de la table de gauche reliés à la table de droite 16SELECT * FROM "table-gauche" 17LEFT JOIN "table-droite" ON "table-gauche"."table-droite-id" = "table-droite"."id"; 18 19-- Même chose mais récuperer toutes les data de la table de droite 20SELECT * FROM "table-gauche" 21RIGHT JOIN "table-droite" ON "table-gauche"."table-droite-id" = "table-droite"."id"; 22 23-- Récupeérer toutes les data des 2 tables même les data non liés 24SELECT * FROM "table-gauche" 25FULL OUTER JOIN "table-droite" ON "table-gauche"."table-droite-id" = "table-droite"."id"; 26 27-- Les sous-requêtes sont comme les JOIN mais récuperent uniquement les éléments de la 28-- table du premier SELECT en respectant les conditions des autres 29-- Enfer à écrire mais très precis 30SELECT "name" 31FROM "user" 32WHERE "user"."id" IN( 33 SELECT "user_id" 34 FROM "age" 35 WHERE "age"."id" IN ( 36 SELECT "age_id" 37 FROM "argent" 38 GROUP BY "age_id" 39 HAVING avg("money") > 102.5 40 ) 41); 42 43-- HAVING est à utiliser avec GROUP BY et permet de grouper en suivant une certaine condition 44SELECT "name", SUM("age") FROM "user" GROUP BY "name" HAVING SUM("age") > 35; 45 46-- Supprimer un enregistrement précis 47DELETE FROM "nom-table" * WHERE "id" = 'enregistrement-a-supprimer'; 48 49-- Vider une table de tous ses enregistrements 50TRUNCATE TABLE "nom-table"; 51