PostgreSQL查询使用单个查询重命名和更改列类型

tau*_*que 45 sql postgresql

在PostgreSQL中,如果我需要重命名和更改列数据类型,我应该运行两个单独的查询来执行此操作.

要重命名:

ALTER TABLE <tablename> RENAME <oldcolumn> TO <newcolumn> 
Run Code Online (Sandbox Code Playgroud)

并更改列类型:

ALTER TABLE <tablename> ALTER COLUMN <columnname> <columntype>.
Run Code Online (Sandbox Code Playgroud)

但有没有办法用单个查询来完成这两个工作,如跟随MySQL查询:

ALTER TABLE <tableName> CHANGE COLUMN <oldcolumnname> <newcolumnname> <newtype>
Run Code Online (Sandbox Code Playgroud)

Cra*_*ger 81

在PostgreSQL中,ALTER TABLE可以进行一系列操作.所以:

ALTER TABLE <tablename> RENAME <oldcolumn> TO <newcolumn>;
ALTER TABLE <tablename> ALTER COLUMN <columnname> TYPE <newtype>;
Run Code Online (Sandbox Code Playgroud)

是相同的

ALTER TABLE <tablename> 
  ALTER COLUMN <columnname> TYPE <newtype>
  RENAME <oldcolumn> TO <newcolumn>;
Run Code Online (Sandbox Code Playgroud)

但是......为什么?IIRC重命名不会导致全表扫描,因此在一次事务中单独执行这两个语句没有任何好处.你实际上试图用这个解决什么问题?

  • 您不能在单个“ALTER TABLE”语句中将“RENAME”与其他操作一起使用。 (3认同)