【问题标题】:PostgreSQL query to rename and change column type with single queryPostgreSQL 查询使用单个查询重命名和更改列类型
【发布时间】:2014-08-20 07:01:23
【问题描述】:

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

重命名:

ALTER TABLE tblName RENAME <oldColumn> TO <newColumn> 

并更改列类型:

ALTER TABLE tblName ALTER COLUMN <newColumn> <columnType>.

但是有没有办法通过一个查询来完成这两项工作,比如下面的 MySQL 查询:

ALTER TABLE tblName CHANGE COLUMN <oldColumn> <newColumn> <columnType>

【问题讨论】:

  • 我已经删除了对 MS SQL Server 的引用。这类“我如何在这些不同的数据库上执行此操作”的问题很少会导致一个有用的明确答案。请为 MS-SQL Server 发布一个新的单独问题并在此处链接。首先了解您为什么要这样做也很有用,因为在这种情况下,使用单个 ALTER TABLE 语句与在同一事务中使用两个语句没有任何好处。
  • @dude 编辑时,请不要使用backticks 强调。如果您需要强调一段文字,请将其包裹在**two asterisks**
  • @dude 你似乎已经回复/忽略了我的编辑 - 为什么?

标签: sql postgresql


【解决方案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 重命名不会导致全表扫描,因此在一个事务中单独执行两个语句没有任何好处。您实际上想解决什么问题?

【讨论】:

  • SQL Server 怎么样? SQL server 也可以吗?
  • @taufique 请参阅我对您的问题的第一条评论。最好不要发布“我如何在这个数据库列表中做 X”的问题,因为不同的人的专业知识不同。看你帖子的评论。我不知道它是否可能在 SQL 服务器上。为 SQL Server 发布一个单独的问题是合适的;然后在此处发布指向它的链接。但同样 - 你为什么要首先这样做,而这并没有什么区别?
  • 您不能在单个ALTER TABLE 语句中将RENAME 与其他操作一起使用。
  • 那么糟糕的例子,哎呀。
  • 顺便说一句,这样做而不是在单个 txn 中使用一系列单独的 alter table 语句最可能的实际原因是优化表重写,因此需要重写表的多个操作可以在一通。
【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多