Откройте или вставьте CSV-файл, выберите СУБД и Оператор — скрипт появится рядом с настройками. По умолчанию это транзакция PostgreSQL с CREATE TABLE IF NOT EXISTS из столбцов TEXT и операторами INSERT по 100 строк, так что 00412 остаётся '00412'. Выберите Распознавать числа и true/false, если в таблице нужны числовые, логические столбцы и столбцы DATE. Файл конвертируется в вашем браузере и никогда не загружается на сервер.
Как преобразовать CSV в SQL
- Откройте файл
.csv,.tsvили.txt, перетащите его на инструмент или вставьте строки. Разделитель определяется автоматически; разделитель, строку заголовков или устаревшую кодировку, например Windows-1251 или Windows-1252, можно задать в разделе Параметры импорта. - Выберите СУБД: PostgreSQL, MySQL / MariaDB, SQLite или SQL Server. Проверьте Имя таблицы: сначала это имя файла, в котором пробелы и знаки препинания заменены подчёркиваниями (
sales report.csvпревращается вsales_report). - Выберите Оператор, а для UPSERT, UPDATE или DELETE отметьте Ключевые столбцы, по которым определяется строка.
- Проверьте предпросмотр, затем нажмите Копировать или скачайте файл
.sqlи выполните его клиентом своей базы данных, напримерpsql -f data.sql.
Чтобы получить скрипты для многих файлов с одинаковыми настройками, выберите Пакетная конвертация нескольких файлов. Файлы конвертируются по очереди, а скрипты скачиваются вместе одним ZIP-архивом.
Операторы и настройки
| INSERT | Многострочные операторы INSERT INTO … VALUES. Строк в одном INSERT задаёт, сколько строк входит в один оператор (от 1 до 1000, по умолчанию 100); SQL Server не принимает больше 1000. |
|---|---|
| UPSERT (вставка или обновление) | По оператору на строку, который вставляет её или обновляет существующую строку с тем же ключом: ON CONFLICT (…) DO UPDATE SET … = excluded.… в PostgreSQL и SQLite, ON DUPLICATE KEY UPDATE в MySQL и MERGE в SQL Server. В целевой таблице нужен первичный ключ или уникальный индекс по ключевым столбцам. |
| UPDATE | UPDATE … SET … WHERE key = … для каждой строки; ключевые столбцы не меняются. Если ключевыми отмечены все столбцы, обновлять нечего, и операторы не записываются. |
| DELETE | DELETE FROM … WHERE key = … для каждой строки. Пустое значение ключа превращается в IS NULL. |
| Ключевые столбцы | Обязательны для UPSERT, UPDATE и DELETE: без ключа в WHERE инструмент такие операторы не запишет. С Добавить CREATE TABLE ключевые столбцы получают NOT NULL и становятся PRIMARY KEY. |
| Добавить CREATE TABLE | По умолчанию включено. Записывает CREATE TABLE IF NOT EXISTS (для SQL Server или после DROP — просто CREATE TABLE). |
| Сначала DROP TABLE IF EXISTS | Заменяет существующую таблицу с тем же именем. По умолчанию выключено; при выполнении скрипта старая таблица и её данные теряются. |
| Обернуть в транзакцию | По умолчанию включено: BEGIN; … COMMIT; (START TRANSACTION; в MySQL, BEGIN TRANSACTION; в SQL Server). |
| Записывать пустые ячейки как NULL | По умолчанию включено. Отключите, чтобы пустые ячейки записывались как ''. |
Типы столбцов и кавычки
С вариантом Все значения как текст (по умолчанию) каждый столбец имеет тип TEXT (NVARCHAR(MAX) в SQL Server), а каждое значение — строковый литерал в кавычках, так что ведущие нули, длинные идентификаторы и необычные даты загружаются без изменений.
С Распознавать числа и true/false столбец получает тип, только если ему соответствует каждое непустое значение:
| Целые числа | INTEGER или BIGINT, если в значении больше 9 цифр. Значения записываются без кавычек. Числа с ведущими нулями или больше 9 007 199 254 740 991 оставляют столбец текстовым. |
|---|---|
| Дробные числа (не больше 15 значащих цифр) | NUMERIC в PostgreSQL, DECIMAL(p,s) с размером по данным в MySQL и SQL Server, REAL в SQLite. Десятичная запятая, как в 1,5, оставляет столбец текстовым. |
| true / false (в любом регистре) | BOOLEAN с TRUE/FALSE в PostgreSQL и MySQL, BIT с 1/0 в SQL Server, INTEGER с 1/0 в SQLite. |
| Даты в формате YYYY-MM-DD | DATE со значениями в кавычках вроде '2026-03-01'; в SQLite — TEXT. Дата со временем и другие форматы дат остаются текстом. |
- Имена таблиц и столбцов берутся в кавычки ровно в том виде, как записаны, поэтому пробелы, зарезервированные слова и имена на кириллице работают:
"order date"в PostgreSQL и SQLite, `order dateв MySQL,[order date]` в SQL Server. Кавычки внутри имён удваиваются. - В значениях одинарная кавычка удваивается (
O'Brienпревращается в'O''Brien'). Для MySQL удваиваются ещё и обратные косые черты, потому что MySQL по умолчанию считает\экранирующим символом. Литералы для SQL Server получают префиксN, чтобы сохранился текст в Unicode. - Переносы строк внутри значения CSV в кавычках остаются внутри строкового литерала SQL.
- Символы NUL большинство баз данных хранить не умеет; они удаляются, а инструмент сообщает, сколько их было.
Устранение неполадок
- В скрипте всё в одном столбце. Разделитель определён неверно; задайте его в разделе Параметры импорта и откройте файл заново.
- Числовой столбец получил тип TEXT. Хотя бы одно значение не является простым числом, например
12 kg,1,5или007. Найдите его в просмотре CSV или исправьте столбец с помощью очистки CSV. - UPSERT падает из-за отсутствующего ограничения.
ON CONFLICTиON DUPLICATE KEYработают, только если в целевой таблице есть первичный ключ или уникальный индекс по ключевым столбцам. Добавьте индекс в существующую таблицу или позвольте Добавить CREATE TABLE создать ключ. - MySQL или SQL Server отклоняет PRIMARY KEY. Ключевой столбец, который остался текстовым, создаётся как
TEXT(MySQL/MariaDB) илиNVARCHAR(MAX)(SQL Server), а ни одна из этих СУБД не может целиком проиндексировать такие типы. Создайте таблицу сами с ключом типаVARCHAR, а затем отключите Добавить CREATE TABLE. - SQL Server сообщает, что таблица уже существует. В скриптах для SQL Server используется просто
CREATE TABLE. Отключите Добавить CREATE TABLE, чтобы загрузить данные в существующую таблицу, или включите Сначала DROP TABLE IF EXISTS, чтобы заменить её. - Скрипт останавливается на середине. Ошибка базы данных называет оператор, на котором произошёл сбой; обычно причина — повторяющийся ключ или значение, которое не подходит к типу столбца существующей таблицы. Проверьте файл с помощью проверки CSV и выполните скрипт ещё раз.
Большие файлы и ограничения
Файлы до 25 МБ, 100 000 строк или 2 млн ячеек открываются с живым предпросмотром. Бо́льшие файлы конвертируются в потоковом режиме: предпросмотр показывает первые 200 строк, файл читается частями дважды (сначала чтобы узнать типы и ширину столбцов, затем чтобы записать скрипт), а скачанный скрипт содержит все строки. Один скрипт ограничен 4 ГБ.
Конвертация идёт в фоновом обработчике в этой вкладке, поэтому страница не зависает, а кнопка Отмена её останавливает. CSV никогда не отправляется на сервер. Чтобы получить не скрипт, а готовый файл базы данных, воспользуйтесь CSV в SQLite.
Пример
Список клиентов с идентификатором, начинающимся с нуля, именем с апострофом и запятой и пустым тарифом, преобразованный с настройками по умолчанию и именем таблицы customers. С Распознавать числа и true/false signup_date получает тип DATE, monthly_fee — NUMERIC со значением 29.00 без кавычек, а active — BOOLEAN с TRUE/FALSE; customer_id при этом остаётся TEXT.
customer_id,name,signup_date,plan,monthly_fee,active 00412,"O'Brien, Kate",2026-03-01,pro,29.00,true 00413,Luis Ortega,2026-03-04,,0,false
BEGIN;
CREATE TABLE IF NOT EXISTS "customers" (
"customer_id" TEXT,
"name" TEXT,
"signup_date" TEXT,
"plan" TEXT,
"monthly_fee" TEXT,
"active" TEXT
);
INSERT INTO "customers" ("customer_id", "name", "signup_date", "plan", "monthly_fee", "active") VALUES
('00412', 'O''Brien, Kate', '2026-03-01', 'pro', '29.00', 'true'),
('00413', 'Luis Ortega', '2026-03-04', NULL, '0', 'false');
COMMIT;Вопросы и ответы
Почему по умолчанию все столбцы TEXT?
В CSV нет типов, а неверная догадка приводит к потере данных: идентификатор вроде 00412, сохранённый как целое число, становится 412. Текст загружает ровно то, что написано в файле. Выберите Распознавать числа и true/false, если нужны числовые, логические столбцы и столбцы DATE.
В каких базах данных можно выполнить скрипт?
В PostgreSQL, MySQL и MariaDB, SQLite и SQL Server — у каждой свои кавычки для идентификаторов, экранирование строк, логические значения и синтаксис UPSERT. Перед скачиванием выберите нужную СУБД: скрипт, написанный для одной, не переносится на другие.
Можно ли сгенерировать команды COPY или LOAD DATA вместо INSERT?
Нет. В скрипте используются стандартные операторы INSERT, UPSERT, UPDATE или DELETE. Для очень больших загрузок подумайте о собственном средстве массовой загрузки вашей СУБД, которое читает CSV напрямую, — например, COPY в PostgreSQL или LOAD DATA в MySQL.