Database (.lnc)

Guarda il videoAnalizzare dati 00:23

La connessione

Una connessione è un file .lnc (LightNote Connection) dentro lo spazio di lavoro — versionabile in Git e portabile tra macchine. Le connessioni della cartella compaiono nel pannello Connessioni della barra laterale (l'icona del database), ciascuna con un punto di stato (verde connessa, grigio disconnessa, rosso con errore) e, sotto, gli script che le appartengono. Creane una con Nuovo → Nuova connessione DB o con il pulsante del pannello; aprire un .lnc dall'albero dei file porta anch'esso al pannello. Sotto l'elenco c'è l'albero degli oggetti della connessione selezionata. Il menu contestuale della connessione offre Connetti/Disconnetti, Nuovo script, Console SQL e Modifica connessione.

Cartella senza connessione: il pannello Connessioni vuoto offre Nuova connessione… e Apri un file di database…, ed elenca i database SQLite e DuckDB su file già presenti nella cartella, ciascuno con un Connetti. Il database è riconosciuto dal contenuto del file, non dall'estensione (un .db può essere l'uno o l'altro); un clic crea la connessione (.lnc) accanto al file, indicandolo per nome — i due viaggiano insieme — e si connette subito.

Script: uno script è un normale file .sql e si apre nella scheda di codice, come qualsiasi file — con cronologia, barra delle modifiche e Salva versione. All'inizio della barra della scheda ci sono il selettore di connessione e il pulsante Esegui; i risultati compaiono sotto l'editor alla prima esecuzione (o di lato: Esegui → Risultati di lato). La connessione di origine dello script è salvata nel .lnc, e riaprendo lo script questo punta già a essa. Scegliere un'altra connessione nel selettore vale solo per quella scheda; per cambiare l'origine, usa Usa sempre "…" per questo script. Uno script senza origine si apre in Nessuna connessione, anche se la cartella ha una sola connessione: nessuno script si apre puntato a un database che non hai scelto. La Console SQL è una scheda senza file, già collegata alla connessione. L'Area di analisi di un risultato è salvata accanto allo script (query.sql.analysis.json), una per query: il file conserva i grafici, le tabelle pivot e l'SQL di ciascuna — mai i dati.

Una sessione per scheda: ogni scheda di script apre la propria sessione con il database — una query lunga in una scheda non blocca le altre né l'albero degli oggetti, e il Commit di una scheda non conferma ciò che ha fatto un'altra. Le tabelle temporanee e i comandi SET valgono solo nella scheda in cui sono stati eseguiti. Se il server limita il numero di connessioni, deseleziona Una sessione per scheda in Modifica connessione. I file SQLite e DuckDB condividono sempre la stessa sessione (in SQLite una scrittura blocca l'intero file). Il pannello mostra quante sessioni ha aperte ogni connessione.

Driver: SQLite e DuckDB (file) nativi; PostgreSQL, MySQL/MariaDB, SQL Server e generico tramite ODBC; Oracle nativo (senza ODBC). SQL Server usa il driver msodbcsql di Microsoft (installalo sulla macchina) e offre l'autenticazione di Windows o utente/password, oltre alle opzioni di cifratura del canale (Encrypt / fidati del certificato). Per Oracle, imposta la cartella Oracle Instant Client in Impostazioni → Database — viene caricato a runtime, senza nulla da installare. La connessione Oracle ha quattro modalità: Nome servizio (host/porta/servizio), SID (host/porta/SID), Nome TNS (alias dal tnsnames.ora nella cartella del client) e Descrittore TNS completo (incollato in un campo di testo).

Password: spunta Salva password per cifrarla dentro il .lnc stesso (crittografia portabile, si apre su un'altra macchina); se deselezionata, la password non viene salvata e viene richiesta a ogni connessione. La cifratura usa una Passphrase per spazio di lavoro, impostata in Guida → Configura Passphrase; conservala al sicuro: senza di essa la password non può essere aperta da nessun'altra parte. La Passphrase è memorizzata nella cache solo sulla macchina locale (non va mai su Git).

Seleziona Connetti all'apertura perché la connessione si apra da sola quando apri uno dei suoi script. La connessione automatica è silenziosa: se la password va digitata (modalità chiedi, o cifrata senza la Passphrase in cache sulla macchina), lo script si apre disconnesso, senza interromperti.

Produzione senza paura: in Modifica connessione, il campo Ambiente dice quale database è — Sviluppo, Collaudo o Produzione —, e il suo colore compare nel selettore di connessione della scheda .sql, in una fascia in cima alla scheda e in un badge nel pannello Connessioni. Su una connessione di produzione, ciò che modifica il database (INSERT, UPDATE, DELETE, CREATE, DROP, procedure…) mostra prima cosa sta per essere eseguito e chiede conferma, con l'UPDATE/DELETE senza WHERE in evidenza; il pulsante predefinito è Annulla, e salvare le modifiche della griglia chiede allo stesso modo. Spunta Sola lettura perché la connessione rifiuti tutto ciò che modifica il database — nello script, nella griglia e nei dati di una tabella — prima che l'istruzione esca da LightNote: la griglia non offre più la modifica e, su SQLite, il file si apre in sola lettura. Ciò di cui LightNote non sa dire se si limita a leggere (un blocco BEGIN … END, un DECLARE) conta come scrittura.

Tunnel SSH: per un database dietro un server SSH (bastione), scegli in Tunnel SSH una connessione SSH (.lns) dello spazio di lavoro — la stessa del terminale remoto, con utente, chiave o password cifrata. Host e Porta diventano quelli del database visti dal server SSH (di solito localhost). Alla connessione, LightNote apre il tunnel e raggiunge il database attraverso di esso; disconnettersi chiude il tunnel. Parte solo quando ti connetti (mai all'apertura del file), il .lns deve stare nello spazio di lavoro, e le opzioni di ssh che eseguono comandi (ProxyCommand, LocalCommand, -F) sono rifiutate — -J va bene. Passano solo le opzioni di un elenco consentito (-J, -i, -4/-6, -C e -o con chiavi di connessione, cifratura e autenticazione): anche -A, -R, -I e -E vengono rifiutate. Una connessione con tunnel non viene aperta dall'IA (MCP), da lnote né dai Blocchi, che si collegherebbero direttamente.

Informazioni sul server: alla connessione, l’app chiede al database cosa dice di sé — la versione, il database e lo schema correnti, l’utente, la dimensione, la codifica, l’ordinamento e il fuso orario, e se il server accetta scritture (una replica no). La versione compare nel tooltip della connessione, il resto in Informazioni sul server…, nel menu contestuale della connessione, con un pulsante per copiarlo. Un dato che il server non fornisce — versione vecchia, privilegio mancante — viene omesso, senza errore. La versione viene inviata quando chiedi all’IA di spiegare un errore o di analizzare un piano: la sintassi che può suggerire dipende da essa.

Chiavi esterne in SQLite: SQLite applica le chiavi esterne dichiarate — e l’ON DELETE CASCADE — solo quando la connessione lo chiede, e le connessioni dell’app lo chiedono: eliminare una riga a cui altre fanno riferimento, o inserire un riferimento a un record inesistente, viene rifiutato, e il CASCADE elimina le righe figlie come dice lo schema. La casella Verifica le chiavi esterne, in Modifica connessione…, lo disattiva — solo per un caricamento massivo fuori ordine. Attivarlo non controlla ciò che è già nel file: Informazioni sul server… conta, per tabella, i riferimenti non validi già presenti (righe che puntano a un record inesistente), scritti da uno strumento che non li verificava.

Eseguire e vedere il risultato

Esecuzione: Ctrl+Invio esegue l'istruzione sotto il cursore e Alt+X esegue l'intero script; i risultati appaiono paginati, ciascuno in una scheda Risultato con una barra di azioni in basso: Recupera il blocco successivo, Congela il risultato, Conteggio totale, cambia il Limite di righe, Aggiorna (riesegue), Visualizza/Copia SQL, Esporta... e Genera SQL dalla riga selezionata. Che cosa sia un’istruzione lo dice il testo stesso: un blocco BEGIN … END e un corpo $$ … $$ restano interi, e una riga con solo / (Oracle) o GO (SQL Server) separa anch’essa.

Scrivere SQL con un aiuto: Ctrl+Spazio completa in base al contesto: dopo FROM, JOIN, UPDATE o INTO vengono le tabelle del database (l'elenco si apre da solo quando digiti lo spazio), e dopo alias. vengono le colonne di quella tabella (si apre da solo quando digiti il punto) — anche prima che il FROM sia scritto, e senza espandere nulla nell'albero: LightNote legge il catalogo del database in background, e le colonne solo quando il testo ci arriva. In uno script con più istruzioni, quella che Ctrl+Invio eseguirà è evidenziata. Quando un'istruzione fallisce, viene segnata nell'editor, il nome indicato dal database (la tabella o la colonna che non esiste, il punto dell'errore di sintassi) riceve una sottolineatura ondulata, il cursore va lì e il messaggio appare fermando il mouse sopra. Ctrl+clic o F12 sul nome di una tabella ne apre i dati; F4, le proprietà. Formatta (Shift+Alt+F) riordina l'SQL senza strumenti installati: una clausola per riga, gli elementi del SELECT uno per riga quando sono più d'uno, AND/OR e sottoquery rientrati. Cambia solo gli spazi e le maiuscole delle parole chiave, mai un nome, un testo o un commento, e lascia com'erano le istruzioni che non sono query (CREATE, blocchi BEGIN … END).

Congela il risultato: legge l'intero risultato dal database in una sola passata e lo tiene in una tabella locale (su disco, se non entra in memoria). Da lì in poi la griglia scorre senza interrogare il database, il conteggio delle righe diventa esatto (senza Conta il totale), fare clic su un'intestazione ordina (un altro clic inverte; un terzo clic torna all'ordine in cui il database ha consegnato le righe) e anche l'esportazione legge dalla copia locale. L'ordinamento tramite l'intestazione vale fino a 100 mila righe; oltre viene rifiutato, con il motivo nel tooltip dell'intestazione, perché ogni pagina dovrebbe riordinare l'intera copia e percorrere la griglia tornerebbe a richiedere minuti. Un risultato già arrivato per intero nella prima pagina si ordina senza congelare: le righe sono già in memoria. Ciò che non si ordina è la prima parte di un risultato ancora paginato — l'intestazione affermerebbe un ordine valido solo per quello a schermo.

Il grafico e la tabella pivot valgono sull'intero risultato, anche nei database in cui il grafico non esisteva. Se il congelamento si ferma prima della fine (hai premuto Interrompi o è stato raggiunto il tetto), le righe restano locali ma il grafico e la tabella pivot restano sul server: sommare su una parte del risultato darebbe un numero sbagliato — e ordinare la griglia ordina solo le righe recuperate, non l'intero risultato.

Aggiorna scongela ed esegue di nuovo la query. Indipendentemente dal congelamento, le pagine già passate per la griglia restano in locale: tornare indietro a una di esse non interroga di nuovo il database. Un congelamento alla volta: con due risultati aperti, fare clic su Congela il risultato nell’altro viene rifiutato con il motivo, invece di interrompere quello in corso — per fermarlo, usa Interrompi nella sua scheda.

Griglia dei risultati: ogni query che restituisce righe ottiene una scheda con il nome della sua tabella (l'SQL completo è nel suggerimento della scheda). Una nuova esecuzione sostituisce queste schede, tranne quelle bloccate — clic destro sulla scheda, Blocca il risultato —, che restano per confrontare; la × chiude un risultato. Accanto alle schede, il riepilogo dell'esecuzione dice quante righe sono arrivate e quanto ci è voluto, o l'errore in rosso; un clic apre i Messaggi. Il piè di pagina ripete righe e tempo e, finché il risultato è parziale, offre Recupera blocco successivo e Conta il totale. La barra sopra la griglia raggruppa il resto: Aggiorna, Congela, Limite, il menu Analisi, Valore, Colonne ed Esporta (con Copia SQL, Visualizza SQL e Genera SQL); in una finestra stretta i pulsanti perdono il testo prima di sparire. L'intestazione mostra il tipo di ogni colonna (testo, numero, data…) e segna con una chiave le colonne della chiave della tabella; con il mouse sopra, il tipo appare per esteso. Trascinare l'intestazione riordina le colonne, e Colonne (o il clic destro sull'intestazione) nasconde, mostra e adatta la larghezza al contenuto — la scelta sopravvive ad Aggiorna, al Limite e all'ordinamento.

Celle: un NULL appare in corsivo sbiadito, distinto da un testo vuoto, e i numeri sono allineati a destra; selezionando più celle, il piè di pagina mostra il conteggio della selezione e, se sono numeriche, somma e media. Valore (o Mostra valore nel pannello dal menu contestuale) apre accanto il valore completo della cella selezionata, senza tagli, con Formatta per abbellire JSON/XML solo nella visualizzazione; il pulsante Record del pannello sostituisce il valore con l'intera riga trasposta — una colonna per riga, con il nome accanto al valore —, che segue il cursore (anche con Vedi l'intero record, nel menu della cella). Nel menu di una cella, Filtra per questo valore / Escludi questo valore rieseguono la query con un WHERE sulla cella, e Vai al record referenziato segue la chiave esterna della colonna e interroga la tabella padre con il valore.

Cercare e filtrare nella griglia: Ctrl+F con il focus sulla griglia porta al campo Cerca nella griglia, che mostra solo le righe che contengono il testo in qualsiasi colonna — con il focus nell'editor, Ctrl+F resta la ricerca dell'SQL. L'imbuto accanto apre il Filtro avanzato (condizioni per colonna, con E/O), e le colonne filtrate ricevono un imbuto nell'intestazione; un clic su una barra del grafico, su una cella della tabella pivot o su un valore frequente in Qualità diventa una selezione, un'etichetta sopra la griglia che si toglie con la sua ×. Il piè di pagina dice quante righe restano su quante. Ricerca e filtro valgono sul risultato intero, in una copia locale: con un risultato arrivato intero è immediato; con solo la prima parte, il campo è grigio con il motivo — filtrare ciò che è a schermo nasconderebbe ciò che sta nella parte successiva — e Congela lo sblocca. Con la ricerca o il filtro attivi, il grafico, la tabella pivot e Qualità descrivono lo stesso sottoinsieme della griglia. Niente di tutto questo cambia la query: per restringere nel database, usa Filtra per questo valore o scrivi il WHERE.

Grafico e tabella pivot: dove viene fatto il calcolo. Il menu Analisi contiene il Grafico, la Tabella pivot, Qualità e l'Area di analisi, e sotto Analizza su la scelta fra Dati locali e Tabella intera (sul server), spuntata su quella in vigore. Quando il risultato è entrato per intero nella prima pagina, l'impostazione predefinita è locale: LightNote aggrega sul risultato già a schermo, senza tornare al database a ogni modifica di asse, di aggregato o di intervallo — e, poiché il motore locale è DuckDB, il grafico esiste ora anche su Oracle, SQL Server, PostgreSQL e MySQL, dove il suo SQL non gira sul server. Quando il risultato è arrivato troncato, l'opzione locale non è disponibile, con il motivo: aggregare su un campione darebbe un numero sbagliato, e avvisare del taglio non proteggerebbe nessuno, perché in un grafico si legge l'altezza della barra. L'opzione del server aggrega sull'intera query, con una query per ogni modifica, e non è disponibile finché la griglia ha una ricerca o un filtro (il sottoinsieme esiste solo qui). Le colonne numeriche che il database consegna come testo — il caso del NUMBER di Oracle — sono riconosciute come numeri; gli identificativi con zero iniziale, come 01310, restano testo. Su Oracle, SQL Server, PostgreSQL e MySQL, con il risultato ancora parziale, Grafico è grigio con il motivo, e si accende quando congeli il risultato.

Qualità dei dati del risultato. La voce Qualità del menu Analisi apre, accanto alla griglia, lo stesso profilo per colonna delle tabelle di file. Lo calcola DuckDB: sulla copia locale quando il risultato è arrivato intero (o è stato congelato), oppure nel database stesso quando è DuckDB. Su Oracle, SQL Server, PostgreSQL e gli altri, finché il risultato è parziale, il pannello dice perché non lo descrive e offre lì stesso Congela il risultato; se il congelamento si ferma al limite, consiglia di restringere la query — il profilo di una parte descriverebbe un'altra tabella. Un clic su un valore frequente filtra la griglia (è una selezione, come la ricerca); per restringere nel database, usa Filtra per questo valore nel menu della cella.

Su quanti dati è stata fatta l’analisi. Sopra il grafico, la tabella pivot, la qualità e l’Area di analisi, una riga dice se il calcolo ha usato tutti i dati — con il numero di righe, contato da solo sulla copia locale — oppure se è stato fatto nel database, sull’intera query; lì il conteggio è il link Conta righe, perché contare esegue di nuovo la query. Quando il congelamento si è fermato prima della fine e nella griglia c’è una ricerca o un filtro, l’analisi può riguardare solo ciò che è stato recuperato, e la riga dice Parte dei dati, con il tono di avviso. La stessa frase va nella legenda del report dell’Area di analisi.

Snapshot dei dati: l'analisi di uno script salvato conserva le schede accanto a esso, non i dati — per rivederla serve il database. Il pulsante Snapshot dei dati dell'Area di analisi salva il risultato intero in un file Parquet accanto allo script, insieme alle schede; aprire quel file mostra la stessa analisi senza connessione, sui dati di quel momento. È un gesto esplicito e la finestra avvisa prima: il file è una copia dei dati del database, e va con la cartella se questa finisce su Git o viene condivisa. Esiste solo con il risultato intero qui — con solo la prima parte, congelalo prima (lo dice il suggerimento del pulsante).

Piano di esecuzione: la voce Piano di esecuzione del menu di Esegui chiede il piano dell'istruzione sotto il cursore (SQLite, DuckDB, PostgreSQL e MySQL) e lo mostra nella scheda Piano: l'albero dei passi, con il più pesante evidenziato e una frase che dice cosa significa — in PostgreSQL e MySQL, il passo con il costo proprio più alto (il suo costo meno quello dei passi al suo interno), con la sua quota del totale; in DuckDB, quello che produce più righe; in SQLite, che non indica il costo, la lettura di un'intera tabella. Quando il passo legge l'intera tabella in un database che ha indici, la frase ricorda che un indice sulla colonna filtrata di solito lo evita (in DuckDB, colonnare, leggere l'intera tabella è normale e il consiglio non compare). L'alias della query (FROM ordini o) viene sostituito dal nome della tabella. Visualizza come testo mostra lo stesso albero rientrato, e Copia il piano lo copia. I numeri sono la stima del pianificatore: la query non viene eseguita. Anche un EXPLAIN digitato si apre nella scheda Piano quando LightNote riconosce la risposta; ciò che non riconosce resta nella griglia. Nei database che non espongono il piano in un'unica istruzione (SQL Server, Oracle) la voce è disattivata, con il motivo nel suggerimento.

Analizza con l'IA: l'evidenziazione dice quale passo pesa; il pulsante Analizza con l'IA della scheda Piano chiede perché il pianificatore l'ha scelto e cosa cambiare. Vengono inviati la query, il piano e lo schema delle tabelle che legge — con gli indici che esistono già, così l'IA non suggerisce di crearne uno già presente. I valori vengono tolti prima dell'invio (il testo tra virgolette e i numeri diventano ?; i commenti spariscono), e Vedi cosa verrà inviato mostra esattamente cosa parte. Il suggerimento si apre nell'editor come nuovo script, e non viene eseguito nulla.

Lo schema

Dati di una tabella: fai doppio clic su una tabella nell'albero dello schema per aprire la sua scheda sulla sotto-scheda Dati. Sopra la griglia ci sono due campi, WHERE e ORDER BY, applicati con Invio — ed entrambi vanno al database, quindi valgono per l'intera tabella, non solo per le righe sullo schermo. Fare clic sull'intestazione di una colonna ordina anch'esso nel database (crescente, decrescente, senza ordine) e compila l'ORDER BY; Filtra per questo valore nel menu di una cella aggiunge la condizione al WHERE, visibile e modificabile. La scheda ha una propria sessione con il database, come una scheda di script. Aprire la tabella da Proprietà non interroga i dati: la query viene eseguita solo quando viene mostrata la sotto-scheda Dati. Con ORDER BY vuoto, le righe arrivano nell'ordine della chiave primaria (il campo mostra quale): senza alcun ordine, il database non garantisce la stessa sequenza da una pagina alla successiva, e scorrendo si potevano ripetere o saltare righe. Ordinando dall'intestazione, la chiave decide tra le righe con lo stesso valore.

Modificare i dati: nella griglia di una tabella con chiave primaria (o univoca, su colonne NOT NULL), fai doppio clic su una cella, premi F2 o inizia a digitare. L'editor segue il tipo della colonna: una data con calendario, vero/falso in un elenco, un numero che accetta solo numeri e JSON verificato alla conferma. Il testo cancellato diventa testo vuoto, non NULL: il NULL è un gesto a sé (Imposta come NULL nel menu della cella, o il pulsante NULL del pannello del valore, che modifica anche i testi lunghi). Insert aggiunge una nuova riga — ciò che resta predefinito riceve il valore predefinito del database —, Duplica riga copia quella selezionata tranne la chiave, e Canc contrassegna le righe per l'eliminazione (di nuovo, toglie il contrassegno). Niente di tutto questo va subito al database: le modifiche restano in sospeso, colorate nella griglia (ambra la modificata, verde la nuova, rosso barrato l'eliminata), e una fascia sopra le conta. Rivedi… mostra l'SQL che verrà eseguito e lo copia come script; Salva scrive tutto in un'unica transazione, verificando che ogni UPDATE e DELETE tocchi esattamente una riga — se una riga è stata modificata o eliminata da un'altra sessione dopo la lettura, o se un'istruzione fallisce, non viene scritto nulla e le modifiche restano nella griglia; Scarta le annulla tutte. Ricaricare la griglia, cambiare il filtro o chiudere la scheda con modifiche in sospeso chiede prima.

Quando la griglia non modifica, dice perché: nel suggerimento dei pulsanti e in una fascia quando si prova a modificare. Una tabella senza chiave primaria né univoca su colonne NOT NULL resta in sola lettura: senza la chiave non si può sapere quale riga cambierebbe ogni modifica. In una scheda di script, il risultato si modifica anche quando la query è una SELECT da una sola tabella che ne elenca le colonne (o usa SELECT *) e restituisce la chiave; join, sottoquery, colonna calcolata o rinominata, DISTINCT, GROUP BY e UNION lasciano il risultato in sola lettura. Le colonne binarie non si modificano nella griglia. E con una transazione aperta nella scheda (autocommit disattivato) con istruzioni in sospeso, conferma o annulla prima di salvare: salvare la griglia le porterebbe con sé.

Proprietà dell'oggetto: premi F4 su una tabella dell'albero dello schema (o scegli Proprietà dal menu contestuale) per aprire la sua scheda direttamente sulla struttura; accanto a Dati ci sono quattro sotto-schede: Colonne (n., nome, tipo, nullabilità, valore predefinito e un'icona di chiave sulle colonne della chiave primaria), Chiavi (vincoli di chiave primaria, esterna, unica e check; un doppio clic su una chiave esterna apre la tabella referenziata), Indici e DDL — il CREATE TABLE dell'oggetto, pronto per copiarlo, salvarlo come .sql o aprirlo in una scheda modificabile. Quando il database non fornisce il DDL già pronto (PostgreSQL e SQL Server non hanno questo comando), LightNote lo ricostruisce dai metadati — lo stesso accade quando il comando di DDL viene negato per mancanza di permessi — e lo indica chiaramente nella scheda. Se non è leggibile nemmeno il catalogo delle colonne (nessun permesso o catalogo non disponibile), non c'è nulla da cui ricostruire: la scheda lo segnala invece di restare silenziosamente vuota. Il menu contestuale della tabella offre anche Copia DDL senza aprire la scheda.

Albero degli oggetti: nel pannello Connessioni, sotto l'elenco, l'albero della connessione selezionata separa le Tabelle dalle Viste (ciascuna con la sua icona) e segna con una chiave le colonne che fanno parte della chiave primaria. L'albero mostra anche Procedure e funzioni, Trigger e Sequenze (dove il database li ha); un doppio clic su una procedura, funzione o trigger apre il suo codice sorgente in una console SQL della connessione. Accanto a ogni tabella compare il numero approssimativo di righe, e nel suggerimento il suo commento: è la stima che il database conserva, non un COUNT(*). Gli schemi di sistema (SYS, pg_catalog…) sono nascosti; la voce in fondo all'elenco li mostra. La casella di filtro setaccia subito ciò che è già caricato e, da 2 lettere in su, cerca anche nel database: ciò che nessuno ha espanso compare nella cartella Nel database in alto. In uno script, Ctrl+Alt+O (Vai alla tabella…, nel selettore della connessione) apre la ricerca da tastiera, e F12 sul nome di una tabella apre la sua scheda.

Aggiorna metadati. Dopo un CREATE, ALTER, DROP o RENAME eseguito in uno script, l’albero, il completamento e le proprietà della tabella rileggono da soli tabelle, colonne e tipi, pochi secondi dopo — senza chiudere ciò che era aperto nell’albero. Con l’autocommit disattivato, la rilettura aspetta il Commit (o il Rollback), perché prima la modifica non esiste ancora per le altre sessioni. Quando la struttura è cambiata dall’esterno (un altro programma, una migrazione), usa il pulsante Aggiorna metadati nella barra dello script, nel menu della connessione, accanto al filtro dell’albero o l’Aggiorna delle proprietà della tabella.

Esplorare lo schema: Clic destro su una tabella per Inserisci SELECT nell'editor, Anteprima dati, Conta righe, Copia nome qualificato oppure apri il sottomenu Genera SQL → INSERT/UPDATE/MERGE: una schermata elenca le colonne della tabella così puoi spuntare Includi e Chiave, mostra un'anteprima dal vivo e inserisce il comando nell'editor (il MERGE esce in ANSI; se il driver non lo supporta, appare un avviso). Direttamente sulla griglia dei risultati, il pulsante Genera SQL nella barra inferiore costruisce un INSERT/UPDATE/DELETE precompilato con i valori della riga selezionata (disponibile quando la query è un SELECT su una singola tabella). I nomi di tabelle e colonne che esplori nell'albero iniziano anche a comparire nell'autocompletamento (Ctrl+Spazio) degli editor .sql della connessione, senza query aggiuntive al database.

Diagramma ER: nel menu contestuale della cartella Tabelle, Diagramma ER delle tabelle le disegna tutte; in quello di una tabella, Diagramma ER (questa tabella e quelle a cui fa riferimento) disegna quella e le tabelle a cui puntano le sue chiavi esterne. Il risultato è una nota in Dizionario dei dati con un blocco mermaid erDiagram — colonne con tipo, PK/FK, e ogni chiave esterna come relazione (facoltativa quando la colonna accetta NULL, uno a uno quando la chiave è la chiave primaria stessa). È testo nella nota: si versiona in Git e si modifica come qualsiasi diagramma. Oltre 40 tabelle le altre restano fuori, e la nota dice quante.

Importare un file in una tabella: Importa file in una tabella… (nel menu della connessione e in quello della cartella Tabelle) e Importa file in questa tabella… (in quello di una tabella) portano un CSV, TSV o foglio Excel nel database — la via di ritorno di Esporta risultato. La finestra mostra un'anteprima con il tipo letto per ogni colonna: un tipo vale solo se tutte le celle corrispondono (intero senza zero iniziale — 01310 è un codice e resta testo —, decimale con punto o con virgola, data ISO, vero/falso); una data gg/mm/aaaa resta testo, perché il mese può venire prima. Una cella vuota diventa NULL. Il separatore viene rilevato come nella vista tabella. Crea la tabella usa il nome del file; Aggiungi alla tabella verifica prima che le colonne del file esistano. Tutto va in una sola transazione: se una riga fallisce, non resta nulla — e la tabella creata da questa importazione viene eliminata. I blocchi valgono anche qui: una connessione in sola lettura rifiuta, e una di produzione chiede prima. Su una connessione DuckDB il CSV viene letto direttamente dal database, senza limite di righe; sulle altre il limite è di 100.000 righe.

Esportazione, variabili e transazioni

Esporta risultati: clic destro sulla griglia dei risultati e scegli Esporta risultati... per scrivere CSV (delimitatore, carattere di quotatura, sempre tra virgolette, riga di intestazione, testo per NULL), JSON Lines o SQL (istruzioni INSERT con un nome di tabella), con un limite di righe opzionale. L'esportazione percorre l'intera query in modalità streaming (ri-recupero paginato), non solo ciò che è visibile a schermo.

Risultato nella nota del giorno: nel menu Esporta della griglia, Aggiungi alla nota del giorno porta la tabella com'è sullo schermo — le colonne visibili, nell'ordine della griglia, con la ricerca e il filtro — e, subito sotto, la query in un blocco sql: la nota ricorda da dove viene il numero. NULL appare come NULL, i numeri sono allineati a destra, e una riga in corsivo dice quando la tabella non è il risultato intero (le prime 200 righe, o solo quelle già caricate).

Variabili di script: scrivi @set nome = valore su una riga dello script per definire una variabile — il prefisso @ la tiene lontana dal database (non si scontra con il vero SET di Postgres/DuckDB/SQL Server). I riferimenti :nome vengono sostituiti prima dell'esecuzione (fuori da stringhe e commenti; il cast ::tipo e i bind come :1 restano intatti); un :nome senza valore apre una richiesta prima di eseguire. La voce Variabili… del menu di Esegui apre l'elenco delle variabili già definite (modifica/aggiungi/rimuovi).

Parametri: quando esegui un'istruzione con :nome — o con ?, ?1, ?2, tranne in PostgreSQL, dove ? è un operatore JSON —, la finestra Parametri della query mostra l'istruzione e tutti i suoi parametri già compilati con l'ultimo valore usato, e l'elenco di ciascuno conserva i valori precedenti: ripetere con un altro valore significa cambiare un campo. Il valore entra nell'SQL così com'è, quindi il testo va tra apici singoli ('abc'). Ciò che lo script definisce con @set non viene chiesto. Deseleziona Chiedi a ogni esecuzione perché la scheda usi gli ultimi valori senza chiedere; per cambiarli in seguito, usa Variabili….

Cronologia delle query: la voce Cronologia… del menu di Esegui apre una finestra con le ultime istruzioni eseguite con successo su questa connessione, nelle colonne SQL / Quando / Durata / Righe. Selezionane una per Rieseguire, Inserire nell'editor o Copiare (il doppio clic inserisce), oppure usa Cancella cronologia. È conservata solo sulla macchina locale (non va in Git né nel .lnc).

Cronologia di tutte le connessioni: nella finestra della cronologia, spunta Tutte le connessioni per vedere le query di tutti i database, dalla più recente alla più vecchia, con la colonna della connessione, e cercare in tutte con il campo di filtro. Riesegui vale solo per le query di questa connessione; quelle di un'altra si inseriscono nell'editor, così le esegui sul database giusto.

Transazioni: l'opzione Autocommit (attiva per impostazione predefinita) si trova nel menu di Esegui. Disattivata, le modifiche restano in sospeso finché non le confermi (Commit) o le annulli (Rollback), e la barra della scheda mostra Transazione · N in sospeso, con i due comandi. Chiudere la scheda, cambiare connessione o disconnettersi con una transazione aperta chiede cosa fare.

Indice

Modifica

Strumenti

Automazione (IA / script)

Riferimento