PostgreSQL / pSQL les commandes de base

Je débute PostgreSQL, voici quelques commandes de bases à ne pas oublier. On utilise les capitales pour mieux distinguer le code

CREATE DATABASE test;
DROP DATABASE test;
\l
\c nom_de_la_base
CREATE TABLE ARTICLES(
   id BIGSERIAL NOT NULL PRIMARY KEY,
   first_name VARCHAR(50) NOT NULL,
   last_name VARCHAR (50) NOT NULL,
   gender(5),
   date_of_birth DATE NOT NULL,
);

En bonus voici où trouver les différents types de champ pour une base de données PostgreSQL

\d
\d nom_de_la_table
DROP TABLE nom_de_la_table
INSERT INTO articles ('titre','description','date_of_publication')
VALUES('les commandes de bases','le meilleur article pour découvrir les commandes de bases','2020-01-12');
\i /home/kovsky/Work/postgreSQL/articles.sql

Point bonus, si vous êtes dans un environnement graphique comme moi vous pouvez glisser/déposer votre fichier dans votre invite de commande pour obtenir le chemin.
Si vous avez besoin de contenu aléatoires pour remplir vos tables, vous pouvez utiliser l'excellent mockaroo.

SELECT DISTINCT language from "persons" ORDER BY language ASC;

Plutôt que de réaliser une requête du genre

SELECT * 
FROM persons
WHERE language = 'French' OR language = 'Chinese' 
ORDER BY language ASC;

Vous pouvez utiliser l'opérateur IN qui va considérer les éléments entre parenthèses comme les éléments d'un tableau et va donc chercher des correspondances à l'intérieur de ce tableau.

SELECT * from persons
WHERE language IN ('French', 'Chinese')
ORDER BY language ASC ;

Combiner à la clause WHERE il permet d'effectuer une recherche à l'intérieur d'un champ pour vérifier si une partie d'une expression y est présente.
Par exemple pour retrouver toutes les adresses emails Google nous pouvons utiliser la requête ci-dessous.
Le caractère % et début et fin permet de préciser que nous pouvons avoir n'importe quel caractère avant et après.
Ainsi si nous souhaitions avoir seulement les adresses japonaises par exemple nous aurions pu

SELECT email FROM persons
WHERE email LIKE '%.jp'
\set AUTOCOMMIT off
\echo :AUTOCOMMIT
INSERT INTO person VALUES(default, 'Bart', 'Simpson');
COMMIT|ROLLBACK; -- Transaction validée|Transaction invalidée
INSERT INTO person VALUES(default, 'Bart', 'Simpson');
SAVEPOINT save1;
INSERT INTO person VALUES(default, 'Marge', 'Simpson');
INSERT INTO person VALUES(default, 'Homer', 'Simpson');
ROLLBACK TO SAVEPOINT save1;
COMMIT;

Le ROLLBACK permet d'annuler des transaction réalisées, mais le SAVEPOINT permet d'en conserver certaine jusqu'à un certain point.