6. SQL
Internals
Configuration
UPSERT
L’exemple suivant montre l’insertion dans une table d’enregistrement de statistiques :
Exemple
INSERT INTO user_stats (id, connect)
VALUES (12345,1),(87654,1)
ON CONFLICT (id)
DO UPDATE SET connect = user_stats.connect + EXCLUDED.connect;
S. Lardière PG95 – mars 2016 6 / 35
8. SQL
Internals
Configuration
Row-Level Security Policies
La fonction usertoid() traduit un nom d’utilisateur en id :
Exemple
ALTER TABLE user_stats ENABLE ROW LEVEL SECURITY;
CREATE POLICY policy_user ON user_stats
FOR ALL
TO PUBLIC
USING (id = usertoid(current_user));
S. Lardière PG95 – mars 2016 8 / 35
9. SQL
Internals
Configuration
GROUPING SETS, CUBE and ROLLUP
GROUPING SETS, CUBE and ROLLUP
Extension de GROUP BY
Permet plusieurs regroupements
Remplace UNION ALL
S. Lardière PG95 – mars 2016 9 / 35
10. SQL
Internals
Configuration
GROUPING SETS, CUBE and ROLLUP
Exemple :
Exemple
select gender, title, count(*)
from employees join titles using (emp_no)
group by
grouping sets ( ( gender, title ), (title), (gender), () ) ;
S. Lardière PG95 – mars 2016 10 / 35
11. SQL
Internals
Configuration
GROUPING SETS, CUBE and ROLLUP
Les trois fonctions ont chacune leur rôle :
GROUPING SETS ( (attr1, attr2), (attr2), (attr3, attr1) )
CUBE( attr1, attr2, attr3 )
ROLLUP( attr1, attr2, attr3 )
S. Lardière PG95 – mars 2016 11 / 35
15. SQL
Internals
Configuration
Fonctions JSONB
L’opérateur || permet de concaténer des données jsonb
L’opérateur - permet de supprimer une clé d’une donnée jsonb
La fonction jsonb_set permet de mettre à jour la valeur d’une clé d’une donnée jsonb
La fonction jsonb_pretty permet de créer un rendu texte lisible depuis une donnée
jsonb
S. Lardière PG95 – mars 2016 15 / 35
16. SQL
Internals
Configuration
ALTER TABLE ... SET LOGGED / UNLOGGED
ALTER TABLE ... SET LOGGED / UNLOGGED
Possibilité de modifier le mode UNLOGGED :
Exemple
ALTER TABLE user_stats SET LOGGED ;
S. Lardière PG95 – mars 2016 16 / 35
18. SQL
Internals
Configuration
CREATE INDEX IF NOT EXISTS
CREATE INDEX IF NOT EXISTS
Pas d’erreur si l’index existe déjà :
Exemple
employees=# create unique index departments_dept_name_idx ON departments (dept_name) ;
ERROR: relation "departments_dept_name_idx" already exists
employees=# create unique index IF NOT EXISTS departments_dept_name_idx ON departments (dept_nam
NOTICE: relation "departments_dept_name_idx" already exists, skipping
CREATE INDEX
employees=# create unique index IF NOT EXISTS departments_dept_name_idx_fake ON departments (dep
CREATE INDEX
employees=# drop index departments_dept_name_idx_fake;
DROP INDEX
S. Lardière PG95 – mars 2016 18 / 35
22. SQL
Internals
Configuration
Abbreviated Keys
Optimisation de tris (Abbreviated Keys)
Méthode alterative pour un tri
Version abrégée de la donnée
8 premiers octets
Divise par 3 le temps de tri
Types text et numeric
S. Lardière PG95 – mars 2016 22 / 35
24. SQL
Internals
Configuration
Réduction de la mémoire
Réduction de l’utilisation de la mémoire par backend
Référence à la mémoire partagée
Dans la mémoire des “backends”
Intérressant quand la mémoire partagée est importante
S. Lardière PG95 – mars 2016 24 / 35
28. SQL
Internals
Configuration
Suivi de l’horodatage des COMMIT
Suivi de l’horodatage des COMMIT
paramètre track_commit_timestamp
dans les WALs
pour chacune des transactions
utile pour BDR
S. Lardière PG95 – mars 2016 28 / 35
30. SQL
Internals
Configuration
Gestion du recyclage des WAL et des CHECKPOINTs
Gestion du recyclage des WAL et des CHECKPOINTs
paramètres min_wal_size et max_wal_size
remplace checkpoint_segment
Donne une plage de déclenchement de CHECKPOINT
S. Lardière PG95 – mars 2016 30 / 35
31. SQL
Internals
Configuration
Contrôle de restauration
Contrôle de restauration
paramètre recovery_target_action dans recovery.conf
remplace pause_at_recovery_target
Donne une plage de déclenchement de CHECKPOINT
S. Lardière PG95 – mars 2016 31 / 35
32. SQL
Internals
Configuration
Mise à jour des index GIN
Mise à jour des index GIN
paramètre gin_pending_list_limit
Liste d’attente des index GIN (fastupdate)
Modifie les performances
S. Lardière PG95 – mars 2016 32 / 35