Миграция SQL: ALTER между двумя версиями схемы
Слева схема была, справа стала. Ниже — то, что редактор выдаёт, чтобы превратить одну в другую: настоящий вывод, а не пример из документации.
Былоv1.sql
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(120) NOT NULL,
created_at TIMESTAMPTZ
);
CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL,
total NUMERIC(12,2) NOT NULL
);Сталоv2.sql
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) NOT NULL,
phone VARCHAR(120),
created_at TIMESTAMPTZ NOT NULL,
CONSTRAINT uq_users_email UNIQUE (email)
);
CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL,
total NUMERIC(12,2) NOT NULL,
CONSTRAINT fk_orders_user FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE
);
CREATE INDEX idx_orders_user ON orders (user_id);Что получитсяPostgreSQL
ALTER TABLE users ADD COLUMN phone VARCHAR(120); ALTER TABLE users ALTER COLUMN email TYPE VARCHAR(255); ALTER TABLE users ALTER COLUMN created_at SET NOT NULL; ALTER TABLE users ADD CONSTRAINT uq_users_email UNIQUE (email); CREATE INDEX idx_orders_user ON orders (user_id); ALTER TABLE orders ADD CONSTRAINT fk_orders_user FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE;
Открыть редактор
Скрипт остаётся в браузере: и разбор, и генерация идут на вашей машине, на сервер ничего не уходит.
Одна и та же правка в разных диалектах
| PostgreSQL | ALTER TABLE users ALTER COLUMN email TYPE VARCHAR(255); |
| MySQL / MariaDB | ALTER TABLE users MODIFY COLUMN email VARCHAR(255) NOT NULL; |
| SQL Server | ALTER TABLE users ALTER COLUMN email NVARCHAR(255) NOT NULL; |
| Oracle | ALTER TABLE users MODIFY (email VARCHAR2(255)); |