PostgreSQL ALTER TABLE 命令


PostgreSQL ALTER TABLE 命令

在 PostgreSQL 中,ALTER TABLE 命令可以用于修改一个已经存在的表。通过 ALTER TABLE 命令,可以添加、修改或删除表的列,添加或删除约束,修改表的相关设置等。

语法

下面是 ALTER TABLE 命令的基本语法:

ALTER TABLE table_name action

其中,table_name 是要修改的表的名称,action 是修改的动作,可以是以下任意一项:

  • ADD COLUMN: 添加新列
  • ALTER COLUMN: 修改列属性
  • DROP COLUMN: 删除列
  • ADD CONSTRAINT: 添加约束
  • DROP CONSTRAINT: 删除约束
  • RENAME TO: 修改表名
  • SET TABLESPACE : 修改表空间
  • ADD PARTITION : 添加分区
  • DROP PARTITION : 删除分区

添加新列

可以通过 ALTER TABLE 命令的 ADD COLUMN 子句添加新列,语法如下:

ALTER TABLE table_name ADD COLUMN column_name column_type [column_constraint];

其中,column_name 是要添加的新列的名称,column_type 是新列的数据类型,column_constraint 是可选的列约束条件(如 NOT NULL 等)。

例如,添加一个名为 age 的年龄列,类型为 INTEGER,非空,可以这么做:

ALTER TABLE student ADD COLUMN age INTEGER NOT NULL;

修改列属性

使用 ALTER TABLE 命令的 ALTER COLUMN 子句可以修改一个已经存在的列的属性,例如修改列类型、修改列名等。语法如下:

ALTER TABLE table_name ALTER COLUMN column_name action;

其中,column_name 是要修改属性的列的名称,action 是所要执行的修改操作,可以是以下任意一项:

  • SET DATA TYPE: 修改列数据类型
  • RENAME TO: 修改列名

例如,将 student 表中的 age 列的数据类型从 INTEGER 改为 BIGINT,可以执行以下命令:

ALTER TABLE student ALTER COLUMN age SET DATA TYPE BIGINT;

删除列

使用 ALTER TABLE 命令的 DROP COLUMN 子句可以删除一个表中的列。语法如下:

ALTER TABLE table_name DROP COLUMN column_name;

其中,column_name 是要删除的列的名称。

例如,删除 student 表中的 age 列,可以执行以下命令:

ALTER TABLE student DROP COLUMN age;

添加约束

使用 ALTER TABLE 命令的 ADD CONSTRAINT 子句可以添加约束条件。语法如下:

ALTER TABLE table_name ADD CONSTRAINT constraint_name constraint_type (constraint_attributes);

其中,constraint_name 是约束名称,constraint_type 是约束类型,如 UNIQUE、PRIMARY KEY、FOREIGN KEY,constraint_attributes 是约束的属性。

例如,给 student 表的 id 列添加主键约束,可以这么做:

ALTER TABLE student ADD CONSTRAINT student_pkey PRIMARY KEY (id);

删除约束

使用 ALTER TABLE 命令的 DROP CONSTRAINT 子句可以删除一个表的约束。语法如下:

ALTER TABLE table_name DROP CONSTRAINT constraint_name;

其中,constraint_name 是要删除的约束名称。

例如,删除 student 表的主键约束,可以这么做:

ALTER TABLE student DROP CONSTRAINT student_pkey;

修改表名

使用 ALTER TABLE 命令的 RENAME TO 子句可以修改表的名称。语法如下:

ALTER TABLE table_name RENAME TO new_table_name;

其中,new_table_name 是新表的名称。

例如,将 student 表重命名为 teacher 表,可以这么做:

ALTER TABLE student RENAME TO teacher;

修改表空间

使用 ALTER TABLE 命令的 SET TABLESPACE 子句可以将表移动到不同的表空间。语法如下:

ALTER TABLE table_name SET TABLESPACE tablespace_name;

其中,tablespace_name 是目标表空间的名称。

例如,将 student 表移动到新的表空间 my_space,可以这么做:

ALTER TABLE student SET TABLESPACE my_space;

添加分区

使用 ALTER TABLE 命令的 ADD PARTITION 子句可以添加新的分区。语法如下:

ALTER TABLE table_name ADD PARTITION partition_name VALUES FROM (value1) TO (value2);

其中,partition_name 是新分区的名称,value1 和 value2 是划分分区的值。

例如,对 student 表按成绩划分分区,将 60 分及以下的学生划分到 low_score 分区,成绩在 60 到 90 分之间的学生划分到 mid_score 分区,成绩大于 90 分的学生划分到 high_score 分区,可以这么做:

ALTER TABLE student ADD PARTITION low_score VALUES FROM (MINVALUE) TO (59); 
ALTER TABLE student ADD PARTITION mid_score VALUES FROM (60) TO (90); 
ALTER TABLE student ADD PARTITION high_score VALUES FROM (91) TO (MAXVALUE);

删除分区

使用 ALTER TABLE 命令的 DROP PARTITION 子句可以删除指定的分区。语法如下:

ALTER TABLE table_name DROP PARTITION partition_name;

例如,删除 student 表的 low_score 分区,可以这么做:

ALTER TABLE student DROP PARTITION low_score;

总结

ALTER TABLE 命令是 PostgreSQL 中最常用的命令之一。通过 ALTER TABLE 命令,可以对表的结构进行修改,增加或删除列、添加或删除约束等。在实际应用中,需要根据具体业务需求进行操作。