Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Изменение типов данных нескольких полей пишется отдельными командами для каждого поля #101

Open
sgrinko opened this issue May 4, 2023 · 0 comments

Comments

@sgrinko
Copy link

sgrinko commented May 4, 2023

Уважаемые разработчики,
если в таблице изменить сразу у нескольких полей их тип данных, то для каждого поля генерируется отдельная команда на изменение типа.
Если исходная таблица велика, и изменение типа требует полного переписывания всей таблицы, то очень желательно объединить такие правки в 1 команду.

Это позволить решить 2 задачи:

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

Пример:
здесь будет 4 переливки таблицы

ALTER TABLE marketing.t_lot_prod_hs
  ALTER COLUMN total_price TYPE numeric(30,7) USING total_price::numeric(30,7); /* ТИП колонки изменился - Таблица: marketing.t_lot_prod_hs оригинал: numeric(30,6) новый: numeric(30,7) */

ALTER TABLE marketing.t_lot_prod_hs
  ALTER COLUMN unit_price TYPE numeric(30,7) USING unit_price::numeric(30,7); /* ТИП колонки изменился - Таблица: marketing.t_lot_prod_hs оригинал: numeric(30,6) новый: numeric(30,7) */

ALTER TABLE marketing.t_lot_prod_hs
  ALTER COLUMN total_price_rubles TYPE numeric(30,7) USING total_price_rubles::numeric(30,7); /* ТИП колонки изменился - Таблица: marketing.t_lot_prod_hs оригинал: numeric(30,6) новый: numeric(30,7) */

ALTER TABLE marketing.t_lot_prod_hs
  ALTER COLUMN unit_price_rubles TYPE numeric(30,7) USING unit_price_rubles::numeric(30,7); /* ТИП колонки изменился - Таблица: marketing.t_lot_prod_hs оригинал: numeric(30,6) новый: numeric(30,7) */

ожидаем:
здесь будет всего 1 переливка

ALTER TABLE marketing.t_lot_prod_hs
  ALTER COLUMN total_price TYPE numeric(30,7) USING total_price::numeric(30,7), /* ТИП колонки изменился - Таблица: marketing.t_lot_prod_hs оригинал: numeric(30,6) новый: numeric(30,7) */
  ALTER COLUMN unit_price TYPE numeric(30,7) USING unit_price::numeric(30,7), /* ТИП колонки изменился - Таблица: marketing.t_lot_prod_hs оригинал: numeric(30,6) новый: numeric(30,7) */
  ALTER COLUMN total_price_rubles TYPE numeric(30,7) USING total_price_rubles::numeric(30,7), /* ТИП колонки изменился - Таблица: marketing.t_lot_prod_hs оригинал: numeric(30,6) новый: numeric(30,7) */
  ALTER COLUMN unit_price_rubles TYPE numeric(30,7) USING unit_price_rubles::numeric(30,7); /* ТИП колонки изменился - Таблица: marketing.t_lot_prod_hs оригинал: numeric(30,6) новый: numeric(30,7) */
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants