Столбец Данных SQLite Изменить

Мне нужно изменить столбец в базе данных SQLite, но я должен сделать это программно из-за базы данных, уже находящейся в производстве. Из моих исследований я обнаружил, что для этого надо сделать следующее.

  • создайте новую таблицу с новой схемой
  • скопировать данные из старой таблицы в новую таблицу
  • падение старый стол
  • переименовать новую таблицу в старое имя таблицы

Это кажется смешным количеством работы для то, что должно быть относительно легко. Разве нет более легкого пути? Все, что мне нужно сделать, это изменить ограничение на существующий столбец и дать ему значение по умолчанию.

4 ответов


Это один из наиболее известных недостатков SQLite (no MODIFY COLUMN поддержка ALTER TABLE), но это на список функций SQL, которые SQLite не реализует.

edit: удаленный бит, который упомянул, что он может поддерживаться в будущем выпуске, поскольку страница была обновлена, чтобы указать, что это больше не так


Если модификация не слишком велика (например, изменить длину varchar), вы можете сбросить БД, вручную отредактировать определение базы данных и импортировать его обратно:

echo '.dump' | sqlite3 test.db > test.dump

затем откройте файл с помощью текстового редактора, найдите определение, которое вы хотите изменить, а затем:

cat test.dump | sqlite3 new-test.db

Как сказал здесь, такие функции не реализованы SQLite.

в качестве примечания вы можете сделать два первых шага с помощью таблицы create с помощью select:

CREATE TABLE tmp_table AS SELECT id, name FROM src_table

когда я запустил "создать таблицу tmp_table как SELECT id, name FROM src_table", я потерял все форматирование типа столбца (например, поле времени превратилось в целое поле

как первоначально говорилось, кажется, что это должно быть проще, но вот что я сделал, чтобы исправить. У меня была эта проблема b / c я хотел изменить поле Not Null в столбце, и Sqlite действительно не помогает там.

использование браузера дополнения Firefox "SQLite Manager" (используйте то, что вам нравится). Я создал новую таблицу путем копирования старый оператор create сделал мою модификацию и выполнил ее. Затем, чтобы скопировать данные, я просто выделил строки, R-нажмите "Копировать строки как SQL", заменил" someTable " на мое имя таблицы и выполнил SQL.