Я хотел бы добавить необнуляемый столбец в существующую таблицу с несколькими строками в миграции Laravel.Я понимаю, что в SQL такое действие должно выполняться внутри транзакции в порядке
- , добавляя столбец
- , инициализируя столбец
- , делая его необнуляемым
, чтобы гарантировать
- инициализацию, выполняемую без нарушения целостности БД, и
ALTER TABLE
, чтобы не нарушать NOT NULL
ограничение,
Ниже приведен пример кода PostgreSQL (при условии, что users
таблица содержит столбец old_col
), ссылаясь на ответ :
BEGIN TRANSACTION;
ALTER TABLE users ADD COLUMN new_col integer;
UPDATE users SET new_col = old_col + 1;
ALTER TABLE users ALTER COLUMN new_col SET NOT NULL;
COMMIT;
Обычный файл миграции Laravel, подобный этому, не будет работать.
public function up()
{
Schema::table('users', function($table) {
$table->integer('new_col'); // ->nullable(false) // later?
});
}
Как реализовать транзакцию SQL или ее эквивалент в миграции Laravel?
ПРИМЕЧАНИЕ (отредактировано) :
Если вы хотите установить значение по умолчанию, и , если вам не нужно (абсолютно одновременно) обновлять столбец для существующих строк как функцию некоторых значений каждой строки,тогда вы можете просто указать ->default(0)
или что-то вродев файле миграции (и избегайте всех хитростей!).Я не хотел устанавливать значение по умолчанию для добавляемого столбца.