Fini les jointures complexes : l'arrivée des requêtes de graphe natives
Postgres 19 fait sensation : support natif de SQL/PGQ (Property Graph Queries). Ce n'est pas juste une mise à jour ; c'est un changement fondamental qui vous permet d'interroger des tables relationnelles standard en utilisant une syntaxe de parcours de graphe intuitive. Oubliez les jours passés à souffrir sur des chaînes de JOIN multi-tables ; vos relations de données viennent de bénéficier d'une sérieuse amélioration de leur utilisabilité.
Débloquez cette puissance avec CREATE PROPERTY GRAPH, en définissant une couche de graphe logique directement sur votre schéma existant. Vous désignez des tables comme vertices — les nœuds de données centraux comme customers ou products — et des tables de jointure comme edges, les connexions critiques comme customer_orders ou order_items. Il est crucial de noter que cette configuration laisse votre structure de données sous-jacente intacte ; il s'agit d'une vue, pas d'une migration.
Cette abstraction élégante simplifie considérablement les requêtes qui exigeaient auparavant une longue cascade de déclarations JOIN sujettes aux erreurs. Imaginez démêler tout l'historique d'achat d'un client à travers cinq tables ; ce fouillis SQL complexe se transforme désormais en un parcours de graphe rationalisé et lisible. Pour les développeurs, cela signifie un code plus facile à écrire, à lire et à maintenir, ce qui impacte directement la productivité et réduit la complexité des requêtes.
L'opération atomique 'Get-or-Create' que nous attendions tous
Les développeurs sont depuis longtemps aux prises avec le dilemme du "get-or-create" dans les interactions avec les bases de données. Avant Postgres 19, réaliser ce modèle courant exigeait deux requêtes distinctes : une tentative d' INSERT suivie d'un SELECT si l'insertion échouait en raison d'un conflit. Cette danse en deux étapes introduisait des conditions de concurrence et nécessitait une logique complexe côté application, un processus maladroit et sujet aux erreurs.
Désormais, avec Postgres 19, la donne change. La nouvelle instruction ON CONFLICT DO SELECT offre l'opération atomique "get-or-create" que nous avons toujours voulue. Cette requête unique et élégante garantit soit l'insertion d'une nouvelle ligne, soit, en cas de conflit, le retour transparent de la ligne existante, éliminant ainsi les conditions de concurrence sans logique d'application complexe ni blocs de transaction explicites.
Cette fonctionnalité est une aubaine pour les flux de travail critiques à haut volume. Pensez à la création de comptes utilisateurs, à l'ajout de tags uniques au contenu ou au traitement de requêtes API idempotentes sans crainte d'entrées en double. ON CONFLICT DO SELECT rend votre code plus propre, plus robuste et nettement plus performant, permettant aux développeurs de se concentrer sur les fonctionnalités plutôt que sur la programmation défensive de base de données.
Récupérez l'espace gaspillé, sans interruption de service
Postgres a toujours été un cheval de bataille des données, mais son approche des opérations UPDATE et DELETE créait un problème insidieux : le gonflement des tables (table bloat). Chaque modification laisse derrière elle des lignes mortes, et bien que VACUUM marque cet espace comme réutilisable, il ne le rend jamais réellement au système d'exploitation. Les développeurs étaient coincés avec une utilisation du disque sans cesse croissante, une taxe silencieuse sur leur infrastructure.
Postgres 19 propose enfin une solution intégrée : la nouvelle commande REPACK. Ce n'est pas juste un ajustement mineur ; c'est une attaque directe contre le gonflement, réécrivant la table entière et ses index associés dans un nouveau fichier compact. Cela signifie une véritable récupération d'espace disque, une victoire réelle pour quiconque gère de grandes bases de données.
De manière cruciale, REPACK évite le verrouillage de table exclusif paralysant qui rendait VACUUM FULL inenvisageable pour les systèmes en production. Avec l'option CONCURRENTLY, les applications peuvent continuer à lire et à écrire des données sans entrave pendant l'exécution de l'opération. Cela élimine le besoin d'extensions tierces comme pg_repack, simplifiant considérablement la maintenance de la base de données.
Avant de vous réjouir trop vite, notez le bémol : REPACK nécessite suffisamment d'espace disque libre pour conserver temporairement une seconde copie de la table et de tous ses index. C'est un faible prix à payer pour récupérer de l'espace gaspillé sans interruption de service. Pour plus de détails sur les fonctionnalités à venir, consultez l'annonce officielle : PostgreSQL 19 Beta 1 Released!.
Cet article vous plaît ? Recevez-en un comme celui-ci chaque matin.
un e-mail par jour · désinscription en deux clics · aucun traqueur tiers
Une série d'améliorations rapides pour les développeurs et les DBA
Postgres 19 apporte une rafale d'améliorations tactiques pour les développeurs et les DBA, rationalisant les flux de travail et renforçant les performances. L'une des nouveautés marquantes est PG_PLAN_ADVICE, un nouveau module conçu pour stabiliser l'exécution des requêtes. Il vous permet de capturer un plan de requête rapide et de le « verrouiller », empêchant ainsi le planificateur de faire des choix sous-optimaux qui peuvent dégrader les performances au fil du temps. Fini les ralentissements mystérieux après une mise à jour ou un changement de données.
L'ergonomie pour les développeurs bénéficie d'un net coup de pouce. Vous n'avez plus besoin de répéter fastidieusement chaque colonne non agrégée de votre liste SELECT dans la clause GROUP BY — une simplification attendue depuis longtemps qui allège le code SQL. De plus, la commande COPY prend désormais directement en charge l'exportation de données vers JSON, une amélioration de confort petite mais significative pour les ingénieurs de données.
Les performances de maintenance bénéficient également de mises à niveau substantielles. Les opérations VACUUM, essentielles pour récupérer l'espace mort, exploitent désormais des workers parallèles pour le nettoyage des index. Cela signifie moins de temps d'arrêt et des cycles de maintenance plus rapides pour les grandes tables, s'attaquant directement à l'un des points faibles historiques de Postgres.
Enfin, la compilation JIT passe en mode optionnel et est désormais désactivée par défaut. Les versions précédentes activaient souvent le JIT pour des requêtes qui n'en tiraient aucun bénéfice, entraînant parfois des baisses de performance dues à des estimations de coût peu fiables. La désactivation par défaut garantit qu'elle ne s'active que lorsqu'elle est explicitement configurée pour des requêtes lourdes appropriées, préservant ainsi les performances globales du système.
Questions fréquemment posées
Quelle est la fonctionnalité phare de Postgres 19 ?
La fonctionnalité phare est la prise en charge native de SQL/PGQ (Property Graph Queries), permettant aux développeurs d'interroger des données relationnelles à l'aide d'une syntaxe de type graphe, ce qui simplifie les jointures complexes.
Postgres 19 remplace-t-il les bases de données orientées graphe dédiées comme Neo4j ?
Non. La nouvelle fonctionnalité de requête de graphe est conçue pour améliorer l'ergonomie de l'écriture de requêtes complexes sur des données relationnelles existantes. Pour les cas d'utilisation nécessitant un stockage de graphe spécialisé et des performances de traversée optimales, une base de données de graphe dédiée reste le meilleur choix.
En quoi REPACK CONCURRENTLY diffère-t-il de VACUUM FULL ?
VACUUM FULL verrouille une table pendant toute sa durée, provoquant une interruption de service. REPACK CONCURRENTLY réécrit la table pour récupérer de l'espace disque sans verrou exclusif à long terme, permettant à la table de rester lisible et inscriptible pendant l'opération.
Quel problème ON CONFLICT DO SELECT résout-il ?
Il résout le problème courant du « get-or-create » avec une instruction unique et atomique. Il vous permet d'insérer une ligne si elle n'existe pas ou de sélectionner la ligne existante si elle existe, le tout au sein d'une seule opération sécurisée par transaction, éliminant ainsi les conditions de concurrence.

