Подключение
Подключение — это файл .lnc (LightNote Connection) внутри самого
рабочего пространства: его можно хранить в Git и переносить между компьютерами.
Подключения папки видны на панели Подключения боковой панели (значок базы
данных), у каждого есть точка состояния (зелёная — подключено, серая — отключено,
красная — ошибка), а под ним — скрипты, которые к нему относятся. Создайте
подключение через Создать → Новое подключение к БД или кнопкой панели;
открытие .lnc из дерева файлов тоже ведёт на панель. Под списком
находится дерево объектов выбранного подключения. В контекстном меню подключения
есть Подключиться/Отключиться, Новый скрипт, SQL-консоль
и Изменить подключение.
Папка без подключения: пустая панель «Подключения» предлагает Новое
подключение… и Открыть файл базы… и показывает файлы баз SQLite и DuckDB, которые уже
лежат в папке, у каждого — кнопка Подключиться. База распознаётся по содержимому файла, а
не по расширению (.db может быть любой из двух); один щелчок создаёт подключение
(.lnc) рядом с файлом, указывающее на него по имени (оба переезжают вместе), и сразу
подключается.
Скрипты: скрипт — это обычный файл .sql, и он открывается во
вкладке кода, как любой файл, — с историей, полосой изменений и Сохранить
версию. В начале панели инструментов вкладки находятся выбор подключения и
кнопка Выполнить; результаты появляются под редактором при первом
выполнении (или сбоку: Выполнить → Результаты сбоку). Исходное
подключение скрипта хранится в .lnc, и при повторном открытии скрипт уже
указывает на него. Другое подключение, выбранное в списке, действует только для этой
вкладки; чтобы сменить исходное, используйте Всегда использовать «…» для этого
скрипта. Скрипт без исходного подключения открывается как Без
подключения, даже если в папке одно подключение: ни один скрипт не открывается
направленным на базу, которую вы не выбирали. SQL-консоль — это вкладка без
файла, уже связанная с подключением. Область анализа результата сохраняется
рядом со скриптом (query.sql.analysis.json), по одной на запрос: в файле
хранятся диаграммы, сводные таблицы и SQL каждого запроса — но никогда не
данные.
Отдельная сессия для каждой вкладки: каждая вкладка со скриптом открывает
собственную сессию с базой — долгий запрос в одной вкладке не блокирует ни другие, ни
дерево объектов, а Commit в одной вкладке не подтверждает изменения другой.
Временные таблицы и команды SET действуют только во вкладке, где их
выполнили. Если сервер ограничивает число подключений, снимите флажок Отдельная
сессия для каждой вкладки в Изменить подключение. Файлы SQLite и DuckDB
всегда используют одну сессию (в SQLite запись блокирует весь файл). Панель
показывает, сколько сессий открыто у каждого подключения.
Драйверы: SQLite и DuckDB (файловый) — нативно; PostgreSQL,
MySQL/MariaDB, SQL Server и обобщённый — через ODBC;
нативный Oracle (без ODBC). SQL Server использует драйвер Microsoft
msodbcsql (установите его на машине) и предлагает проверку
подлинности Windows или логин/пароль, а также параметры
шифрования канала (Encrypt / доверять сертификату). Для Oracle укажите
папку Oracle Instant Client в Настройки → База данных —
она загружается во время выполнения, ничего устанавливать не нужно.
Подключение Oracle имеет четыре режима: Service Name (хост/порт/
сервис), SID (хост/порт/SID), TNS Name (псевдоним из
tnsnames.ora в папке клиента) и Полный дескриптор TNS
(вставляется в текстовое поле).
Пароль: отметьте Сохранять пароль, чтобы зашифровать его
внутри самого .lnc (переносимое шифрование, открывается на
другой машине); если флажок не установлен, пароль не сохраняется и
запрашивается при каждом подключении. Шифрование использует
секретную фразу для каждого рабочего пространства, задаваемую в
Справка → Настроить секретную фразу; храните её в надёжном месте — без
неё пароль нельзя открыть больше нигде. Секретная фраза кэшируется только на
локальной машине (она никогда не попадает в Git).
Отметьте Подключаться при открытии, чтобы подключение открывалось само, когда вы открываете один из его скриптов. Автоматическое подключение тихое: если пароль нужно ввести (режим «спрашивать» или шифрование без секретной фразы в кэше на компьютере), скрипт открывается отключённым, не прерывая вас.
Продакшн без страха: в окне Изменить подключение поле Среда говорит, что
это за база — Разработка, Приёмочная или Продакшн, — и её цвет виден в выборе
подключения на вкладке .sql, в полосе вверху вкладки и на значке в панели «Подключения».
В подключении к продакшну всё, что меняет базу (INSERT, UPDATE,
DELETE, CREATE, DROP, процедуры…), сначала показывает, что будет
выполнено, и просит подтверждения, а UPDATE/DELETE без WHERE
выделяются; кнопка по умолчанию — Отмена, и сохранение изменений сетки спрашивает так же.
Отметьте Только чтение, чтобы подключение отклоняло всё, что меняет базу, — в скрипте, в сетке и в
данных таблицы — до того, как инструкция покинет LightNote: сетка перестаёт предлагать редактирование,
а в SQLite файл открывается только для чтения. То, о чём LightNote не может сказать, что оно только
читает (блок BEGIN … END, DECLARE), считается записью.
SSH-туннель: для базы за SSH-сервером (бастионом) выберите в поле SSH-туннель
SSH-подключение (.lns) из рабочего пространства — то же, что у удалённого терминала, с
пользователем, ключом или зашифрованным паролем. Хост и Порт тогда указывают базу так, как
её видит SSH-сервер (обычно localhost). При подключении LightNote открывает туннель и
подключается к базе через него; отключение закрывает туннель. Он запускается только при подключении
(никогда при открытии файла), .lns должен лежать в рабочем пространстве, а опции ssh,
выполняющие команды (ProxyCommand, LocalCommand, -F), отклоняются —
-J допустим. Проходят только параметры из списка разрешённых (-J, -i, -4/-6, -C и -o с ключами подключения, шифрования и аутентификации): -A, -R, -I и -E тоже отклоняются. Подключение с туннелем не открывают ИИ (MCP), lnote и Блоки,
которые подключились бы напрямую.
Сведения о сервере: при подключении приложение спрашивает у базы, что она сообщает о себе, — версию, текущую базу данных и схему, пользователя, размер, кодировку, сортировку и часовой пояс, а также принимает ли сервер запись (реплика не принимает). Версия видна во всплывающей подсказке подключения, остальное — в пункте Сведения о сервере… контекстного меню подключения, с кнопкой для копирования. То, что сервер не сообщает (старая версия, нет прав), пропускается без ошибки. Версия отправляется вместе с запросом, когда вы просите ИИ объяснить ошибку или разобрать план: от неё зависит, какой синтаксис он может предложить.
Внешние ключи в SQLite: SQLite применяет объявленные внешние ключи — и
ON DELETE CASCADE — только если подключение этого просит, и подключения приложения
просят: удаление строки, на которую ссылаются другие, или вставка ссылки на несуществующую запись
отклоняется, а CASCADE удаляет дочерние строки, как сказано в схеме. Флажок
Проверять внешние ключи в Изменить подключение… это отключает — только для массовой
загрузки не по порядку. Включение не проверяет то, что уже есть в файле: Сведения о сервере…
считает по таблицам уже существующие битые ссылки (строки, указывающие на несуществующую
запись), записанные инструментом, который их не проверял.
Выполнение и просмотр результата
Выполнение: Ctrl+Enter выполняет инструкцию под курсором, а
Alt+X — весь скрипт; результаты выводятся постранично, каждый — на
своей вкладке Результат с панелью действий внизу: Получить следующий блок, Заморозить результат, Общее количество, изменение
лимита строк, Обновить (повторное выполнение), Показать/
скопировать SQL, Экспорт... и Сгенерировать SQL из выбранной
строки. Что считать одной инструкцией, определяет сам текст: блок BEGIN … END и тело $$ … $$ остаются целыми, а строка только с / (Oracle) или GO (SQL Server) тоже разделяет.
Писать SQL с подсказками: Ctrl+Space дополняет по контексту:
после FROM, JOIN, UPDATE или INTO
идут таблицы базы (список открывается сам, когда вы вводите пробел), а после
псевдоним. — столбцы этой таблицы (открывается сам, когда вы вводите
точку), — даже до того, как написан FROM, и без раскрытия чего-либо в
дереве: LightNote читает каталог базы в фоне, а столбцы — только когда текст до них
доходит. В скрипте из нескольких инструкций подсвечена та, которую выполнит
Ctrl+Enter. Если инструкция не выполнилась, она отмечается в редакторе, имя,
на которое указала база (несуществующая таблица или столбец, место синтаксической
ошибки), подчёркивается волнистой линией, курсор переходит туда, а сообщение появляется,
если задержать над ним мышь. Ctrl+щелчок или F12 на имени таблицы
открывает её данные; F4 — её свойства. Форматировать
(Shift+Alt+F) приводит SQL в порядок без установленных инструментов: одно
предложение на строку, элементы SELECT по одному на строку, если их
несколько, AND/OR и подзапросы с отступом. Меняются только
пробелы и регистр ключевых слов — никогда имя, текст или комментарий, — а инструкции, не
являющиеся запросами (CREATE, блоки BEGIN … END), остаются
как есть.
Заморозить результат: читает весь результат из базы за один проход и сохраняет его в локальной таблице (на диск, если он не помещается в память). После этого таблица прокручивается без запросов к базе, число строк становится точным (Подсчитать всего уже не нужно), щелчок по заголовку сортирует (повторный щелчок меняет направление, третий возвращает порядок, в котором база выдала строки), а экспорт тоже читает локальную копию. Сортировка по заголовку доступна до 100 тысяч строк; свыше этого она отклоняется — причина указана в подсказке заголовка, — потому что каждая страница заново сортировала бы всю копию, и обход таблицы снова занимал бы минуты. Результат, который целиком пришёл на первой странице, сортируется без заморозки: строки уже в памяти. Не сортируется первая часть результата, который ещё подгружается страницами, — заголовок утверждал бы порядок, верный только для того, что на экране.
Диаграмма и сводная таблица начинают охватывать весь результат — в том числе в базах, где диаграммы раньше не было. Если заморозка прервалась (вы нажали Остановить или был достигнут предел), строки остаются локальными, но диаграмма и сводная таблица остаются на сервере: сумма по части результата дала бы неверное число, а сортировка таблицы упорядочит только полученные строки, а не весь результат.
Обновить размораживает и выполняет запрос заново. Независимо от заморозки страницы, уже прошедшие через таблицу, остаются локально: прокрутка назад к одной из них не обращается к базе заново. Одновременно выполняется только одна заморозка: если открыто два результата, нажатие Заморозить результат во втором будет отклонено с указанием причины, а идущая заморозка не прервётся — чтобы остановить её, используйте Остановить на её вкладке.
Сетка результатов: каждый запрос, возвращающий строки, получает вкладку с именем своей таблицы (полный SQL — во всплывающей подсказке вкладки). Новое выполнение заменяет эти вкладки, кроме закреплённых — щелчок правой кнопкой по вкладке, Закрепить результат, — они остаются для сравнения; × закрывает результат. Рядом с вкладками сводка выполнения показывает, сколько строк пришло и сколько это заняло, или ошибку красным; щелчок по ней открывает Сообщения. Нижняя строка повторяет число строк и время и, пока результат неполный, предлагает Загрузить следующий блок и Подсчитать всего. Панель над сеткой собирает остальное: Обновить, Заморозить, Лимит, меню Анализ, Значение, Столбцы и Экспорт (с Копировать SQL, Просмотреть SQL и Сгенерировать SQL); в узком окне кнопки теряют текст, прежде чем исчезнуть. Заголовок показывает тип каждого столбца (текст, число, дата…) и отмечает ключом столбцы ключа таблицы; если задержать на нём мышь, тип будет назван полностью. Перетаскивание заголовка меняет порядок столбцов, а Столбцы (или щелчок правой кнопкой по заголовку) скрывают, показывают и подгоняют ширину по содержимому — выбор сохраняется после «Обновить», смены лимита и сортировки.
Ячейки: NULL показывается бледным курсивом, отдельно от пустого текста, а
числа выровнены вправо; при выделении нескольких ячеек нижняя строка показывает их число, а если
они числовые, — сумму и среднее. Значение (или Показать значение на панели в
контекстном меню) открывает рядом полное значение выбранной ячейки, без обрезки, с кнопкой
Форматировать, которая оформляет JSON/XML только при показе; кнопка Запись на панели
заменяет значение всей строкой в транспонированном виде — по столбцу в строке, с именем рядом
со значением, — и следует за курсором (также через Показать всю запись в меню ячейки). В меню
ячейки Фильтр по этому значению / Исключить это значение заново выполняют запрос с
WHERE по ячейке, а Перейти к связанной записи идёт по внешнему ключу столбца и
запрашивает родительскую таблицу по значению.
Поиск и фильтр в сетке: Ctrl+F, когда фокус в сетке, переводит в поле
Поиск в сетке, которое показывает только строки, содержащие текст в любом столбце, — когда
фокус в редакторе, Ctrl+F остаётся поиском по SQL. Воронка рядом открывает Расширенный
фильтр (условия по столбцам, с И/ИЛИ), а отфильтрованные столбцы получают воронку в заголовке;
щелчок по столбику диаграммы, ячейке сводной таблицы или частому значению в «Качестве» становится
выбором — меткой над сеткой, которая снимается своим ×. Нижняя строка говорит, сколько строк
осталось из скольких. Поиск и фильтр работают по всему результату, в локальной копии: если
результат пришёл целиком, это мгновенно; если есть только первая часть, поле серое, с причиной, —
фильтр по видимому спрятал бы то, что в следующей части, — а Заморозить открывает его. При
активном поиске или фильтре диаграмма, сводная таблица и «Качество» описывают ту же выборку,
что и сетка. Ничто из этого не меняет запрос: чтобы сузить в базе, используйте Фильтр по этому
значению или напишите WHERE.
Диаграмма и сводная таблица: где считается. Меню Анализ содержит
Диаграмму, Сводную таблицу, Качество и Область анализа, а в разделе
Анализировать — выбор между Локальные данные и Вся таблица (на сервере),
отмеченный на действующем варианте. Если результат целиком поместился на первой странице, по
умолчанию выбран локальный: LightNote агрегирует результат, который уже на экране, не обращаясь
к базе при каждой смене оси, агрегата или интервала, — а поскольку локальный движок — DuckDB,
диаграмма появляется и в Oracle, SQL Server, PostgreSQL и MySQL, где её SQL на сервере не
выполняется. Если результат пришёл усечённым, локальный вариант недоступен с объяснением:
агрегирование по выборке дало бы неверное число, а предупреждение об обрезке никого бы не защитило —
в диаграмме читают высоту столбца. Серверный вариант агрегирует весь запрос, по запросу на
каждую настройку, и недоступен, пока в сетке активны поиск или фильтр (выборка существует только
здесь). Числовые столбцы, которые база отдаёт текстом, — случай NUMBER в Oracle, —
распознаются как числа; идентификаторы с ведущим нулём, например 01310, остаются
текстом. В Oracle, SQL Server, PostgreSQL и MySQL, пока результат неполный, Диаграмма
неактивна с объяснением и становится доступной, когда вы замораживаете результат.
Качество данных результата. Пункт Качество в меню Анализ открывает рядом с сеткой тот же профиль по столбцам, что и у файловых таблиц. Его считает DuckDB: на локальной копии, если результат пришёл целиком (или был заморожен), или в самой базе, если это DuckDB. В Oracle, SQL Server, PostgreSQL и прочих, пока результат неполный, панель объясняет, почему не может его описать, и сразу предлагает Заморозить результат; если заморозка остановилась на пределе, она советует сузить запрос — профиль части описывал бы другую таблицу. Щелчок по частому значению фильтрует сетку (это выбор, как при поиске); чтобы сузить в базе, используйте Фильтр по этому значению в меню ячейки.
На скольких данных сделан анализ. Над диаграммой, сводной таблицей, качеством и областью анализа строка сообщает, использовал ли расчёт все данные — с числом строк, которое на локальной копии считается само, — или был выполнен в базе данных по всему запросу; там подсчёт — это ссылка Подсчитать строки, потому что подсчёт выполняет запрос заново. Если заморозка остановилась до конца, а в сетке есть поиск или фильтр, анализ может охватить только загруженное, и строка сообщает Часть данных предупреждающим цветом. Та же фраза попадает в подпись отчёта области анализа.
Снимок данных: анализ сохранённого скрипта хранит рядом с ним карточки, а не данные — чтобы увидеть его снова, нужна база. Кнопка Снимок данных в области анализа сохраняет весь результат в файл Parquet рядом со скриптом вместе с карточками; открыв этот файл, вы увидите тот же анализ без подключения, на данных того момента. Это явное действие, и окно предупреждает заранее: файл — копия данных базы, и он уйдёт вместе с папкой, если она попадёт в Git или будет общей. Кнопка доступна, только когда здесь весь результат; если есть лишь первая часть, сначала заморозьте его (об этом говорит подсказка кнопки).
План выполнения: пункт План выполнения в меню Выполнить
запрашивает план инструкции под курсором (SQLite, DuckDB, PostgreSQL и MySQL) и показывает его во
вкладке План: дерево шагов, самый тяжёлый выделен, и фраза о том, что это значит — в
PostgreSQL и MySQL это шаг с наибольшей собственной стоимостью (его стоимость минус
стоимость вложенных шагов) и его доля в общем; в DuckDB — шаг, дающий больше всего строк; в SQLite,
который не сообщает стоимость, — чтение таблицы целиком. Когда шаг читает таблицу целиком в базе с
индексами, фраза напоминает, что индекс по столбцу фильтра обычно это устраняет (в колоночной
DuckDB чтение таблицы целиком — норма, и совет не появляется). Псевдоним из запроса
(FROM orders o) заменяется именем таблицы. Показать как текст выводит то же
дерево с отступами, а Копировать план копирует его. Числа — оценка планировщика: запрос не
выполняется. Набранный вручную EXPLAIN тоже открывается во вкладке «План», если
LightNote распознаёт ответ; то, что он не распознаёт, остаётся в сетке. В базах, которые не выдают
план одной инструкцией (SQL Server, Oracle), пункт недоступен, а причина указана в подсказке.
Проанализировать с ИИ: выделение говорит, какой шаг тяжёлый; кнопка
Проанализировать с ИИ на вкладке «План» спрашивает, почему планировщик его выбрал и
что изменить. Отправляются запрос, план и схема читаемых таблиц — с уже существующими индексами,
чтобы ИИ не предлагал создать тот, что уже есть. Значения убираются перед отправкой (текст в
кавычках и числа становятся ?; комментарии удаляются), а Посмотреть, что будет
отправлено показывает, что именно уходит. Предложение открывается в редакторе как новый
скрипт, и ничего не выполняется.
Схема
Данные таблицы: дважды щёлкните по таблице в дереве схемы,
чтобы открыть её вкладку на подвкладке Данные. Над сеткой есть два поля,
WHERE и ORDER BY, которые применяются клавишей
Enter, — и оба уходят в базу данных, поэтому действуют на всю
таблицу, а не только на строки на экране. Щелчок по заголовку столбца тоже
сортирует в базе (по возрастанию, по убыванию, без сортировки) и заполняет
ORDER BY; Фильтр по этому значению в меню ячейки добавляет
условие в WHERE — на виду и с возможностью правки. У вкладки своя
сессия с базой данных, как у вкладки скрипта. Если открыть таблицу через
Свойства, данные не запрашиваются: запрос выполняется только тогда, когда
показана подвкладка Данные. Если ORDER BY пуст, строки идут в порядке первичного ключа (поле показывает, какого): совсем без порядка база данных не гарантирует одну и ту же последовательность от страницы к странице, и при прокрутке строки могли повторяться или пропадать. При сортировке по заголовку строки с одинаковым значением упорядочиваются по ключу.
Правка данных: в сетке таблицы с первичным ключом (или уникальным ключом из столбцов NOT NULL) дважды щёлкните по ячейке, нажмите F2 или просто начните печатать. Редактор соответствует типу столбца: дата с календарём, истина/ложь в списке, поле, принимающее только числа, и JSON, проверяемый при подтверждении. Стёртый текст становится пустым текстом, а не NULL: NULL — отдельное действие (Установить NULL в меню ячейки или кнопка NULL на панели значения, где можно править и длинные тексты). Insert добавляет новую строку — то, что осталось по умолчанию, получит значение по умолчанию из базы, — Дублировать строку копирует выбранную, кроме ключа, а Del помечает строки на удаление (повторно — снимает пометку). Ничего из этого не уходит в базу сразу: изменения остаются ожидающими, окрашенными в сетке (янтарный — изменённая, зелёный — новая, красный с зачёркиванием — удалённая), а полоса над сеткой показывает их число. Просмотреть… показывает SQL, который будет выполнен, и копирует его как скрипт; Сохранить записывает всё одной транзакцией, проверяя, что каждый UPDATE и DELETE затрагивает ровно одну строку: если строку изменила или удалила другая сессия после чтения или какая-либо инструкция не выполнилась, ничего не записывается и изменения остаются в сетке; Отбросить отменяет их все. Перезагрузка сетки, смена фильтра или закрытие вкладки с ожидающими изменениями сначала спрашивает.
Если сетка не даёт править, она объясняет почему — в подсказке кнопок
и в полосе при попытке правки. Таблица без первичного ключа и без уникального ключа
из столбцов NOT NULL остаётся только для чтения: без ключа нельзя понять, какую
строку изменит каждая правка. Во вкладке скрипта результат тоже можно править, если
запрос — это SELECT из одной таблицы, перечисляющий её столбцы (или
SELECT *) и возвращающий ключ; соединение, подзапрос, вычисляемый или
переименованный столбец, DISTINCT, GROUP BY и
UNION делают результат доступным только для чтения. Двоичные столбцы в
сетке не правятся. А если во вкладке открыта транзакция (автофиксация выключена) с
ожидающими инструкциями, подтвердите или отмените её до сохранения: сохранение сетки
зафиксировало бы и их.
Свойства объекта: нажмите F4 на таблице в дереве схемы (или выберите Свойства в контекстном меню), чтобы открыть её вкладку сразу на структуре; рядом с вкладкой Данные есть четыре подвкладки: Столбцы (№, имя, тип, допустимость NULL, значение по умолчанию
и значок ключа у столбцов первичного ключа), Ключи (ограничения первичного, внешнего,
уникального ключей и check; двойной щелчок по внешнему ключу открывает связанную таблицу),
Индексы и DDL — CREATE TABLE объекта, готовый к копированию,
сохранению как .sql или открытию в редактируемой вкладке. Когда база не предоставляет
готовый DDL (в PostgreSQL и SQL Server такой команды нет), LightNote восстанавливает его из
метаданных — то же происходит, когда команда DDL отклонена из-за нехватки прав, — и явно
сообщает об этом во вкладке. Если не читается даже каталог столбцов (нет прав или каталог
недоступен), восстанавливать не из чего: вкладка сообщает об этом, а не остаётся молча пустой. Контекстное меню таблицы также предлагает
Копировать DDL без открытия вкладки.
Дерево объектов: на панели Подключения, под списком,
дерево выбранного подключения разделяет Таблицы и Представления
(каждые со своим значком) и отмечает значком ключа столбцы первичного ключа. В дереве также видны Процедуры и функции, Триггеры и Последовательности (если они есть в базе); двойной щелчок по процедуре, функции или триггеру открывает его исходный код в SQL-консоли подключения. Рядом с каждой таблицей показано примерное число строк, а в подсказке — её комментарий: это оценка, которую хранит база, а не COUNT(*). Системные схемы (SYS, pg_catalog…) скрыты; пункт в конце списка показывает их. Поле фильтра сразу отсеивает уже загруженное, а начиная с 2 букв ищет и в базе данных: то, что никто не раскрывал, появляется в папке В базе данных наверху. В скрипте Ctrl+Alt+O (Перейти к таблице… в выборе подключения) открывает поиск с клавиатуры, а F12 на имени таблицы открывает её вкладку.
Обновить метаданные. После выполненного в скрипте CREATE, ALTER, DROP или RENAME дерево, автодополнение и свойства таблицы сами перечитывают таблицы, столбцы и типы через несколько секунд — не сворачивая того, что было раскрыто в дереве. При выключенном автокоммите перечитывание ждёт Commit (или Rollback), потому что до этого изменения для других сеансов ещё не существует. Если структура изменилась извне (другая программа, миграция), используйте кнопку Обновить метаданные на панели скрипта, в меню соединения, рядом с фильтром дерева или Обновить в свойствах таблицы.
Просмотр схемы: Правый клик по
таблице открывает пункты Вставить SELECT в редактор,
Просмотр данных, Подсчитать строки, Копировать
квалифицированное имя или подменю Сгенерировать SQL →
INSERT/UPDATE/MERGE: экран показывает столбцы таблицы, где можно
отметить Включить и Ключ, показывает предпросмотр в реальном
времени и вставляет команду в редактор (MERGE генерируется в стандарте ANSI;
если драйвер его не поддерживает, появляется предупреждение). Прямо на сетке
результатов кнопка Сгенерировать SQL на нижней панели формирует
INSERT/UPDATE/DELETE, заполненный значениями выбранной строки
(доступно, когда запрос — это SELECT из одной таблицы). Имена
таблиц и столбцов, которые вы просматриваете в дереве, также начинают
появляться в автодополнении (Ctrl+Space) редакторов
.sql этого подключения, без дополнительных запросов к базе.
ER-диаграмма: в контекстном меню папки Таблицы пункт ER-диаграмма
таблиц рисует их все; в меню таблицы пункт ER-диаграмма (эта таблица и те, на которые она
ссылается) рисует её и таблицы, на которые указывают её внешние ключи. Результат — заметка в
Словаре данных с блоком mermaid erDiagram: столбцы с типом,
PK/FK и каждый внешний ключ как связь (необязательная, если столбец допускает NULL,
один к одному, если ключ — это сам первичный ключ). Это текст в заметке: он версионируется в Git и
редактируется как любая диаграмма. Больше 40 таблиц не помещается — остальные не входят, и заметка
говорит, сколько.
Импорт файла в таблицу: пункты Импортировать файл в таблицу… (в меню
подключения и папки Таблицы) и Импортировать файл в эту таблицу… (в меню таблицы)
переносят CSV, TSV или таблицу Excel в базу — обратный путь для Экспортировать результат.
Окно показывает предпросмотр с типом, прочитанным для каждого столбца: тип принимается, только если
ему соответствуют все ячейки (целое без ведущего нуля — 01310 это код и
остаётся текстом, —, дробное с точкой или с запятой, дата ISO, истина/ложь); дата
дд/мм/гггг остаётся текстом, потому что месяц может идти первым. Пустая ячейка
становится NULL. Разделитель определяется так же, как в табличном представлении. Создать
таблицу использует имя файла; Добавить в таблицу сначала проверяет, есть ли в ней
столбцы файла. Всё выполняется в одной транзакции: если одна строка не прошла, ничего не
остаётся — а таблица, созданная этим импортом, удаляется. Защиты действуют и здесь: подключение
только для чтения отказывает, а рабочее спрашивает заранее. В подключении DuckDB CSV читает сама
база, без ограничения строк; в остальных ограничение — 100 000 строк.
Экспорт, переменные и транзакции
Экспорт результатов: щёлкните правой кнопкой по сетке результатов и
выберите Экспортировать результаты..., чтобы записать CSV
(разделитель, символ кавычек, всегда в кавычках, строка заголовка, текст
NULL), JSON Lines или SQL (инструкции INSERT с
именем таблицы), с необязательным ограничением по числу строк. Экспорт
проходит по всему запросу в потоковом режиме (постраничная повторная
выборка), а не только по видимому на экране.
Результат в заметке дня: в меню Экспорт сетки пункт Добавить в
заметку дня переносит таблицу так, как она выглядит на экране, — видимые столбцы в порядке
сетки, с поиском и фильтром, — а сразу под ней запрос в блоке sql: заметка
хранит, откуда взялось число. NULL показывается как NULL, числа выровнены по правому
краю, а строка курсивом говорит, когда таблица — не весь результат (первые 200 строк или только
уже загруженные).
Переменные скрипта: напишите @set имя = значение в
строке скрипта, чтобы задать переменную, — префикс @ не пускает её в
базу (нет конфликта с настоящим SET в Postgres/DuckDB/SQL Server).
Ссылки :name заменяются перед выполнением (вне строк и комментариев;
приведение ::type и привязки вроде :1 не трогаются);
:name без значения вызывает запрос перед запуском. Пункт
Переменные… в меню Выполнить открывает список уже заданных переменных
(изменить/добавить/удалить).
Параметры: когда вы выполняете инструкцию с :имя — или с
?, ?1, ?2, кроме PostgreSQL, где ? —
оператор JSON, — окно Параметры запроса показывает инструкцию и все её параметры,
уже заполненные последним использованным значением, а список каждого хранит прежние
значения: повторить с другим значением — значит поменять одно поле. Значение попадает в
SQL как есть, поэтому текст пишется в одинарных кавычках ('abc'). То, что
скрипт задаёт через @set, не спрашивается. Снимите флажок Спрашивать при
каждом выполнении, чтобы вкладка использовала последние значения без вопроса; чтобы
изменить их позже, откройте Переменные….
История запросов: пункт История… в меню Выполнить
открывает окно с последними успешно выполненными инструкциями этого подключения, в
столбцах SQL / Когда / Длительность / Строки. Выберите одну, чтобы
Выполнить заново, Вставить в редактор или Копировать (двойной
щелчок вставляет), или используйте Очистить историю. Она хранится только на
этом компьютере (не попадает ни в Git, ни в .lnc).
История всех подключений: в окне истории отметьте Все подключения, чтобы видеть запросы всех баз, от новых к старым, со столбцом подключения, и искать по всем через поле фильтра. Выполнить заново работает только для запросов этого подключения; запросы другого вставляются в редактор, чтобы вы выполнили их в нужной базе.
Транзакции: параметр Автокоммит (включён по умолчанию) находится в меню Выполнить. Когда он выключен, изменения ждут, пока вы их не подтвердите (Commit) или не отмените (Rollback), а на панели вкладки видно Транзакция · N ожидают с обеими командами. Закрытие вкладки, смена подключения или отключение при открытой транзакции спрашивают, что делать.
Указатель
Редактирование
- Обзор
- Первые шаги
- Рабочее пространство и окна
- Центр активности: задачи и сообщения
- Редактор кода
- Markdown и вики-ссылки
- Диаграммы (Mermaid)
- Математика и химия (LaTeX)
- Календарь в заметке
- Нумерация и перекрёстные ссылки
- Цитаты и список литературы
- Стандарт оформления работы
- Граф связей
- Таблицы (Parquet, CSV, JSON, Excel)
- Область анализа: сводная таблица и несколько диаграмм
- PDF и изображения
- Изображения: пометки на снимке
- HTML-страницы (.html)
- Печать
- Zip как папка (.zip)
- Блоки (.lnb)
- Задачи (Kanban / Gantt)
- Пользовательская таблица (.lnd)
- Базы (сохранённые запросы по заметкам)
Инструменты
- Поиск по файлам и раздел «Незавершённые»
- Версионирование (упрощённый Git)
- Снимки состояния и резервные копии
- Просмотр изменений (контрольные точки)
- Сравнение файлов (diff)
- Запуск кода (F5)
- Терминал и ИИ-CLI
- ИИ-ассистент для выделенного текста (Ctrl+K / Ctrl+I)
- ИИ на вашем компьютере
- Сеансы ИИ
- Чат с ИИ
- Тестирование HTTP API (.lnh)
- Базы данных (.lnc)
- SSH-подключение (.lns)
- Безопасность: секретная фраза, PIN и защищённый Markdown
- Ежедневные заметки, быстрый захват и трей
- Вернуть старые заметки
- Ваши заметки на телефоне
- Запись аудио (голос, встреча) с транскрипцией ИИ
- Стикеры
- Календарь
- Палитра команд
Автоматизация (ИИ / скрипты)
Справочник