La connexion
Une connexion est un fichier .lnc (LightNote Connection) dans
l'espace de travail lui-même — versionnable dans Git et portable d'une machine à
l'autre. Les connexions du dossier apparaissent dans le panneau Connexions de
la barre latérale (l'icône de base de données), chacune avec un point d'état (vert
connectée, gris déconnectée, rouge en erreur) et, en dessous, les scripts qui
lui appartiennent. Créez-en une par Nouveau → Nouvelle connexion BD ou avec
le bouton du panneau ; ouvrir un .lnc depuis l'arborescence de fichiers
mène aussi au panneau. Sous la liste se trouve l'arborescence des objets de la
connexion sélectionnée. Le menu contextuel de la connexion propose
Se connecter/Se déconnecter, Nouveau script, Console SQL
et Modifier la connexion.
Dossier sans connexion : le panneau Connexions vide propose Nouvelle
connexion… et Ouvrir un fichier de base…, et liste les bases SQLite et DuckDB en
fichier déjà présentes dans le dossier, chacune avec un Se connecter. La base est reconnue
au contenu du fichier, pas à l'extension (un .db peut être l'une ou l'autre) ; un clic
crée la connexion (.lnc) à côté du fichier, qu'elle désigne par son nom — les deux
voyagent ensemble — et se connecte aussitôt.
Scripts : un script est un fichier .sql ordinaire et
s'ouvre dans l'onglet de code, comme tout fichier — avec historique, barre
des modifications et Enregistrer la version. Au début de la barre de
l'onglet se trouvent le sélecteur de connexion et le bouton Exécuter ;
les résultats apparaissent sous l'éditeur à la première exécution (ou à
côté : Exécuter → Résultats à côté). La connexion d'origine du script
est enregistrée dans le .lnc, et à la réouverture le script pointe déjà
vers elle. Choisir une autre connexion dans le sélecteur ne vaut que pour cet
onglet ; pour changer l'origine, utilisez Toujours utiliser « … » pour ce
script. Un script sans origine s'ouvre en Sans connexion, même si le
dossier n'a qu'une connexion : aucun script ne s'ouvre pointé vers une base que vous
n'avez pas choisie. La Console SQL est un onglet sans fichier, déjà lié à la
connexion. L'Espace d'analyse d'un résultat est enregistré à côté du script
(requete.sql.analysis.json), un par requête : le fichier garde les
graphiques, les tableaux croisés et le SQL de chacun — jamais les données.
Une session par onglet : chaque onglet de script ouvre sa propre session
avec la base — une requête longue dans un onglet ne bloque ni les autres ni
l'arborescence des objets, et le Commit d'un onglet ne valide pas ce qu'un
autre a fait. Les tables temporaires et les commandes SET ne valent que
dans l'onglet où elles ont été exécutées. Si le serveur limite le nombre de
connexions, décochez Une session par onglet dans Modifier la
connexion. Les fichiers SQLite et DuckDB partagent toujours la même session (en
SQLite, une écriture verrouille tout le fichier). Le panneau indique combien de
sessions chaque connexion a ouvertes.
Pilotes : SQLite et DuckDB (fichier) natifs ; PostgreSQL, MySQL/MariaDB, SQL
Server et générique via ODBC ; Oracle natif (sans ODBC). SQL Server utilise
le pilote msodbcsql de Microsoft (installez-le sur la machine) et propose
l'Authentification Windows ou utilisateur/mot de passe, ainsi que les options de
chiffrement du canal (Encrypt / faire confiance au certificat). Pour Oracle, indiquez
le dossier de l'Oracle Instant Client dans Paramètres → Base de données — il est chargé à l'exécution, sans rien à installer. La connexion Oracle a quatre
modes : Service Name (hôte/port/service), SID (hôte/port/SID), Nom TNS
(alias du tnsnames.ora dans le dossier du client) et Descripteur TNS
complet (collé dans un champ de texte).
Mot de passe : cochez Enregistrer le mot de passe pour le chiffrer dans le
.lnc lui-même (crypto portable, s'ouvre sur une autre machine) ; décoché, le
mot de passe n'est pas enregistré et est demandé à chaque connexion. Le chiffrement
utilise une Phrase-Sécurité par espace de travail, définie dans Aide → Configurer la
Phrase-Sécurité ; gardez-la en sécurité — sans elle, le mot de passe ne peut être ouvert
nulle part ailleurs. La Phrase-Sécurité n'est mise en cache que sur la machine locale (elle ne
va jamais dans Git).
Cochez Se connecter à l'ouverture pour que la connexion s'ouvre d'elle-même quand vous ouvrez l'un de ses scripts. La connexion automatique est silencieuse : si le mot de passe doit être saisi (mode demander, ou chiffré sans la Phrase-Sécurité en cache sur la machine), le script s'ouvre déconnecté, sans vous interrompre.
La production sans crainte : dans Modifier la connexion, le champ
Environnement indique de quelle base il s'agit — Développement, Recette ou
Production —, et sa couleur apparaît sur le sélecteur de connexion de l'onglet .sql,
sur une bande en haut de l'onglet et sur un badge dans le panneau Connexions. Sur une connexion de
production, ce qui modifie la base (INSERT, UPDATE, DELETE,
CREATE, DROP, procédures…) montre d'abord ce qui va s'exécuter et demande
confirmation, avec l'UPDATE/DELETE sans WHERE mis en évidence ; le
bouton par défaut est Annuler, et l'enregistrement des modifications de la grille demande de la
même façon. Cochez Lecture seule pour que la connexion refuse tout ce qui modifie la base — dans
le script, dans la grille et dans les données d'une table — avant que l'instruction ne quitte LightNote :
la grille ne propose plus l'édition et, sous SQLite, le fichier s'ouvre en lecture seule. Ce dont
LightNote ne peut pas dire s'il ne fait que lire (un bloc BEGIN … END, un
DECLARE) compte comme une écriture.
Tunnel SSH : pour une base derrière un serveur SSH (bastion), choisissez dans Tunnel
SSH une connexion SSH (.lns) de l'espace de travail — la même que celle du terminal
distant, avec utilisateur, clé ou mot de passe chiffré. Hôte et Port deviennent alors ceux
de la base vus depuis le serveur SSH (souvent localhost). À la connexion, LightNote ouvre le
tunnel et atteint la base par lui ; se déconnecter ferme le tunnel. Il ne démarre que quand vous vous
connectez (jamais à l'ouverture du fichier), le .lns doit être dans l'espace de travail, et
les options de ssh qui exécutent des commandes (ProxyCommand, LocalCommand,
-F) sont refusées — -J est accepté. Seules les options d’une liste autorisée passent (-J, -i, -4/-6, -C et -o avec des clés de connexion, de chiffrement et d’authentification) : -A, -R, -I et -E sont aussi refusées. Une connexion avec tunnel n'est ouverte ni
par l'IA (MCP), ni par lnote, ni par les Blocs, qui se connecteraient directement.
Informations du serveur : à la connexion, l’application demande à la base ce qu’elle indique sur elle-même — la version, la base et le schéma courants, l’utilisateur, la taille, l’encodage, le classement et le fuseau horaire, et si le serveur accepte l’écriture (une réplica ne l’accepte pas). La version apparaît dans l’infobulle de la connexion, et le reste dans Informations du serveur…, dans le menu contextuel de la connexion, avec un bouton pour le copier. Une donnée que le serveur ne fournit pas — version ancienne, privilège manquant — est omise, sans erreur. La version est envoyée quand vous demandez à l’IA d’expliquer une erreur ou d’analyser un plan : la syntaxe qu’elle peut proposer en dépend.
Clés étrangères avec SQLite : SQLite n’applique les clés étrangères déclarées — et
le ON DELETE CASCADE — que si la connexion le demande, et les connexions de
l’application le demandent : supprimer une ligne que d’autres référencent, ou insérer une référence
à un enregistrement inexistant, est refusé, et le CASCADE supprime les enfants comme le
schéma l’indique. La case Vérifier les clés étrangères, dans Modifier la connexion…,
désactive cela — seulement pour un chargement en masse dans le désordre. L’activer ne vérifie pas ce
qui est déjà dans le fichier : Informations du serveur… compte, par table, les références
cassées qui existent déjà (lignes qui pointent vers un enregistrement inexistant), écrites par un
outil qui ne les vérifiait pas.
Exécuter et lire le résultat
Exécuter : Ctrl+Entrée exécute l'instruction sous le curseur et Alt+X
exécute tout le script ; les résultats apparaissent paginés, chacun dans un onglet
Résultat avec une barre d'actions en bas : Charger le bloc suivant, Figer le résultat, Total, changer la Limite de lignes, Actualiser
(réexécute), Voir/Copier le SQL, Exporter... et Générer du SQL à partir
de la ligne sélectionnée. Ce qu’est une instruction vient du texte lui-même : un bloc BEGIN … END et un corps $$ … $$ restent entiers, et une ligne ne contenant que / (Oracle) ou GO (SQL Server) sépare aussi.
Écrire du SQL avec de l'aide : Ctrl+Espace complète selon le
contexte : après FROM, JOIN, UPDATE ou
INTO viennent les tables de la base (la liste s'ouvre seule quand vous
tapez l'espace), et après alias. viennent les colonnes de cette table (elle
s'ouvre seule quand vous tapez le point) — même avant que le FROM soit écrit,
et sans rien déplier dans l'arbre : LightNote lit le catalogue de la base en arrière-plan,
et les colonnes seulement quand le texte y arrive. Dans un script à plusieurs
instructions, celle que Ctrl+Entrée va exécuter est mise en évidence. Quand une
instruction échoue, elle est marquée dans l'éditeur, le nom que la base a désigné (la
table ou la colonne qui n'existe pas, l'endroit de l'erreur de syntaxe) est souligné
d'une vague, le curseur y va et le message apparaît quand la souris s'arrête dessus.
Ctrl+clic ou F12 sur un nom de table ouvre ses données ; F4, ses
propriétés. Formater (Shift+Alt+F) met le SQL en forme sans outil
installé : une clause par ligne, les éléments du SELECT un par ligne quand
il y en a plusieurs, AND/OR et sous-requêtes indentés. Il ne
change que les espaces et la casse des mots-clés, jamais un nom, un texte ou un
commentaire, et laisse tels quels les instructions qui ne sont pas des requêtes
(CREATE, blocs BEGIN … END).
Figer le résultat : lit le résultat entier de la base en une seule passe et le conserve dans une table locale (sur disque, s'il ne tient pas en mémoire). Ensuite la grille défile sans interroger la base, le nombre de lignes devient exact (sans passer par Compter le total), cliquer sur un en-tête trie (un nouveau clic inverse ; un troisième revient à l'ordre livré par la base), et l'export lit lui aussi la copie locale. Le tri par l'en-tête vaut jusqu'à 100 000 lignes ; au-delà il est refusé, avec le motif dans l'infobulle de l'en-tête, car chaque page devrait retrier la copie entière et parcourir la grille reprendrait des minutes. Un résultat déjà arrivé entier dans la première page se trie sans figer : les lignes sont déjà en mémoire. Ce qui ne se trie pas, c'est la première partie d'un résultat encore paginé — l'en-tête affirmerait un ordre qui ne vaut que pour ce qui est à l'écran.
Le graphique et le tableau croisé dynamique portent alors sur le résultat entier — y compris sur les bases où le graphique n'existait pas. Si le figeage s'arrête avant la fin (vous avez cliqué sur Arrêter ou la limite a été atteinte), les lignes restent locales mais le graphique et le tableau croisé dynamique restent sur le serveur : sommer une partie du résultat donnerait un nombre faux — et trier la grille ne trie que les lignes récupérées, pas le résultat entier.
Actualiser défige et réexécute la requête. Indépendamment du figeage, les pages déjà passées par la grille sont conservées localement : revenir en arrière sur l'une d'elles n'interroge pas la base à nouveau. Un seul figeage tourne à la fois : avec deux résultats ouverts, cliquer sur Figer le résultat dans l’autre est refusé avec le motif, au lieu d’interrompre celui en cours — pour l’arrêter, utilisez Arrêter dans son propre onglet.
Grille de résultats : chaque requête qui renvoie des lignes reçoit un onglet au nom de sa table (le SQL complet est dans l'info-bulle de l'onglet). Une nouvelle exécution remplace ces onglets, sauf les épinglés — clic droit sur l'onglet, Épingler le résultat —, qui restent pour comparer ; le × ferme un résultat. À côté des onglets, le résumé de l'exécution indique combien de lignes sont arrivées et en combien de temps, ou l'erreur en rouge ; un clic ouvre les Messages. Le pied répète les lignes et le temps et, tant que le résultat est partiel, propose Charger le bloc suivant et Compter le total. La barre au-dessus de la grille regroupe le reste : Actualiser, Figer, Limite, le menu Analyse, Valeur, Colonnes et Exporter (avec Copier le SQL, Voir le SQL et Générer le SQL) ; dans une fenêtre étroite, les boutons perdent leur texte avant de disparaître. L'en-tête affiche le type de chaque colonne (texte, nombre, date…) et marque d'une clé les colonnes de la clé de la table ; la souris posée dessus donne le type en toutes lettres. Faire glisser l'en-tête réordonne les colonnes, et Colonnes (ou un clic droit sur l'en-tête) masque, affiche et ajuste la largeur au contenu — le choix survit à Actualiser, à la Limite et au tri.
Cellules : un NULL s'affiche en italique estompé, distinct d'un texte
vide, et les nombres sont alignés à droite ; quand plusieurs cellules sont sélectionnées, le pied
affiche le nombre de la sélection et, si elles sont numériques, la somme et la moyenne.
Valeur (ou Voir la valeur dans le panneau dans le menu contextuel) ouvre à côté la
valeur complète de la cellule sélectionnée, sans coupure, avec Formater pour
embellir le JSON/XML à l'affichage seulement ; le bouton Enregistrement du panneau remplace
la valeur par la ligne entière transposée — une colonne par ligne, avec le nom à côté de la
valeur —, qui suit le curseur (aussi via Voir l'enregistrement entier, dans le menu de la
cellule). Dans le menu d'une cellule, Filtrer par cette valeur / Exclure cette
valeur réexécutent la requête avec un WHERE sur la cellule, et Aller à
l'enregistrement référencé suit la clé étrangère de la colonne et interroge la table parente
avec la valeur.
Rechercher et filtrer dans la grille : Ctrl+F, le focus sur la grille, mène
au champ Rechercher dans la grille, qui n'affiche que les lignes contenant le texte dans
n'importe quelle colonne — le focus dans l'éditeur, Ctrl+F reste la recherche du SQL. Le
filtre à côté ouvre le Filtre avancé (conditions par colonne, avec ET/OU), et les colonnes
filtrées reçoivent un entonnoir dans l'en-tête ; cliquer sur une barre du graphique, une cellule
du tableau croisé dynamique ou une valeur fréquente de Qualité devient une sélection, une
étiquette au-dessus de la grille qu'on retire avec son ×. Le pied indique combien de lignes
restent sur combien. La recherche et le filtre portent sur le résultat entier, dans une
copie locale : avec un résultat arrivé en entier, c'est immédiat ; avec seulement la première
partie, le champ est grisé avec le motif — filtrer ce qui est à l'écran cacherait ce qui est
dans la partie suivante — et Figer le débloque. Avec une recherche ou un filtre actif, le
graphique, le tableau croisé dynamique et Qualité décrivent le même sous-ensemble que la
grille. Rien de cela ne change la requête : pour restreindre dans la base, utilisez Filtrer par
cette valeur ou écrivez le WHERE.
Graphique et tableau croisé dynamique : où le calcul est fait. Le menu
Analyse contient le Graphique, le Tableau croisé dynamique, Qualité et
l'Espace d'analyse, et sous Analyser sur le choix entre Données locales et
Table entière (sur le serveur), coché sur celui qui s'applique. Quand le résultat tient
entièrement dans la première page, la valeur par défaut est locale : LightNote agrège
sur le résultat déjà affiché, sans retourner à la base à chaque changement d'axe, d'agrégat ou
d'intervalle — et, comme le moteur local est DuckDB, le graphique existe désormais aussi sous
Oracle, SQL Server, PostgreSQL et MySQL, où son SQL ne s'exécute pas sur le serveur. Quand le
résultat est arrivé tronqué, l'option locale est indisponible avec le motif : agréger
sur un échantillon donnerait un nombre faux, et prévenir de la coupure ne protégerait personne, car
ce qu'on lit dans un graphique, c'est la hauteur de la barre. L'option serveur agrège sur la
requête entière, avec une requête par ajustement, et est indisponible tant que la grille a
une recherche ou un filtre (le sous-ensemble n'existe qu'ici). Les colonnes numériques que la base
livre sous forme de texte — le cas du NUMBER d'Oracle — sont reconnues comme des
nombres ; les identifiants avec un zéro initial, comme 01310, restent du texte. Sous
Oracle, SQL Server, PostgreSQL et MySQL, avec un résultat encore partiel, Graphique est grisé
avec le motif, et s'allume quand vous figez le résultat.
Qualité des données du résultat. L'élément Qualité du menu Analyse ouvre, à côté de la grille, le même profil par colonne que pour les tableaux de fichier. Il est calculé par DuckDB : sur la copie locale quand le résultat est arrivé en entier (ou a été figé), ou dans la base elle-même quand c'est DuckDB. Sous Oracle, SQL Server, PostgreSQL et les autres, tant que le résultat est partiel, le panneau dit pourquoi il ne le décrit pas et propose Figer le résultat sur place ; si le figeage s'arrête au plafond, il recommande de restreindre la requête — le profil d'une partie décrirait une autre table. Cliquer sur une valeur fréquente filtre la grille (c'est une sélection, comme la recherche) ; pour restreindre dans la base, utilisez Filtrer par cette valeur dans le menu de la cellule.
Sur combien de données l’analyse a porté. Au-dessus du graphique, du tableau croisé dynamique, de la qualité et de l’Espace d’analyse, une ligne indique si le calcul a utilisé toutes les données — avec le nombre de lignes, compté tout seul sur la copie locale — ou s’il a été fait dans la base, sur la requête entière ; là, le comptage est le lien Compter les lignes, car compter exécute la requête de nouveau. Quand le figeage s’est arrêté avant la fin et que la grille a une recherche ou un filtre, l’analyse ne peut porter que sur ce qui a été rapatrié, et la ligne indique Une partie des données, avec le ton d’avertissement. La même phrase figure dans la légende du rapport de l’Espace d’analyse.
Instantané des données : l'analyse d'un script enregistré garde les cartes à côté de lui, pas les données — pour la revoir, il faut la base. Le bouton Instantané des données de l'Espace d'analyse enregistre le résultat complet dans un fichier Parquet à côté du script, avec les cartes ; ouvrir ce fichier montre la même analyse sans connexion, sur les données de cet instant. C'est un geste explicite et la fenêtre prévient avant : le fichier est une copie des données de la base, et il part avec le dossier si celui-ci va dans Git ou est partagé. Il n'existe qu'avec le résultat complet ici — avec seulement la première partie, figez-le d'abord (l'info-bulle du bouton l'indique).
Plan d'exécution : l'élément Plan d'exécution du menu
d'Exécuter demande le plan de l'instruction sous le curseur (SQLite, DuckDB, PostgreSQL et
MySQL) et l'affiche dans l'onglet Plan : l'arbre des étapes, la plus lourde mise en avant,
et une phrase qui dit ce qu'elle signifie — dans PostgreSQL et MySQL, l'étape au coût
propre le plus élevé (son coût moins celui des étapes qu'elle contient), avec sa part du
total ; dans DuckDB, celle qui produit le plus de lignes ; dans SQLite, qui n'indique pas de coût,
la lecture d'une table entière. Quand l'étape lit la table entière dans une base qui a des index,
la phrase rappelle qu'un index sur la colonne filtrée l'évite généralement (dans DuckDB, en
colonnes, lire la table entière est normal et le conseil n'apparaît pas). L'alias de la requête
(FROM commandes c) est remplacé par le nom de la table. Voir en texte montre
le même arbre indenté, et Copier le plan le copie. Les chiffres sont l'estimation du
planificateur : la requête n'est pas exécutée. Un EXPLAIN saisi s'ouvre aussi dans
l'onglet Plan quand LightNote reconnaît la réponse ; ce qu'il ne reconnaît pas reste dans la
grille. Dans les bases qui n'exposent pas le plan en une seule instruction (SQL Server, Oracle),
l'élément est désactivé, avec la raison dans l'infobulle.
Analyser avec l'IA : la mise en évidence dit quelle étape pèse ; le
bouton Analyser avec l'IA de l'onglet Plan demande pourquoi le planificateur l'a
choisie et quoi changer. La requête, le plan et le schéma des tables lues sont envoyés — avec les
index qui existent déjà, pour que l'IA ne suggère pas d'en créer un qui est déjà là. Les
valeurs sont retirées avant l'envoi (le texte entre guillemets et les nombres deviennent
? ; les commentaires disparaissent), et Voir ce qui sera envoyé montre
exactement ce qui part. La suggestion s'ouvre dans l'éditeur comme nouveau script, et rien n'est
exécuté.
Le schéma
Données d'une table : double-cliquez sur une table dans l'arbre
du schéma pour ouvrir son onglet sur le sous-onglet Données. Au-dessus de la
grille se trouvent deux champs, WHERE et ORDER BY,
appliqués avec Entrée — et les deux vont à la base : ils valent pour
toute la table, pas seulement pour les lignes à l'écran. Cliquer sur l'en-tête
d'une colonne trie aussi dans la base (croissant, décroissant, sans tri) et remplit
le ORDER BY ; Filtrer par cette valeur dans le menu d'une
cellule ajoute la condition au WHERE, visible et modifiable. L'onglet a
sa propre session avec la base, comme un onglet de script. Ouvrir la table par
Propriétés n'interroge pas les données : la requête ne s'exécute que lorsque
le sous-onglet Données est affiché. Avec ORDER BY vide, les lignes arrivent dans l'ordre de la clé primaire (le champ indique laquelle) : sans aucun ordre, la base ne garantit pas la même séquence d'une page à la suivante, et le défilement pouvait répéter ou sauter des lignes. En triant par l'en-tête, la clé départage les lignes de même valeur.
Modifier les données : dans la grille d'une table qui a une clé primaire (ou unique, sur des colonnes NOT NULL), double-cliquez sur une cellule, appuyez sur F2 ou commencez à taper. L'éditeur suit le type de la colonne : une date avec calendrier, vrai/faux dans une liste, un nombre qui n'accepte que des nombres, et du JSON vérifié à la validation. Un texte effacé devient un texte vide, pas NULL : NULL est un geste à part (Définir comme NULL dans le menu de la cellule, ou le bouton NULL du panneau de valeur, qui modifie aussi les textes longs). Inser ajoute une nouvelle ligne — ce qui reste par défaut reçoit la valeur par défaut de la base —, Dupliquer la ligne copie celle sélectionnée sauf la clé, et Suppr marque les lignes pour suppression (une seconde fois, les démarque). Rien de tout cela ne part tout de suite dans la base : les modifications restent en attente, colorées dans la grille (ambre pour modifiée, vert pour nouvelle, rouge barré pour supprimée), et une bande au-dessus les compte. Vérifier… montre le SQL qui sera exécuté et le copie comme script ; Enregistrer écrit tout en une seule transaction, en vérifiant que chaque UPDATE et DELETE touche exactement une ligne — si une ligne a été modifiée ou supprimée par une autre session après sa lecture, ou si une instruction échoue, rien n'est écrit et les modifications restent dans la grille ; Abandonner les annule toutes. Recharger la grille, changer le filtre ou fermer l'onglet avec des modifications en attente demande d'abord.
Quand la grille ne modifie pas, elle dit pourquoi — dans l'infobulle
des boutons et dans une bande quand on essaie de modifier. Une table sans clé
primaire ni clé unique sur des colonnes NOT NULL reste en lecture seule : sans la
clé, impossible de savoir quelle ligne chaque modification changerait. Dans un
onglet de script, le résultat se modifie aussi quand la requête est un
SELECT d'une seule table qui liste ses colonnes (ou utilise
SELECT *) et renvoie la clé ; jointure, sous-requête, colonne calculée
ou renommée, DISTINCT, GROUP BY et UNION
laissent le résultat en lecture seule. Les colonnes binaires ne se modifient pas
dans la grille. Et avec une transaction ouverte dans l'onglet (autocommit désactivé)
contenant des instructions en attente, validez ou annulez avant d'enregistrer :
enregistrer la grille les emporterait avec elle.
Propriétés de l'objet : F4 sur une table de l'arbre du schéma (ou Propriétés dans le menu contextuel) ouvre son onglet directement sur la structure ; à côté de Données, il y a quatre sous-onglets : Colonnes (n°, nom, type, nullité,
valeur par défaut et une icône de clé sur les colonnes de la clé primaire), Clés
(contraintes de clé primaire, étrangère, unique et check ; un double-clic sur une clé étrangère
ouvre la table référencée), Index et DDL — le CREATE TABLE de l'objet,
prêt à copier, enregistrer comme .sql ou ouvrir dans un onglet modifiable.
Lorsque la base ne fournit pas le DDL tout fait (PostgreSQL et SQL Server n'ont pas cette
commande), LightNote le reconstruit à partir des métadonnées — de même lorsque la commande de
DDL est refusée faute de permission — et l'indique clairement dans l'onglet. Si même le
catalogue des colonnes ne peut être lu (pas de permission ou catalogue indisponible), il n'y
a rien à reconstruire : l'onglet le signale au lieu de rester silencieusement vide. Le menu contextuel de la table propose aussi Copier le DDL sans ouvrir l'onglet.
Arborescence des objets : dans le panneau Connexions,
sous la liste, l'arborescence de la connexion sélectionnée sépare les Tables
des Vues (chacune avec son icône) et marque d'une clé les colonnes de la clé
primaire. L'arbre affiche aussi les Procédures et fonctions, les Déclencheurs et les Séquences (là où la base en a) ; un double-clic sur une procédure, une fonction ou un déclencheur ouvre son code source dans une console SQL de la connexion. À côté de chaque table figure le nombre approximatif de lignes, et son commentaire est dans l'infobulle — c'est l'estimation que garde la base, pas un COUNT(*). Les schémas système (SYS, pg_catalog…) sont masqués ; l'élément en fin de liste les affiche. Le champ de filtre trie tout de suite ce qui est déjà chargé et, dès 2 lettres, cherche aussi dans la base : ce que personne n'a déplié apparaît dans le dossier Dans la base en haut. Dans un script, Ctrl+Alt+O (Aller à la table…, dans le sélecteur de connexion) ouvre la recherche au clavier, et F12 sur le nom d'une table ouvre son onglet.
Actualiser les métadonnées. Après un CREATE, ALTER, DROP ou RENAME exécuté dans un script, l’arbre, la complétion et les propriétés de la table relisent tables, colonnes et types tout seuls, quelques secondes plus tard — sans refermer ce qui était ouvert dans l’arbre. Avec l’autocommit désactivé, la relecture attend le Commit (ou le Rollback), car avant cela la modification n’existe pas encore pour les autres sessions. Quand la structure a changé ailleurs (un autre programme, une migration), utilisez le bouton Actualiser les métadonnées dans la barre du script, dans le menu de la connexion, à côté du filtre de l’arbre ou l’Actualiser des propriétés de la table.
Explorer le schéma : Faites un clic droit sur une
table pour Insérer un SELECT dans l'éditeur, Afficher les données,
Compter les lignes, Copier le nom qualifié ou ouvrir le sous-menu Générer du
SQL → INSERT/UPDATE/MERGE : un écran liste les colonnes de la table pour que vous
puissiez cocher Inclure et Clé, affiche un aperçu en direct et dépose la commande
dans l'éditeur (MERGE sort en ANSI ; si le pilote ne le prend pas en charge, un avertissement
apparaît). Directement sur la grille de résultats, le bouton Générer du SQL de la barre
du bas construit un INSERT/UPDATE/DELETE pré-rempli avec les valeurs de la ligne
sélectionnée (disponible quand la requête est un SELECT de table unique). Les
noms de table et de colonne que vous parcourez dans l'arborescence commencent aussi à
apparaître dans l'autocomplétion (Ctrl+Espace) des éditeurs .sql de
la connexion, sans requêtes supplémentaires à la base.
Diagramme ER : dans le menu contextuel du dossier Tables,
Diagramme ER des tables les dessine toutes ; dans celui d'une table, Diagramme ER (cette
table et celles qu'elle référence) dessine celle-ci et les tables que ses clés étrangères
désignent. Le résultat est une note dans Dictionnaire de données avec un bloc
mermaid erDiagram — colonnes avec leur type, PK/FK, et
chaque clé étrangère comme relation (facultative quand la colonne accepte NULL, un à un quand la
clé est la clé primaire elle-même). C'est du texte dans la note : il se versionne dans Git et
s'édite comme n'importe quel diagramme. Au-delà de 40 tables, les autres sont laissées de côté,
et la note dit combien.
Importer un fichier dans une table : Importer un fichier dans une
table… (dans le menu de la connexion et dans celui du dossier Tables) et Importer un
fichier dans cette table… (dans celui d'une table) amènent un CSV, un TSV ou un classeur Excel
dans la base — le chemin retour d'Exporter le résultat. La fenêtre montre un aperçu avec le
type lu pour chaque colonne : un type ne vaut que si toutes les cellules correspondent
(entier sans zéro initial — 01310 est un code et reste du texte —, décimal avec point
ou avec virgule, date ISO, vrai/faux) ; une date jj/mm/aaaa reste du texte, car le
mois peut venir en premier. Une cellule vide devient NULL. Le séparateur est détecté comme dans la
vue tableau. Créer la table utilise le nom du fichier ; Ajouter à la table vérifie
d'abord que les colonnes du fichier y existent. Tout passe dans une seule transaction : si
une ligne échoue, rien ne reste — et la table créée par cette importation est supprimée. Les
verrous valent ici aussi : une connexion en lecture seule refuse, et une connexion de production
demande d'abord. Sur une connexion DuckDB, le CSV est lu directement par la base, sans limite de
lignes ; sur les autres, la limite est de 100 000 lignes.
Export, variables et transactions
Exporter les résultats : faites un clic droit sur la grille de résultats et choisissez
Exporter le résultat... pour écrire en CSV (délimiteur, caractère de quote,
toujours mettre entre quotes, ligne d'en-tête, texte NULL), JSON Lines ou SQL
(instructions INSERT avec un nom de table), avec une limite de lignes facultative.
L'export parcourt la requête entière en mode streaming (re-fetch paginé), pas seulement
ce qui est visible à l'écran.
Résultat dans la note du jour : dans le menu Exporter de la grille,
Ajouter à la note du jour reprend le tableau tel qu'il est à l'écran — les colonnes
visibles, dans l'ordre de la grille, avec la recherche et le filtre — et, juste en dessous, la
requête dans un bloc sql : la note garde d'où vient le chiffre. NULL apparaît
comme NULL, les nombres sont alignés à droite, et une ligne en italique indique quand
le tableau n'est pas le résultat complet (les 200 premières lignes, ou seulement celles déjà
chargées).
Variables de script : écrivez @set nom = valeur sur
une ligne du script pour définir une variable — le préfixe @ la tient à
l'écart de la base (pas de conflit avec le vrai SET de
Postgres/DuckDB/SQL Server). Les références :nom sont remplacées avant
l'exécution (hors chaînes et commentaires ; le cast ::type et les binds
comme :1 restent intacts) ; un :nom sans valeur ouvre une
invite avant l'exécution. L'élément Variables… du menu d'Exécuter
ouvre l'écran des variables déjà définies (modifier/ajouter/supprimer).
Paramètres : quand vous exécutez une instruction avec :nom —
ou avec ?, ?1, ?2, sauf sous PostgreSQL, où
? est un opérateur JSON —, la fenêtre Paramètres de la requête montre
l'instruction et tous ses paramètres déjà remplis avec la dernière valeur utilisée, et la
liste de chacun garde les valeurs précédentes : relancer avec une autre valeur, c'est
changer un champ. La valeur est insérée telle quelle dans le SQL, donc le texte va entre
apostrophes ('abc'). Ce que le script définit avec @set n'est
pas demandé. Décochez Demander à chaque exécution pour que l'onglet utilise les
dernières valeurs sans demander ; pour les changer ensuite, utilisez
Variables….
Historique des requêtes : l'élément Historique… du menu
d'Exécuter ouvre une fenêtre avec les dernières instructions exécutées avec
succès sur cette connexion, dans les colonnes SQL / Quand / Durée / Lignes.
Sélectionnez-en une pour Réexécuter, Insérer dans l'éditeur ou
Copier (le double-clic insère), ou utilisez Effacer l'historique. Il
est gardé uniquement sur la machine locale (ni dans Git ni dans le
.lnc).
Historique de toutes les connexions : dans la fenêtre de l'historique, cochez Toutes les connexions pour voir les requêtes de toutes les bases, de la plus récente à la plus ancienne, avec la colonne de la connexion, et chercher dans toutes par le champ de filtre. Réexécuter ne vaut que pour les requêtes de cette connexion ; celles d'une autre s'insèrent dans l'éditeur, pour que vous les exécutiez sur la bonne base.
Transactions : l'option Autocommit (activée par défaut) se trouve dans le menu d'Exécuter. Désactivée, les modifications restent en attente jusqu'à ce que vous les validiez (Commit) ou les annuliez (Rollback), et la barre de l'onglet affiche Transaction · N en attente, avec les deux commandes. Fermer l'onglet, changer de connexion ou se déconnecter avec une transaction ouverte demande quoi faire.
Index
Édition
- Vue d'ensemble
- Premiers pas
- Espace de travail et fenêtres
- Panneau Activités : tâches et messages
- Éditeur de code
- Markdown et wikilinks
- Diagrammes (Mermaid)
- Mathématiques et chimie (LaTeX)
- Calendrier dans la note
- Numérotation et renvois
- Citations et références
- Norme du travail universitaire
- Graphe de connexions
- Tables (Parquet, CSV, JSON, Excel)
- Espace d'analyse : tableau croisé dynamique et plusieurs graphiques
- PDF et images
- Images : annoter une capture
- Pages HTML (.html)
- Imprimer
- Zip comme un dossier (.zip)
- Blocs (.lnb)
- Tâches (Kanban / Gantt)
- Table personnalisée (.lnd)
- Bases (requêtes enregistrées sur vos notes)
Outils
- Recherche dans les fichiers et éléments en attente
- Suivi de version (Git facile)
- Instantanés et sauvegarde
- Réviser les modifications (points de contrôle)
- Comparer des fichiers (diff)
- Exécuter du code (F5)
- Terminal et CLI d'IA
- Assistant IA sur la sélection (Ctrl+K / Ctrl+I)
- IA sur votre ordinateur
- Sessions IA
- Chat IA
- Tester des API HTTP (.lnh)
- Bases de données (.lnc)
- Connexion SSH (.lns)
- Sécurité : Phrase-Sécurité, PIN et Markdown sécurisé
- Notes quotidiennes, capture rapide et zone de notification
- Retrouver d'anciennes notes
- Vos notes sur votre téléphone
- Enregistrer l'audio (voix, réunion) avec transcription par IA
- Notes autocollantes
- Calendrier
- Palette de commandes
Automatisation (IA / scripts)
Référence