Aller au contenu
guide technique

Poser des questions à PostgreSQL en langage naturel

Interrogez PostgreSQL en langage naturel, examinez ventes régionales et classement client, puis vérifiez les schémas, droits et détails SQL qui influencent le résultat.

Par l'équipe Datarelix · Publié le · Mis à jour le · Vérifié le

Vos commandes sont dans PostgreSQL et vous devez présenter les ventes du mois dernier par région. Avec Datarelix, décrivez le rapport, examinez le SQL généré et le résultat, puis demandez un graphique. Il vous faut des informations de connexion et des droits de lecture sur les tables ou vues concernées, sans devoir écrire vous-même la première requête.

Définir le rapport

Pour un commerçant, la demande pourrait être :

Affiche le montant des commandes payées par région pour août 2026, en euros. Exclus les commandes annulées. Utilise la date de commande et présente les remboursements séparément s’ils sont disponibles.

Précisez la date qui définit une vente et le traitement des taxes et remboursements. Si ces définitions manquent, demandez à la personne responsable du reporting quels champs utiliser.

Obtenir les accès

Si vous disposez déjà d’une chaîne de connexion PostgreSQL autorisée, utilisez-la pour ajouter la connexion. Sinon, demandez l’hôte, le port, la base, le schéma autorisé, les paramètres TLS et un compte dédié au reporting. La source doit être joignable depuis le service hébergé Datarelix ; la présentation sécurité montre ce que ce service conserve et ce qui parvient au modèle.

Le responsable doit examiner les droits directs, hérités et publics. Le rôle PostgreSQL pg_read_all_data donne un accès de lecture étendu sans contourner les règles de sécurité par ligne ; il ne remplace pas la vérification du droit CONNECT à la base. Un rôle limité au rapport convient mieux si seules quelques tables sont nécessaires. Rôles prédéfinis PostgreSQL

Le guide de connexion PostgreSQL détaille les autorisations, TLS et le dépannage. Commencez par une connexion directe ou un pool de connexions en mode session compatible. Le mode transaction dépend du fournisseur, de la version et de la gestion des requêtes préparées : confirmez sa compatibilité avec le responsable.

Vérifier le tableau avant le graphique

Cette requête calcule le montant des commandes payées, pas le chiffre d’affaires net après remboursements :

SELECT region, SUM(total_eur) AS paid_order_value_eur
FROM reporting.orders
WHERE status = 'paid'
  AND ordered_at >= DATE '2026-08-01'
  AND ordered_at < DATE '2026-09-01'
GROUP BY region
ORDER BY paid_order_value_eur DESC;
RégionMontant des commandes payées, EUR
North1 200
South800

Un graphique doit représenter North avec une valeur 1,5 fois supérieure à South. Les deux lignes correspondent aux régions, pas au nombre de commandes. Si les remboursements sont dans une autre table, demandez d’abord leur total séparément.

Comparez avec un total connu et faites examiner les jointures par une personne qui maîtrise SQL si plusieurs tables interviennent. Pour des horodatages, convenez aussi du fuseau horaire du rapport : les limites du mois peuvent différer du réglage de la session de base de données.

À quoi ressemble le SQL généré ?

Sur le schéma d’un commerçant — customers, orders, order_items — la question « Quels étaient nos dix premiers clients par valeur de commandes terminées, avant remboursements, au T2 2026 ? » peut être représentée par le SQL suivant :

Les prix unitaires de cet exemple sont en EUR ; le montant correspond aux commandes terminées avant remboursements.

SELECT
  c.customer_id,
  c.name,
  SUM(oi.quantity * oi.unit_price) AS revenue
FROM customers AS c
JOIN orders AS o ON o.customer_id = c.customer_id
JOIN order_items AS oi ON oi.order_id = o.order_id
WHERE o.status = 'completed'
  AND o.ordered_at >= DATE '2026-04-01'
  AND o.ordered_at < DATE '2026-07-01'
GROUP BY c.customer_id, c.name
ORDER BY revenue DESC
LIMIT 10;

C’est du PostgreSQL idiomatique : des intervalles de dates semi-ouverts plutôt que BETWEEN, date_trunc('quarter', …) quand il faut une granularité de période, LIMIT/OFFSET pour la pagination, des guillemets droits pour les identifiants qui en ont besoin. Du SQL repris d’un autre dialecte peut contenir TOP 10 ou des identifiants entre accents graves, que PostgreSQL ne reconnaît pas — le mécanisme général est expliqué dans text-to-SQL expliqué.

