【问题标题】:Alter Multiple column Name and Data Type in PostgreSQL in one query在一次查询中更改 PostgreSQL 中的多个列名称和数据类型
【发布时间】:2019-04-08 14:17:09
【问题描述】:

说明:我想更改列名及其数据类型。我有多个列,想在一个查询中更改所有列及其数据类型。

我尝试了什么

  1. 更改列类型然后重命名。
ALTER TABLE customers  ALTER COLUMN phone TYPE numeric 
RENAME COLUMN phone TO contact_phone

ALTER TABLE customers  ALTER COLUMN phone TYPE numeric,
RENAME COLUMN phone TO contact_phone
  1. 更改多列类型然后重命名。
ALTER TABLE customers  
  ALTER COLUMN phone TYPE numeric, 
  ALTER COLUMN address TYPE text, 
  RENAME COLUMN phone TO contact_phone,
  RENAME COLUMN address TO contact_address
  1. 尝试更改所有列数据类型然后重命名
ALTER TABLE customers  
ALTER COLUMN phone TYPE numeric,ALTER COLUMN address TYPE text

ALTER TABLE customers 
 RENAME COLUMN phone TO contact_phone,RENAME COLUMN address TO contact_address

问题: 每次我在 RENAME 子句中遇到错误时 SQL 状态:42601

谁能告诉我这个查询有什么问题?

【问题讨论】:

    标签: postgresql alter-table


    【解决方案1】:

    虽然您可以在一个ALTER TABLE 语句中更改多个列的数据类型,但一次只能重命名一个列。因此,您将不得不使用多个 ALTER TABLE 语句。

    我建议在单个事务中运行所有语句,这样您只需获取一次ACCESS EXCLUSIVE 锁。

    【讨论】:

    • 我也试过这个.. 使用了两个 alter 语句,首先我更改了数据类型,然后我重命名了列。但在重命名时遇到问题。请在我尝试过的内容标题下查看我的问题的第三点
    • 我明白了。我已经修改了答案。
    • 我只是在编辑器中尝试而不是在查询中,我注意到在一个查询中重命名多个列时出现错误。 ALTER TABLE 客户将 COLUMN 电话重命名为 contact_phone,将 COLUMN 地址重命名为 contact_address 我认为编辑不能接受多次重命名。我尝试在下一个 RENAME 子句之前不加逗号仍然存在问题。
    • 教程完全错误。请查看the documentation
    • 没错!如果您查看RENAME(一列)的语法图,您会发现没有针对多个此类子句的规定。
    猜你喜欢
    • 1970-01-01
    • 2021-07-26
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 2013-06-21
    相关资源
    最近更新 更多