2016-02-01 2 views
0

В db PostgreSQL, над которым я работаю, половина таблиц имеет один конкретный столбец, который всегда называется тем же, что и тип varchar (5). Размер стал слишком ограниченным, и я хочу изменить его на varchar (10).Измените тип столбца на несколько таблиц

Количество таблиц в моем конкретном случае на самом деле очень удобно для этого. Но мне было интересно, как можно создать скрипт с запросом для больших dbs. Как правило, это должно быть возможно всего за несколько шагов.

  1. Определите все таблицы в схеме, затем (?) Фильтр по условию, если присутствует столбец.
  2. Создание заявления TABLE ALTER для каждой таблицы найдены

У меня есть некоторое представление о том, как написать запрос, который идентифицирует все таблицы в схеме. Но я не знаю, как их фильтровать. И если я не фильтрую их, я предполагаю, что сгенерированные инструкции alter table сломались бы.

Было бы здорово, если бы кто-то мог поделиться своими знаниями об этом.

+1

'select table_name, column_name from information_schema.columns где table_catalog = 'postgres' и table_schema = 'public' и column_name = 'foo''? – Abelisto

+0

Естественно, я заменил 'foo' соответствующим именем столбца. Но этот запрос ничего не возвращает для меня. – vic

+0

ОК, заменил 'postgres' на имя db, что теперь дает мне правильные таблицы. Теперь давайте посмотрим, могу ли я выяснить, как построить инструкцию alter table на основе этого ... – vic

ответ

1

Благодаря Abelisto за предоставление некоторых рекомендаций. В конце концов, так я это сделал.

Во-первых, я создал запрос, который, в свою очередь, создает операторы ALTER TABLE. MyDB и MyColumn необходимо отразить фактические значения.

SELECT 
    'ALTER TABLE '||columns.table_name||' ALTER COLUMN '||MyColumn||' TYPE varchar(20);' 
FROM 
    information_schema.columns 
WHERE 
    columns.table_catalog = 'MyDB' AND 
    columns.table_schema = 'public' AND 
    columns.column_name = 'MyColumn'; 

Тогда это был просто вопрос выполнения вывода в качестве нового запроса. Все сделано.

Смежные вопросы