Remarquez aussi ce qui est décidé ici : status = 'completed', le brut plutôt que le net des remboursements, un trimestre calendaire plutôt que les 90 derniers jours. Ce sont des interprétations. Voir la requête, c’est ce qui vous permet de les contrôler — tout l’intérêt de vérifier une réponse générée par IA.

Question et contexte produisent un plan, puis une requête validée exécutée avec une identité PostgreSQL délimitée. Résultats et détails sont conservés. Certaines valeurs à une ligne peuvent servir au suivi ; les identifiants restent hors du modèle.
Parcours d’une question. Les identifiants restent dans les services de connexion ; certaines valeurs à une ligne peuvent servir au suivi, et les résultats sont conservés.

Les points PostgreSQL à examiner côté analyste

PointEffet possible sur la réponseContrôle utile
Choix du schémaPlusieurs schémas peuvent contenir le même nom de tableConfirmer les schémas autorisés et les noms qualifiés des sources
Vues et vues matérialiséesUne vue peut porter une définition approuvée ; une vue matérialisée a son propre historique d’actualisationIdentifier son responsable et sa dernière actualisation
Sécurité au niveau ligneLe rôle connecté peut voir moins de lignes que celui d’un rapport existantComparer identités et politiques avant d’interpréter un résultat vide
Noms entre guillemetsLes identifiants à casse mixte nécessitent leur forme exacteComparer les noms générés à ceux découverts
Bornes de datesLe sens d’un horodatage dépend de son type et du fuseauExaminer des lignes proches de minuit et de la fin de mois
Granularité de jointureUne commande peut correspondre à plusieurs articles ou paiementsComparer identifiants distincts et lignes jointes avant de sommer les totaux de commandes

Une connexion peut inclure plusieurs schémas autorisés. Les requêtes entre schémas nécessitent toujours les droits correspondants et doivent rester dans ce périmètre. Deux schémas autorisés ne nécessitent pas à eux seuls deux connexions distinctes.

Examiner les droits sans modifier les objets de production

Dans son client SQL habituel, l’analyste ou le responsable de la base peut contrôler le droit de lecture sur une table connue :

SELECT has_table_privilege(current_user, 'reporting.orders', 'SELECT')
       AS can_read_orders;

Ce contrôle porte sur un droit précis, pas sur l’ensemble des accès effectifs. Examinez séparément rôles hérités, droits publics, politiques et fonctions. Pour rendre lisibles les futures tables de reporting, l’administrateur configure les droits par défaut du rôle qui crée ces tables ; modifier ceux d’un autre rôle ne les couvre pas. La référence PostgreSQL contient ces étapes.

Distinguer problème de connexion et problème de résultat

Un échec de connexion appelle un contrôle du point d’accès, des identifiants, du réseau et de TLS. Une liste de schémas vide appelle un contrôle de la base, des schémas autorisés et des droits de découverte. Un résultat vide appelle un contrôle des filtres, des données disponibles et des politiques de lignes. Reformuler la question métier ne répare pas un droit manquant.

Le comportement des requêtes préparées dépend du pooler et de sa configuration. Utilisez le point d’accès conseillé par le fournisseur pour ce client ; une connexion directe ou de session adaptée peut aider au diagnostic. PgBouncer documente les requêtes préparées au niveau protocole avec la configuration correspondante ; PREPARE SQL suit d’autres contraintes. Compatibilité PgBouncer

Pour un rapport lent, réduisez la période et examinez les jointures. L’analyste peut consulter le plan dans un outil autorisé et discuter index ou vues de reporting avec le responsable. Deux lignes de sortie peuvent nécessiter la lecture d’une grande table. Le parcours Datarelix en lecture seule ne crée pas d’index, ne migre pas et n’administre pas la base.

Conserver un rapport utile

Quand le tableau correspond à la définition attendue, demandez un graphique en barres et ajoutez-le à un tableau de bord. Celui-ci reste privé à votre compte et utilise une seule connexion. Son actualisation manuelle relance la requête enregistrée. Avec les dates fixes ci-dessus, il continuera à afficher août ; un rapport mensuel évolutif demande une règle de dates relative.

Si aucune table n’apparaît, vérifiez la base, le schéma et le rôle avant de reformuler. Si une requête est lente, réduisez la période ou demandez une vue de reporting : un petit résultat peut nécessiter beaucoup de calcul.

Suivez le démarrage rapide, puis l’exemple de rapport de ventes hebdomadaire pour préparer des graphiques réutilisables.