Подтвердить что ты не робот

Запрос PostgreSQL для переименования и изменения типа столбца с помощью одного запроса

В PostgreSQL, если мне нужно переименовать и изменить тип данных столбца, я должен запустить два отдельных запроса для этого.

Чтобы переименовать:

ALTER TABLE <tablename> RENAME <oldcolumn> TO <newcolumn> 

и изменить тип столбца:

ALTER TABLE <tablename> ALTER COLUMN <columnname> <columntype>.

Но есть ли способ сделать обе эти работы с одним запросом, например, следующим запросом MySQL:

ALTER TABLE <tableName> CHANGE COLUMN <oldcolumnname> <newcolumnname> <newtype>
4b9b3361

Ответ 1

В PostgreSQL ALTER TABLE может выполняться ряд операций. Итак:

ALTER TABLE <tablename> RENAME <oldcolumn> TO <newcolumn>;
ALTER TABLE <tablename> ALTER COLUMN <columnname> TYPE <newtype>;

совпадает с

ALTER TABLE <tablename> 
  ALTER COLUMN <columnname> TYPE <newtype>
  RENAME <oldcolumn> TO <newcolumn>;

Однако... почему? IIRC переименование не приведет к сканированию в полноэкранном режиме, поэтому нет никакой пользы от того, что вы просто делаете два заявления отдельно, в течение одной транзакции. Какую проблему вы на самом деле пытаетесь решить?

Ответ 2

PostgreSQL: изменить имя столбца таблицы и тип данных:

ALTER TABLE <TableName> 
   ALTER [ COLUMN ] column [ SET DATA ] TYPE data_type [ COLLATE collation ] [ USING expression ]
  RENAME [ COLUMN ] column TO new_column;

См. ALTER TABLE.