在PostgreSQL中,如果我需要重命名和更改列数据类型,我应该运行两个单独的查询来执行此操作。
重命名:
ALTER TABLE <tablename> RENAME <oldcolumn> TO <newcolumn>
并更改列类型:
ALTER TABLE <tablename> ALTER COLUMN <columnname> <columntype>.
但有没有办法用单一查询来完成这两项工作,例如跟随MySQL查询:
ALTER TABLE <tableName> CHANGE COLUMN <oldcolumnname> <newcolumnname> <newtype>
答案 0 :(得分:78)
在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重命名不会导致全表扫描,因此在一个事务中单独执行这两个语句没有任何好处。你实际上试图解决什么问题?
答案 1 :(得分: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
。