SlideShare ist ein Scribd-Unternehmen logo
1 von 28
Downloaden Sie, um offline zu lesen
PostgreSQL 9.5
Nouveautés et Améliorations
Cycle de Vie
Sortie de PostgreSQL 9.5 en janvier 2016
1 version majeure par an
entre 3 et 6 versions mineures par an : actuellement 9.5.1
Chaque version majeure est supportée 5 ans
Les grandes
lignes
UPSERT
Row Level Security
Big Data
UPSERT
# CREATE TABLE test (x INTEGER PRIMARY KEY);
# INSERT INTO test VALUES (1);
# INSERT INTO test VALUES (1);
ERROR: duplicate key value violates unique constraint "test_pkey"
# INSERT INTO test VALUES (1) ON CONFLICT DO NOTHING;
INSERT 0 0
UPSERT
# INSERT INTO test VALUES (2);
# INSERT INTO test VALUES (2)
ON CONFLICT (x) DO UPDATE SET x = 3;
INSERT 0 1
# INSERT INTO test VALUES (2)
ON CONFLICT (x) DO UPDATE SET status = ’conflict’;
Row Level Security
Nouvelles règles d’accès pour SELECT, INSERT, UPDATE, DELETE
Permissions basées sur le contenu des lignes existantes
Même si l’application a une faille de séurité,
les données sensibles restent invisibles
Row Level Security
SELECT * FROM ventes;
id | product | user_magasin | ventes
-----+-------------+----------------------|-----------
1 | foo | lille | 100
2 | bar | rennes | 30
3 | foo | rennes | 5
Row Level Security
CREATE POLICY p ON ventes
FOR ALL
TO PUBLIC
USING (user_magasin = CURRENT_USER );
Row Level Security
SET SESSION AUTHORIZATION Lille;
SELECT * FROM ventes;
id | product | user_magasin | ventes
-----+-------------+----------------------|-----------
1 | foo | lille | 100
Row Level Security
SET SESSION AUTHORIZATION rennes;
id | product | user_magasin | ventes
-----+-------------+----------------------|-----------
2 | bar | rennes | 30
3 | foo | rennes | 5
Row Level Security
CREATE POLICY p_region ON ventes
USING ( user_magasin IN
( WITH RECURSIVE t AS
( SELECT id FROM magasins WHERE id_magasin = CURRENT_USER
UNION ALL
SELECT id FROM magasins m INNER JOIN t ON t.region=m.region
) SELECT id FROM t
)
)
Big Data / Index Brin
Index très petit pour tables volumineuses
Stocke les valeurs min/max values pour une “tranche” de données (128 pages)
Permet de “sauter” des sections entières de la table
Idéal pour les données inséré chronologiquement
Simple à mettre à jour
Moins rapide qu’un index classique mais beaucoup plus petit
Big Data / Index Brin
CREATE TABLE exemple AS SELECT generate_series(1,100000000) AS id;
CREATE INDEX btree_index ON exemple(id);
CREATE INDEX brin_index ON exemple USING brin(id);
relname | pg_size_pretty
---------------------+----------------
brin_exemple | 3457 MB
btree_index | 2142 MB
brin_index | 104 kB
Big Data / OLAP
GROUPING SETS, CUBE and ROLLUP
TABLESAMPLE
Mais
aussi….
SQL MED / Foreign Data Wrappers
Encore plus d’opérateurs JSON
Réplication
Optimisations
Skip Locked
checkpoint_segments
SQL-MED
IMPORT FOREIGN SCHEMA
Foreign Table Inheritance
Join Push Down
JSON
jsonb_set() : remplacement / ajout de données dans un document
# SELECT '{"nom": "Damien", "age": "37"}'::jsonb - ‘age’;
{"name": "Damien"}
SELECT '{"nom": "Damien",}'::jsonb || '{"age": "37"}'::jsonb;
{"name": "Damien", "age": “37” }
json_pretty : affiche un document de manière plus lisible
Optimisations
VACUUM Parallèle
Tris sur texte plus rapides
Lock scalability
Empreinte mémoire réduite
Index Scan Only sur les Index GIST
Réplication / Hot Standby
pg_rewind = possibilité de FAIL BACK après un FAIL OVER
Avant la version 9.5, lorsque l’on basculait d’un noeud A vers un noeud B
Il fallait systématique reconstruire le noeud A
Réplication / Hot Standby
Skipped Unlocked
# SELECT * FROM a FOR UPDATE NOWAIT;
ERROR: could not obtain lock on row in relation "a"
# SELECT * FROM a FOR UPDATE SKIP LOCKED;
a | b | c
----+----+----
2 | 2 | 2
3 | 3 | 3
Gestion de journaux (WAL / XLOG)
Paramètre checkpoint_segments supprimé !
Remplacé par des limites sur le dossier pg_xlog :
min_wal_size (default 80MB)
max_wal_size (default 1GB)
L’agencement des checkpoints est géré automatiquement à partir ces 2 valeurs...
Mais aussi….
ALTER TABLE ... SET LOGGED / UNLOGGED
recovery_target_action = promote / pause / shutdown
ALTER SYSTEM RESET
cluster_name
pg_stat_ssl
pg_stat_statements améliorée : min_time, max_time, mean_time, stddev_time
En avant vers la version 9.6
Parallélisme !
Actuellement : 1 requête = 1 coeur
Avec 9.6 : “Dispatcher” un scan sequentiel sur plusieurs coeurs
En avant vers la version 9.6
Des avancées vers la réplication logique
Syntaxe de Partitionnement
Sharding ( FDW join pushdown , FDW DML pushdown )
….
Première beta en juin ?
Sources
https://wiki.postgresql.org/wiki/What%27s_new_in_PostgreSQL_9.5
https://www.youtube.com/watch?v=qluVWI1UKiM
https://momjian.us/main/writings/pgsql/features.pdf
Suivre l’actualité PostgreSQL
www.postgresql.fr
planet.postgresql.org
Prochain RDV à Toulouse ?
http://www.meetup.com/fr-FR/PostgreSQL-User-Group-Toulouse/

