PostgreSQL 重命名表
本文介绍了如何在 PostgreSQL 中使用 ALTER TABLE
语句重命名一个表。
有时候,您会由于一些原因修改一个现有的表的名称。比如:
- 您在创建表的时候使用了错误的表名。
- 您需要将表名更改为一个更有意义的名称。
- 产品的需求发生变化,需要将表名更改以适应新的业务。
- 您所在的团队使用了新的命名规则,您需要重命名那些不符合新规则的表。
在 PostgreSQL 中,您可以使用 ALTER TABLE
语句重命名一个表。
PostgreSQL 重命名表语法
要重命名一个表,请按照如下语法使用 ALTER TABLE
语句:
ALTER TABLE [IF EXISTS] table_name
RENAME TO new_table_name;
解释说明:
table_name
是要重命名的表。new_table_name
是新的表名。IF EXISTS
选项可以避免由于输入的表名table_name
不存在引发的错误。它是可选的。
当您重名一个表时,PostgreSQL 会自动更新那些依赖此表的对象。
PostgreSQL 重命名表示例
这个实例演示了如何在 PostgreSQL 中重命名一个表。
我们将在 testdb
数据库中创建 users
和 user_hobbies
两个表。其中, users
表用来存储用户的名称,性别,年龄等信息。 user_hobbies
表用来存储用户的业余爱好。
使用以下语句创建 users
表:
CREATE TABLE users (
user_id INTEGER NOT NULL PRIMARY KEY,
name VARCHAR(45) NOT NULL,
age INTEGER,
locked BOOLEAN NOT NULL DEFAULT false,
created_at TIMESTAMP NOT NULL
);
使用以下语句创建 user_hobbies
表:
CREATE TABLE user_hobbies (
hobby_id SERIAL NOT NULL,
user_id INTEGER NOT NULL,
hobby VARCHAR(45) NOT NULL,
created_at TIMESTAMP NOT NULL,
PRIMARY KEY (hobby_id),
CONSTRAINT fk_user
FOREIGN KEY (user_id)
REFERENCES users (user_id)
ON DELETE CASCADE
ON UPDATE RESTRICT);
要查看 user_hobbies
表的定义,请使用 \d
命令:
\d user_hobbies;
Table "public.user_hobbies"
Column | Type | Collation | Nullable | Default
------------+-----------------------------+-----------+----------+------------------------------------------------
hobby_id | integer | | not null | nextval('user_hobbies_hobby_id_seq'::regclass)
user_id | integer | | not null |
hobby | character varying(45) | | not null |
created_at | timestamp without time zone | | not null |
Indexes:
"user_hobbies_pkey" PRIMARY KEY, btree (hobby_id)
Foreign-key constraints:
"fk_user" FOREIGN KEY (user_id) REFERENCES users(user_id) ON UPDATE RESTRICT ON DELETE CASCADE
这里, user_hobbies
表具有一个引用 users
表的外键。
假设,您所在的团队制定了新的命名规则,所有的表都需要一个 t_
开头,因此您需要将 users
表重命名为 t_users
,将 user_hobbies
表重命名为 t_user_hobbies
。
要将 users
表重命名为 t_users
,请使用下面的语句:
ALTER TABLE users RENAME TO t_users;
再次使用 \d
命令查看 user_hobbies
表的定义:
\d user_hobbies;
Table "public.user_hobbies"
Column | Type | Collation | Nullable | Default
------------+-----------------------------+-----------+----------+------------------------------------------------
hobby_id | integer | | not null | nextval('user_hobbies_hobby_id_seq'::regclass)
user_id | integer | | not null |
hobby | character varying(45) | | not null |
created_at | timestamp without time zone | | not null |
Indexes:
"user_hobbies_pkey" PRIMARY KEY, btree (hobby_id)
Foreign-key constraints:
"fk_user" FOREIGN KEY (user_id) REFERENCES t_users(user_id) ON UPDATE RESTRICT ON DELETE CASCADE
从输出中可以清楚地看到,外键约束已更新并改为引用 t_users
表。
要将 user_hobbies
表重命名为 t_user_hobbies
,请使用下面的语句:
ALTER TABLE user_hobbies RENAME TO t_user_hobbies;
最后,使用 \dt
命令查看一下当前数据库中的所有的表以验证结果:
\dt
List of relations
Schema | Name | Type | Owner
--------+----------------+-------+----------
public | t_user_hobbies | table | postgres
public | t_users | table | postgres
(2 rows)
结论
在 PostgreSQL 中,您可以使用 ALTER TABLE ... RENAME TO
语句重命名一个表。