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 语句的用法以修改一个现有表的定义。