Weitere ähnliche Inhalte

Ähnlich wie Nouveautés de PostgreSQL 9.5

PhyloJava : une application de phylogénie sur la grille DATAGRID
PhyloJava : une application de phylogénie sur la grille DATAGRIDPhyloJava : une application de phylogénie sur la grille DATAGRID
PhyloJava : une application de phylogénie sur la grille DATAGRID
suive
 
EBIZNEXT-RIAK
EBIZNEXT-RIAKEBIZNEXT-RIAK
EBIZNEXT-RIAK
ebiznext
 

Ähnlich wie Nouveautés de PostgreSQL 9.5 (20)

Webinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud DatabasesWebinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud Databases
 
JBoss clustering et tuning (lab 3/3)
JBoss clustering et tuning (lab 3/3)JBoss clustering et tuning (lab 3/3)
JBoss clustering et tuning (lab 3/3)
 
Sql azure performance et montee en charge (1)
Sql azure   performance et montee en charge (1)Sql azure   performance et montee en charge (1)
Sql azure performance et montee en charge (1)
 
ANSII Configuration Materiel server/client x86
ANSII Configuration Materiel server/client x86ANSII Configuration Materiel server/client x86
ANSII Configuration Materiel server/client x86
 
Liquibase en action
Liquibase en actionLiquibase en action
Liquibase en action
 
SQL Oracle | Regrouper les Données avec les Fonctions de Groupe
SQL Oracle | Regrouper les Données avec les Fonctions de GroupeSQL Oracle | Regrouper les Données avec les Fonctions de Groupe
SQL Oracle | Regrouper les Données avec les Fonctions de Groupe
 
Le cloud-in-a-box avec Cloud Platform System (CPS) et Windows Azure Pack
Le cloud-in-a-box avec Cloud Platform System (CPS) et Windows Azure PackLe cloud-in-a-box avec Cloud Platform System (CPS) et Windows Azure Pack
Le cloud-in-a-box avec Cloud Platform System (CPS) et Windows Azure Pack
 
