Как написать SQL-скрипт, который будет обновлять тип данных поля row_num с varchar(10) на int и установит его как обязательное для всех таблиц базы данных?

Как можно написать цикл на Postgresql с использованием SQL для изменения типа данных в каждой таблице на целочисленный (integer), и при необходимости изменять на NOT NULL, если в столбце были обнаружены значения NULL?
  • 26 июля 2024 г. 13:53
Ответы на вопрос 2
Для обновления типа данных поля row_num с varchar(10) на int и установления его как обязательное для всех таблиц базы данных можно использовать следующий скрипт:

```sql

-- Обновление типа данных поля row_num на int
ALTER TABLE table_name
    ALTER COLUMN row_num TYPE INTEGER
;

-- Установление NOT NULL для поля row_num
ALTER TABLE table_name
    ALTER COLUMN row_num SET NOT NULL
;

```

Для написания цикла на Postgresql с использованием SQL для изменения типа данных в каждой таблице на целочисленный (integer) и при необходимости изменения на NOT NULL, можно использовать следующий скрипт:

```sql

DO $$
DECLARE
    table_name text;
    column_name text;
BEGIN
    FOR table_name, column_name IN
        SELECT table_name, column_name
        FROM information_schema.columns
        WHERE table_schema = 'public' -- Укажите схему, в которой находятся таблицы
          AND data_type = 'character varying' -- Укажите текущий тип данных
    LOOP
        -- Обновление типа данных на integer
        EXECUTE format('ALTER TABLE %I ALTER COLUMN %I TYPE INTEGER', table_name, column_name);
        
        -- Установление NOT NULL, если содержится значение NULL
        EXECUTE format('ALTER TABLE %I ALTER COLUMN %I SET NOT NULL', table_name, column_name);
    END LOOP;
END $$;

```

Этот скрипт будет перебирать все таблицы в указанной схеме и изменять тип данных всех столбцов с типом character varying на integer, а также устанавливать NOT NULL, если в столбце содержится значение NULL.
вот посмотри 
Там написано, как циклом по всём таблицам пройтись
Похожие вопросы