PostgreSQL 教程: RENAME COLUMN 重命名列

九月 10, 2023

摘要:在本教程中,您将学习如何在ALTER TABLE语句中使用 PostgreSQL 的RENAME COLUMN子句来重命名表的一个或多个列。

PostgreSQL RENAME COLUMN

PostgreSQL RENAME COLUMN 子句简介

要重命名表的列,可以使用带有RENAME COLUMN子句的ALTER TABLE语句,如下所示:

ALTER TABLE table_name 
RENAME COLUMN column_name TO new_column_name;

在这个语句中:

  • 首先,指定包含要在ALTER TABLE子句后重命名的列的表的名称。
  • 其次,在RENAME COLUMN关键字后提供要重命名的列的名称。
  • 第三,在TO关键字后指定列的新名称。

语句中的COLUMN关键字是可选的,因此您可以像这样省略它:

ALTER TABLE table_name 
RENAME column_name TO new_column_name;

由于某种原因,如果您尝试重命名不存在的列,PostgreSQL 将发出错误。不幸的是,PostgreSQL 没有提供RENAME子句的IF EXISTS选项。

要重命名多个列,您需要多次执行ALTER TABLE RENAME COLUMN语句,一次一列:

ALTER TABLE table_name
RENAME column_name1 TO new_column_name1;

ALTER TABLE table_name
RENAME column_name2 TO new_column_name2;

如果您重命名被其他数据库对象(例如视图外键约束触发器存储过程)引用的列,PostgreSQL 将自动更改依赖对象中的列名称。

PostgreSQL RENAME COLUMN 示例

让我们举一些使用ALTER TABLE RENAME COLUMN的例子来更好地理解。

设置样例表

首先,创建两个新表 customerscustomer_groups

CREATE TABLE customer_groups (
    id serial PRIMARY KEY,
    name VARCHAR NOT NULL
);

CREATE TABLE customers (
    id serial PRIMARY KEY,
    name VARCHAR NOT NULL,
    phone VARCHAR NOT NULL,
    email VARCHAR,
    group_id INT,
    FOREIGN KEY (group_id) REFERENCES customer_groups (id)
);

然后,创建一个基于customerscustomer_groups表名为customer_data新视图

CREATE VIEW customer_data 
AS SELECT
    c.id,
    c.name,
    g.name customer_group
FROM
    customers c
INNER JOIN customer_groups g ON g.id = c.group_id;

1) 使用 RENAME COLUMN 重命名一列的示例

以下语句使用ALTER TABLE RENAME COLUMN语句将customers表的email列重命名为contact_email

ALTER TABLE customers 
RENAME COLUMN email TO contact_email;

2) 使用 RENAME COLUMN 重命名具有依赖对象的列的示例

本示例使用ALTER TABLE RENAME COLUMN语句将customer_groups表的name列重命名为group_namename列在customer_data视图中使用。

ALTER TABLE customer_groups 
RENAME COLUMN name TO group_name;

现在,您可以检查name列的更改是否传递到customer_data视图:

test=# \d+ customer_data;
                       View "public.customer_data"
     Column     |       Type        | Modifiers | Storage  | Description
----------------+-------------------+-----------+----------+-------------
 id             | integer           |           | plain    |
 name           | character varying |           | extended |
 customer_group | character varying |           | extended |
View definition:
 SELECT c.id,
    c.name,
    g.group_name AS customer_group
   FROM customers c
     JOIN customer_groups g ON g.id = c.group_id;

正如您在视图定义中看到的,name列已更改为group_name

3) 使用多个 RENAME COLUMN 重命名多列的示例

这些语句将customers表的两列namephone分别重命名为customer_namecontact_phone

ALTER TABLE customers 
RENAME COLUMN name TO customer_name;

ALTER TABLE customers
RENAME COLUMN phone TO contact_phone;

在本教程中,您学习了如何在ALTER TABLE语句中使用 PostgreSQL 的RENAME COLUMN子句来重命名列。