SQLite Modify Column

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

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

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

Ответ 1

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

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

Ответ 2

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

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

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

cat test.dump | sqlite3 new-test.db

Ответ 3

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

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

CREATE TABLE tmp_table AS SELECT id, name FROM src_table

Ответ 4

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

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

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