Перейти к содержимому

29. Migrations: Schema Evolution

Безопасная эволюция схемы базы данных.

-- migrations/001_create_users.up.sql
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email VARCHAR(200) UNIQUE NOT NULL
);
-- migrations/001_create_users.down.sql
DROP TABLE users;
Окно терминала
npx prisma migrate dev --name add_users

Безопасные:

  • ADD COLUMN (с DEFAULT)
  • CREATE INDEX CONCURRENTLY
  • ADD CONSTRAINT (NOT VALID)

Опасные:

  • DROP COLUMN
  • ALTER COLUMN TYPE
  • ADD COLUMN NOT NULL (без DEFAULT)
-- ❌ Опасно (блокирует таблицу!)
ALTER TABLE users ADD COLUMN name VARCHAR(100) NOT NULL;
-- ✅ Безопасно (поэтапно)
-- 1. Добавить nullable
ALTER TABLE users ADD COLUMN name VARCHAR(100);
-- 2. Заполнить данными
UPDATE users SET name = 'Unknown' WHERE name IS NULL;
-- 3. Добавить constraint
ALTER TABLE users ALTER COLUMN name SET NOT NULL;

Следующий урок: Zero-Downtime Deployments