1. PostgreSQL 10 : Nouveautés
Sébastien Lardière
Loxodata
novembre 2017
slardiere PG10 – novembre 2017 1 / 41
2. Break It! Drop It!
BREAK IT !
slardiere PG10 – novembre 2017 2 / 41
3. Break It! Drop It!
9.6 → 10
slardiere PG10 – novembre 2017 3 / 41
4. Break It! Drop It!
Version
La numérotation des versions change :
La version majeure est maintenant sur un nombre : 10
suivi de la version mineure
9.6.6 → 10.1
server_version_num : 090606 → 100001
En 2018, la prochaine version sera la 11
slardiere PG10 – novembre 2017 4 / 41
5. Break It! Drop It!
s/xlog/wal/g
slardiere PG10 – novembre 2017 5 / 41
6. Break It! Drop It!
WAL
Les répertoires, API et commandes sont renommés :
mv $PGDATA/pg_xlog $PGDATA/pg_wal
Des fonctions :
pg_current_xlog_flush_location() → pg_current_wal_flush_lsn()
pg_wal_replay_pause(), pg_wal_replay_resume(), pg_walfile_name()
Dans la vue pg_stat_replication : *_location → *_lsn
Des commandes :
pg_receivexlog -> pg_receivewal
initdb et pg_basebackup : --xlogdir → --waldir
pg_basebackup : --xlog-method → --wal-method
slardiere PG10 – novembre 2017 6 / 41
7. Break It! Drop It!
DROP IT !
slardiere PG10 – novembre 2017 7 / 41
8. Break It! Drop It!
OOOOLD!
D’anciennes options sont supprimées :
protocole client/serveur 1.0 (avant v6.3)
Floating Point Timestamp
extension contrib/tsearch2 (avant 8.3)
pg_dump : support des versions < 8.0
slardiere PG10 – novembre 2017 8 / 41
11. SQL
Partitionnement
Exemple
CREATE TABLE IF NOT EXISTS testpart
(
id bigserial,
dateev date not null default current_date ,
t text,
y boolean not null,
n numeric(13,3)
)
PARTITION BY RANGE (dateev) ;
slardiere PG10 – novembre 2017 11 / 41
12. SQL
Partitionnement
Exemple
CREATE TABLE IF NOT EXISTS testpart_2017
PARTITION OF testpart2
FOR VALUES FROM (’2017-01-01’) TO ( ’2018-01-01’ )
PARTITION BY LIST ( (id % 4) );
CREATE TABLE IF NOT EXISTS testpart_2017_0
PARTITION OF testpart2_2017
FOR VALUES IN ( 0 ) ;
slardiere PG10 – novembre 2017 12 / 41
13. SQL
Séquences
Le pseudo-type SERIAL est remplacé par la notion d’identité, repectant le standard, et
simplifiant la gestion des dépendances :
Exemple
CREATE TABLE test (
id bigint GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
dateev date not null default current_date ,
t text,
y boolean not null,
n numeric(13,3)
);
slardiere PG10 – novembre 2017 13 / 41
14. SQL
Séquences
Les séquences sont toujours utilisées :
nouveau catalogue : pg_sequence
chaque séquence n’a plus que 3 champs :
last_value
log_cnt
is_called
slardiere PG10 – novembre 2017 14 / 41
15. SQL
Déclencheurs
pour un déclencheur AFTER UPDATE/INSERT :
Accès aux données modifiés : old et new
déclaration dans le CREATE TRIGGER
très utile FOR EACH STATEMENT
crée une table lisible dans la fonction déclencheur
slardiere PG10 – novembre 2017 15 / 41
16. SQL
Déclencheurs
pour un déclencheur AFTER UPDATE/INSERT :
Exemple
CREATE TRIGGER transfer_insert
AFTER INSERT ON transfer
REFERENCING NEW TABLE AS inserted
FOR EACH STATEMENT
EXECUTE PROCEDURE check_transfer_balances_to_zero();
slardiere PG10 – novembre 2017 16 / 41
17. SQL
Statistiques
Corrélation statistique :
lorsque les données d’une table sont corrélés, le planner peut se tromper
ce qui peut faire des plans d’exécution lents
l’objet STATISTICS permet au planner de connaître la corrélation des données
il est possible de collecter des statistiques sur 2 colonnes ou plus d’une même table
slardiere PG10 – novembre 2017 17 / 41
19. SQL
Activité
La vue pg_stat_activity, comme d’habitude :
Tous les processus apparaissent : Writers, Workers, etc...
Pleins de nouveaux wait_event : 187
Requête exécuté par les processus parallélisés
slardiere PG10 – novembre 2017 19 / 41
22. SQL
Divers
XMLTABLE : transforme un document XML en table
FTS pour JSON et JSONB
Support le ICU pour les collations
Index Hash réplicable et « crash-safe »
RLS : logique PERMISSIVE (OR) ou RESTRICTIVE (AND)
slardiere PG10 – novembre 2017 22 / 41
25. Clients
Connections
Plusieurs serveurs peuvent être défini coté client :
permet le failover transparent
client en v10
target_session_attrs permet de préciser le mode :
any : n’importe quel serveur
read-write : seulement le serveur accessible en écriture
slardiere PG10 – novembre 2017 25 / 41
26. Clients
Connections
Plusieurs serveurs peuvent être défini coté client :
Exemple
host=host1,host2 port=port1,port2
postgresql://host1:port2,host2:port2/
host=host1,host2 port=port1,port2 target_session_attrs=read-write
postgresql://host1:port2,host2:port2/?target_session_attrs=read-write
slardiere PG10 – novembre 2017 26 / 41
27. Clients
psql
Client psql :
if elif else endif
gx : exécute en mode étendu
timing : affichage lisible
slardiere PG10 – novembre 2017 27 / 41
28. Clients
Sauvegarde
Sauvergarde logique :
pg_dump peut être parallélisé sur un standby : --jobs
pg_dump peut ignorer les larges objects : --no-blobs
les dumps de pg_dump sont flushés, sauf avec --no-sync
pg_restore peut exclure un schéma : -N/--exclude-schema
slardiere PG10 – novembre 2017 28 / 41
31. Internals
pg_ctl
Démarrage
pg_ctl attend au démarrage
-w/--wait par défaut pour start, stop, restart et promote
-t/--timeout par défaut : 60sec
code de retour en erreur != 0
-W/--no-wait pour ne pas attendre
détection du changement d’état plus fin
-o/--options : passe des paramètres de configuration
slardiere PG10 – novembre 2017 31 / 41
32. Internals
Parallélisme
Améliorations :
Merge Join, en plus des Nested Loop et Hash Join
Bitmap Heap Scan : les Heap Scan sont parallélisables
Index Scan et Index Only Scan parallélisables
Préservation du tri des données d’une tâche parallélisée
slardiere PG10 – novembre 2017 32 / 41
34. Configuration
Parallélisme
max_parallel_workers_per_gather : 2 par défaut, active le parallélisme
max_parallel_workers : nombre maximal de tâches utilisables
min_parallel_table_scan_size et min_parallel_index_scan_size
remplacent min_parallel_relation_size, respectivement 8MB et 512kB
slardiere PG10 – novembre 2017 34 / 41
35. Configuration
Réplication
Réplication activée par défaut :
wal_level : replica
max_wal_senders : 10
max_replication_slots : 10
pg_hba.conf pour les connexions locales
hot_standby : on
slardiere PG10 – novembre 2017 35 / 41
38. Extensions
Extensions
FDW :
file_fdw sait utiliser des programmes
postgres_fdw pousse les joins et les aggrégats
amcheck peut valider la structure d’un index
slardiere PG10 – novembre 2017 38 / 41