- SQL est Turing complete
null
veut dire "on ne sait pas" en postgres- Data Types
- CTE : Common Table Expression avec un
WITH
pour séparer les responsabilités (comme une fonction) - on stocke une donnée qui ne change jamais : une date de naissance oui ! mais pas l'age...
- le mot
ALWAYS
permet de dire qu'on ne peut pas écrire manuellement dans le champ
- from/join (uniquement ici où on prend la data, tout le reste n’est que filtre)
- where
- group by
- aggregate functions
- having
- window functions
- select
- distinct
- union/intersect/except
- order by
- offset
- limit/fetch/top
- A priori, on ne peut pas avoir les logs en stdout...
SHOW config_file
pour voir où est le fichier de configdocker exec -it pc-postgres cat /var/lib/postgresql/data/postgresql.conf
docker exec -it pc-postgres cat /var/lib/postgresql/data/log/postgresql-2020-03-16_144749.log
docker exec -it pc-postgres tail -f /var/lib/postgresql/data/log/postgresql-2020-03-17_103605.log
- le point virgule est super important !
- si date de début et date de fin alors on peut créer un champ de type range
- au lieu de mettre une date de fin à
null
, plutôt utiliserinfinity
- utiliser un
id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY
, cela :- génère une séquence
- ajoute la prochaine valeur séquencée quand on insert par défaut
- empêche l'écriture manuelle sur cette colone ! on est obligé d'utiliser une séquence
- tout ça évite d'être désynchronisé
- on peut créer un generated column (lecture seule) pour faire un calcul d'age par exemple pour éviter de le faire dans le code et il se met à jour à chaque fois que l'on modifie la ligne
- Ne pas avoir trop de jointure (et donc moins de table)
- pas toujours utile de mettre un index sur un champs
- si trop peu de ligne : contre productif
- ça ralentit l’écriture
- ça améliore une requête mais peut ralentir les autres
- s’il y deux fois plus d’index que de data, c’est très con (en terme d’octet)
\d pg_stat_all_indexes
- postgres se base sur les statistiques pour faire ses optimisations donc attendre de faire vivre sa bdd pour voir comment y mettre des index
- Parallélisme
- Ne pas faire de
ALTER
lors d'une migration car ça pose un lock (ZDD) en version 10 mais en 11, ça passe mieux. - OUTER JOIN ne sera pas plus lent que INNER JOIN sur un test avec quelques dizaines de lignes
psql -U [USER] [DB]
SET search_path TO [SCHEMA];
- ou sinon
SELECT * FROM [SCHEMA].notification;
- ou sinon
\dt
pour voir les tables\dT
pour voir les énumération
- pgadmin / DBeaver
pgbench -U pass_culture -c 10 -j 2 -t 10000 pass_culture
EXPLAIN ANALYZE
- explain analyze
- PostgreSQL execution plan visualizer
- psql Tips par Laetitia Avrot
- A collection of useful little scripts for database analysis and administration
- PostgreSQL : Le couteau suisse dont vous avez besoin - Lætitia Avrot
- Range
- Generated columns
- Full text search
- LISTEN/NOTIFY
- RETURNNG
- Le pouvoir des Jedi des Index dans l'univers de Postgres - Lætitia AVROT
- Merveilleux SQL - Laetitia Avrot
- Optimisation des requêtes PostgreSQL : Parlons Performance - Lætitia Avrot
- SELECT 'amazing_features' FROM "postgresql" - Kévin DAVIN