PostgreSQL ALTER TABLE 修改表
本文介绍了如何在 PostgreSQL 中使用 ALTER TABLE
语句修改表。
在 PostgreSQL 中, ALTER TABLE
语句用来修改一个现有的表,包括:重命名表、添加列、删除列、修改列、添加约束、删除约束等。
ALTER TABLE
用法概述
由于 ALTER TABLE
语句能修改一个表的方方面面,因此它的它的语法非常复杂。
下面说明了该 ALTER TABLE
语句的基本语法:
ALTER TABLE [IF EXISTS] table_name
[alter_action options]
[, ...];
table_name
是要修改的表的名字。 IF EXISTS
是可选的,
其中 alter_action
是一个修改动作,主要包括以下关键字:
ADD
关键字可用来添加列和约束。DROP
关键字可用来删除列和约束。ALTER
关键字可用来修改现有的列和约束。RENAME
关键字可用来重命名表、列、和约束。SET
关键字可用来修改表的架构、表空间。ENABLE
关键字可用来启用触发器、规则、和行安全策略。DISABLE
关键字可用来禁用触发器、规则、和行安全策略。
重命名表
要重命名一个表,请使用以下语法:
ALTER TABLE table_name
RENAME TO new_name
修改表架构
要修改一个表的架构,请使用以下语法:
ALTER TABLE table_name
SET SCHEMA new_schema
修改表空间
要修改一个表的表空间,请使用以下语法:
ALTER TABLE table_name
SET TABLESPACE new_tablespace
添加列
要向一个表中添加一个列,请使用以下语法:
ALTER TABLE table_name
ADD [COLUMN] [IF NOT EXISTS] column_name data_type [ column_constraint [ ... ] ]
删除列
要从表中删除一个列,请使用以下语法:
ALTER TABLE table_name
DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ]
重命名列
要重命名一个列,请使用以下语法:
ALTER TABLE table_name
RENAME [ COLUMN ] column_name TO new_column_name
修改列类型
要修改一个列的数据类型,请使用以下语法:
ALTER TABLE table_name
ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type
为列设置默认值
要修改一个列的默认值,请使用以下语法:
ALTER TABLE table_name
ALTER [ COLUMN ] column_name SET DEFAULT expression
删除列默认值
要删除一个列的默认值,请使用以下语法:
ALTER TABLE table_name
ALTER [ COLUMN ] column_name DROP DEFAULT
为列添加 NOT NULL
要为一个列添加 NOT NULL
约束,请使用以下语法:
ALTER TABLE table_name
ALTER [ COLUMN ] column_name SET NOT NULL
删除列 NOT NULL
要从一个列删除 NOT NULL
约束,请使用以下语法:
ALTER TABLE table_name
ALTER [ COLUMN ] column_name DROP NOT NULL
标识列
要修改一个列为标识列,请使用以下语法:
ALTER TABLE table_name
ALTER [ COLUMN ] column_name ADD GENERATED { ALWAYS | BY DEFAULT }
AS IDENTITY [ ( sequence_options ) ]
要将一个标识列修改为普通列,请使用以下语法:
ALTER TABLE table_name
ALTER [ COLUMN ] column_name DROP IDENTITY [ IF EXISTS ]
添加约束
要向一个表中添加一个约束,请使用以下语法:
ALTER TABLE table_name
ADD [ CONSTRAINT constraint_name ]
{ CHECK ( expression ) [ NO INHERIT ] |
UNIQUE ( column_name [, ... ] ) index_parameters |
PRIMARY KEY ( column_name [, ... ] ) index_parameters |
EXCLUDE [ USING index_method ] ( exclude_element WITH operator [, ... ] ) index_parameters [ WHERE ( predicate ) ] |
FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn [, ... ] ) ]
[ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE referential_action ] [ ON UPDATE referential_action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
删除约束
要从表中删除一个约束,请使用以下语法:
ALTER TABLE table_name
DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ]
重命名约束
要重命名一个约束,请使用以下语法:
ALTER TABLE table_name
RENAME CONSTRAINT constraint_name TO new_constraint_name
结论
本文阐述了 PostgreSQL ALTER TABLE
语句的用法以修改一个现有表的定义。