Inf208
Inf208Inf208
Inf208
 
1 2-3-grails
1 2-3-grails1 2-3-grails
1 2-3-grails
 
Sql
SqlSql
Sql
 
LP_chapitre3_Creation et gestion_BD_2019.pptx
LP_chapitre3_Creation et gestion_BD_2019.pptxLP_chapitre3_Creation et gestion_BD_2019.pptx
LP_chapitre3_Creation et gestion_BD_2019.pptx
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShop
 
PhyloJava : une application de phylogénie sur la grille DATAGRID
PhyloJava : une application de phylogénie sur la grille DATAGRIDPhyloJava : une application de phylogénie sur la grille DATAGRID
PhyloJava : une application de phylogénie sur la grille DATAGRID
 
EBIZNEXT-RIAK
EBIZNEXT-RIAKEBIZNEXT-RIAK
EBIZNEXT-RIAK
 
Chap XIV : Calcul parallèle (Fondements & Principe d'utilisation)
Chap XIV : Calcul parallèle (Fondements & Principe d'utilisation)Chap XIV : Calcul parallèle (Fondements & Principe d'utilisation)
Chap XIV : Calcul parallèle (Fondements & Principe d'utilisation)
 
trigger.pdf
trigger.pdftrigger.pdf
trigger.pdf
 
trigger.pptx
trigger.pptxtrigger.pptx
trigger.pptx
 
Déploiement ELK en conditions réelles
Déploiement ELK en conditions réellesDéploiement ELK en conditions réelles
Déploiement ELK en conditions réelles
 
System Center 2012 | SCCM : L'inventaire de A à Z avec System Center Configur...
System Center 2012 | SCCM : L'inventaire de A à Z avec System Center Configur...System Center 2012 | SCCM : L'inventaire de A à Z avec System Center Configur...
System Center 2012 | SCCM : L'inventaire de A à Z avec System Center Configur...
 
Présentation JSS2015 - Le Query Store de SQL Server 2016
Présentation JSS2015 - Le Query Store de SQL Server 2016Présentation JSS2015 - Le Query Store de SQL Server 2016
Présentation JSS2015 - Le Query Store de SQL Server 2016
 

Nouveautés de PostgreSQL 9.5

  • 2. Cycle de Vie Sortie de PostgreSQL 9.5 en janvier 2016 1 version majeure par an entre 3 et 6 versions mineures par an : actuellement 9.5.1 Chaque version majeure est supportée 5 ans
  • 4. UPSERT # CREATE TABLE test (x INTEGER PRIMARY KEY); # INSERT INTO test VALUES (1); # INSERT INTO test VALUES (1); ERROR: duplicate key value violates unique constraint "test_pkey" # INSERT INTO test VALUES (1) ON CONFLICT DO NOTHING; INSERT 0 0
  • 5. UPSERT # INSERT INTO test VALUES (2); # INSERT INTO test VALUES (2) ON CONFLICT (x) DO UPDATE SET x = 3; INSERT 0 1 # INSERT INTO test VALUES (2) ON CONFLICT (x) DO UPDATE SET status = ’conflict’;
  • 6. Row Level Security Nouvelles règles d’accès pour SELECT, INSERT, UPDATE, DELETE Permissions basées sur le contenu des lignes existantes Même si l’application a une faille de séurité, les données sensibles restent invisibles
  • 7. Row Level Security SELECT * FROM ventes; id | product | user_magasin | ventes -----+-------------+----------------------|----------- 1 | foo | lille | 100 2 | bar | rennes | 30 3 | foo | rennes | 5
  • 8. Row Level Security CREATE POLICY p ON ventes FOR ALL TO PUBLIC USING (user_magasin = CURRENT_USER );
  • 9. Row Level Security SET SESSION AUTHORIZATION Lille; SELECT * FROM ventes; id | product | user_magasin | ventes -----+-------------+----------------------|----------- 1 | foo | lille | 100
  • 10. Row Level Security SET SESSION AUTHORIZATION rennes; id | product | user_magasin | ventes -----+-------------+----------------------|----------- 2 | bar | rennes | 30 3 | foo | rennes | 5
  • 11. Row Level Security CREATE POLICY p_region ON ventes USING ( user_magasin IN ( WITH RECURSIVE t AS ( SELECT id FROM magasins WHERE id_magasin = CURRENT_USER UNION ALL SELECT id FROM magasins m INNER JOIN t ON t.region=m.region ) SELECT id FROM t ) )
  • 12. Big Data / Index Brin Index très petit pour tables volumineuses Stocke les valeurs min/max values pour une “tranche” de données (128 pages) Permet de “sauter” des sections entières de la table Idéal pour les données inséré chronologiquement Simple à mettre à jour Moins rapide qu’un index classique mais beaucoup plus petit
  • 13. Big Data / Index Brin CREATE TABLE exemple AS SELECT generate_series(1,100000000) AS id; CREATE INDEX btree_index ON exemple(id); CREATE INDEX brin_index ON exemple USING brin(id); relname | pg_size_pretty ---------------------+---------------- brin_exemple | 3457 MB btree_index | 2142 MB brin_index | 104 kB
  • 14. Big Data / OLAP GROUPING SETS, CUBE and ROLLUP TABLESAMPLE
  • 15. Mais aussi…. SQL MED / Foreign Data Wrappers Encore plus d’opérateurs JSON Réplication Optimisations Skip Locked checkpoint_segments
  • 16. SQL-MED IMPORT FOREIGN SCHEMA Foreign Table Inheritance Join Push Down
  • 17. JSON jsonb_set() : remplacement / ajout de données dans un document # SELECT '{"nom": "Damien", "age": "37"}'::jsonb - ‘age’; {"name": "Damien"} SELECT '{"nom": "Damien",}'::jsonb || '{"age": "37"}'::jsonb; {"name": "Damien", "age": “37” } json_pretty : affiche un document de manière plus lisible
  • 18. Optimisations VACUUM Parallèle Tris sur texte plus rapides Lock scalability Empreinte mémoire réduite Index Scan Only sur les Index GIST
  • 19. Réplication / Hot Standby pg_rewind = possibilité de FAIL BACK après un FAIL OVER Avant la version 9.5, lorsque l’on basculait d’un noeud A vers un noeud B Il fallait systématique reconstruire le noeud A
  • 21. Skipped Unlocked # SELECT * FROM a FOR UPDATE NOWAIT; ERROR: could not obtain lock on row in relation "a" # SELECT * FROM a FOR UPDATE SKIP LOCKED; a | b | c ----+----+---- 2 | 2 | 2 3 | 3 | 3
  • 22. Gestion de journaux (WAL / XLOG) Paramètre checkpoint_segments supprimé ! Remplacé par des limites sur le dossier pg_xlog : min_wal_size (default 80MB) max_wal_size (default 1GB) L’agencement des checkpoints est géré automatiquement à partir ces 2 valeurs...
  • 23. Mais aussi…. ALTER TABLE ... SET LOGGED / UNLOGGED recovery_target_action = promote / pause / shutdown ALTER SYSTEM RESET cluster_name pg_stat_ssl pg_stat_statements améliorée : min_time, max_time, mean_time, stddev_time
  • 24. En avant vers la version 9.6 Parallélisme ! Actuellement : 1 requête = 1 coeur Avec 9.6 : “Dispatcher” un scan sequentiel sur plusieurs coeurs
  • 25. En avant vers la version 9.6 Des avancées vers la réplication logique Syntaxe de Partitionnement Sharding ( FDW join pushdown , FDW DML pushdown ) …. Première beta en juin ?
  • 28. Prochain RDV à Toulouse ? http://www.meetup.com/fr-FR/PostgreSQL-User-Group-Toulouse/