Skip to main content

SQL Console

L'editeur SQL embarque dans KytheraDB. Tu tapes une requete, tu la lances, tu vois le resultat dans un tableau. Plus quelques refinements specifiques : autocomplete sur tes propres tables, lint syntaxe en direct, prevention des DELETE ou UPDATE sans WHERE, et masquage automatique des colonnes flaggees PII selon ton role.

C'est l'outil que tu utilises pour explorer ta donnee, debugger un cas client, ou tester une migration avant de la mettre en patch.


Ouvrir la console

Sidebar gauche → Terminal (icone terminal). Selectionne la connexion active en haut. Si elle n'a pas encore ete analysee, lance d'abord une analyse (bouton sur la card de connexion dans le Dashboard).

L'editeur prend tout l'espace ; le panneau de resultats apparait en bas apres execution.


Editeur — fonctionnalites

Autocomplete

Tape SELECT * FROM ab (deux caracteres minimum) → la liste deroulante propose tes tables. Pareil pour les colonnes apres SELECT ou WHERE. L'autocomplete est nourri par le dernier snapshot de la connexion active — si tu viens de creer une table, lance d'abord une re-analyse.

Lint en temps reel

Le lint tourne en arriere-plan 800ms apres ta derniere frappe. Il appelle l'endpoint /sql/analyze qui parse ta requete et te dit si :

  • Le SQL est syntaxiquement invalide (souligne en rouge, message d'erreur sous l'editeur)
  • Il manque un WHERE sur un UPDATE ou DELETE (souligne en orange, warning non bloquant)
  • Une table referencee n'existe pas (souligne en rouge)
  • Un cast risque de tronquer (warning orange)

Tu peux executer malgre les warnings — c'est juste un signal visuel.

Raccourcis clavier

RaccourciAction
Ctrl+Enter / Cmd+EnterExecuter la requete courante
Ctrl+EspaceForcer l'autocomplete
Ctrl+/Commenter/decommenter la ligne
Tab (selection multi-ligne)Indenter
Shift+TabDesindenter

Multi-tabs

Bouton + en haut → nouvelle tab avec une nouvelle requete. Pratique pour comparer plusieurs scripts en parallele sans perdre ton contexte. L'etat est persiste en localStorage — refresh de la page = tabs conservees.


Execution — les 3 modes

1. Execute (le bouton vert "Execute")

Lance ta requete telle quelle. Le resultat s'affiche dans le panneau bas avec :

  • Le tableau de donnees (max 1000 lignes par defaut)
  • Le nombre de lignes retournees
  • Le temps d'execution en ms
  • Les colonnes masquees (cf. plus bas) si applicable
  • L'option d'export CSV / JSON

Pour les SELECT, c'est simple. Pour les mutations (INSERT / UPDATE / DELETE), KytheraDB applique des garde-fous (cf. section suivante).

2. Preview

Bouton "Preview" → simule la requete sans la commit. Utile pour les mutations avant un Execute "for real".

KytheraDB ouvre une transaction, execute, recupere les lignes affectees + estime l'impact, puis rollback. Tu vois ce qui va changer sans rien modifier.

C'est ce qui fait que tu peux taper DELETE FROM users WHERE created_at < '2020-01-01' sans crainte : Preview te dit "127 lignes seront supprimees", tu valides ou tu modifies ta requete.

3. Explain

Bouton "Explain" → envoie un EXPLAIN (ou EXPLAIN ANALYZE selon ton moteur) et formate le plan d'execution. Utile pour optimiser les requetes lentes — KytheraDB met en surbrillance les scans sequentiels sur tables larges, les boucles imbriquees, les indexes manquants.


Garde-fous d'execution

Par defaut, KytheraDB refuse certaines requetes dangereuses sans confirmation explicite :

RequeteComportement
DELETE FROM <table> sans WHEREModal de confirmation obligatoire
UPDATE <table> SET ... sans WHEREModal de confirmation obligatoire
TRUNCATEModal + role admin requis
DROP TABLE / DROP SCHEMAModal + role admin requis
ALTER qui supprime une colonneModal + warning d'impact

Les modaux te montrent le nombre de lignes affectees (estime) avant de te laisser confirmer. Tu peux aussi desactiver les garde-fous pour une session si tu sais ce que tu fais (/settings/sql-guard).


Masquage des colonnes sensibles

Si une colonne a ete flaggee PII par le GDPR Scanner ou via les Column Masks, elle est automatiquement masquee au resultat selon ton role :

Ton roleColonne users.email (PII low)Colonne users.password_hash (PII high)
super_adminVue claireVue claire
adminVue claireVue claire
qaVue claire***
deve***@e***.com***
viewer******

Le tableau de resultat affiche une banniere "X colonnes masquees" au-dessus. Tu vois quelles colonnes ont ete masquees + pourquoi (header HTTP X-Auralith-Masked-Columns).

Cela s'applique uniquement a l'affichage : la donnee reelle reste dans la base. Si tu as besoin de l'export pour un cas legal, demande une elevation a ton admin.


Copy / paste restrictions

Si ton org a configure une policy de copie restreinte (cf. Export Policy), KytheraDB peut :

  • Bloquer le Ctrl+C sur certaines colonnes (les masquer ne suffit pas juridiquement, faut empecher l'extraction)
  • Watermarker la session avec ton email + l'heure (visible dans les screenshots aussi)
  • Logger chaque tentative de copie (audit log)

C'est typiquement active sur les connexions taggees prod. Tu vois une indication visuelle "Mode restriction" en haut a droite de la console.


Audit log

Toute requete executee est loggee dans audit_logs avec :

  • Ton ID user + email
  • La requete SQL complete
  • La connexion ciblee
  • Le timestamp
  • Le nombre de lignes affectees
  • Le statut (success / error)

Visible dans Settings → Audit par les admins. Indispensable pour les audits de conformite (RGPD, SOC2).


Limites et bonnes pratiques

Limites techniques

  • Max 1000 lignes retournees par requete (cap configurable jusqu'a 10000)
  • Max 30s d'execution — au-dela KytheraDB cancel la requete
  • Pas de \copy ou COPY FROM STDIN — utilise les imports CSV a la place

Bonnes pratiques

  • ✅ Toujours Preview avant Execute sur les mutations
  • ✅ Utiliser LIMIT 100 quand tu explores une table inconnue
  • ✅ Verifier les indexes via Explain quand une requete prend > 1s
  • ✅ Si tu veux exporter beaucoup de donnees, utilise l'Export dedie plutot que copier-coller le resultat
  • ❌ Eviter les SELECT * sur des tables larges en production — masquage et copy-restriction sont calcules par colonne

Connexe