PostgreSQL ALTER TABLE:添加和重命名列

⚡ 智能摘要

PostgreSQL ALTER TABLE 更改现有表的结构,允许您添加或删除列、重命名列或整个表、设置默认值以及附加检查约束,而无需重新创建对象。

  • 🧱 语法: ALTER TABLE 表名操作每条语句执行一次结构更改。
  • 添加列: ADD 列名数据类型 向表中添加一个新列。
  • ✏️ 改名: RENAME COLUMN 和 RENAME 用于更改列名或表名。
  • ⚙️ 默认值: ALTER COLUMN SET DEFAULT 为未来的 INSERT 行提供一个值。
  • 🛡️ 检查约束: 添加检查功能会验证新数据,并拒绝不符合规则的值。
  • 🤖 AI迁移: AI 助手会编写 ALTER TABLE 脚本并进行审查,以确保安全部署。

PostgreSQL 更改表

什么是 ALTER TABLE 语句? PostgreSQL?

更改表 命令用于改变文件的结构 PostgreSQL 表。该命令用于更改表的列或表名本身,而无需删除表。ping 并重新创建该对象。

句法

以下是 PostgreSQL ALTER TABLE 命令:

ALTER TABLE table-name action;

表名参数是需要更改的表的名称。操作参数是需要执行的操作,例如更改列名或更改列的数据类型。

描述

ALTER TABLE 命令可更改现有表的定义。它采用以下子形式:

  • 添加列:此命令使用与 CREATE TABLE 命令类似的语法向表中添加新列。
  • 删除列:用于投放ping 表列。施加于这些列的约束和索引也将被删除。
  • 设置/删除默认值用于设置或移除列的默认值。更改仅对后续的列生效。 INSERT 语句.
  • 设置/删除非空:更改列是否允许空值。
  • 设置统计信息:用于为 ANALYZE 操作的每一列设置统计信息收集目标。
  • 设置存储:用于设置列的存储模式,是内联存储还是附加表中的存储。
  • 不含 OID 的设置用于删除表中的旧 OID 列。
  • 改名:用于更改表名或列名。
  • 添加表约束用于向表中添加新约束。它使用与以下语法相同的语法: 创建表 命令。
  • 下降约束用于滴落ping 表约束。
  • 业主:用于将表、序列、索引或视图的所有者更改为特定用户。
  • 田字形:用于将表标记为将来集群操作所用。

修改列

可以通过多种方式修改列。这些修改使用 ALTER TABLE 命令完成。下面我们将讨论这些方法。

添加新列

要将新列添加到 PostgreSQL 表,ALTER TABLE 命令使用以下语法:

ALTER TABLE table-name
  ADD new-column-name column-definition;

表名是要修改的表的名称。新列名是要添加的新列的名称。列定义是…… 数据类型 新增一列。请参见下方所示的“书籍”表格:

PostgreSQL ALTER TABLE 示例

该表有两列,分别是 id 和 name。我们需要向表中添加一列,并将其命名为 author。只需运行以下命令:

ALTER TABLE Book
  ADD author VARCHAR(50);

运行上述命令后,Book表现在如下所示:

PostgreSQL ALTER TABLE 示例

新列已成功添加。

重命名表列

我们可以使用 ALTER TABLE 命令来更改列的名称。在这种情况下,该命令的语法如下:

ALTER TABLE table-name
  RENAME COLUMN old-name TO new-name;

表名是要重命名列的表的名称。旧名称是列的当前名称,新名称是列的新名称。考虑下面所示的 Book 表:

书:

PostgreSQL ALTER TABLE 示例

我们需要将“author”列的名称更改为“book_author”。以下是命令:

ALTER TABLE Book
  RENAME COLUMN author TO book_author;

运行命令之后我们可以查看表的结构:

PostgreSQL ALTER TABLE 示例

列名已成功更改。

设置列的默认值

我们可以为列设置默认值,这样即使在 INSERT 操作期间未指定该列的值,也会使用默认值。在这种情况下,可以使用以下语法的 ALTER TABLE 命令:

ALTER TABLE table-name ALTER COLUMN column-name [SET DEFAULT value];

表名是要修改其列的表的名称。列名是要设置默认值的列的名称,值是该列的默认值。考虑以下 Book 表:

PostgreSQL ALTER TABLE 示例

我们需要为 book_author 列设置一个默认值。我们可以运行以下命令:

ALTER TABLE Book ALTER COLUMN book_author SET DEFAULT 'Nicholas Samuel';

现在,让我们在表中插入一行:

INSERT INTO Book (id, name)
 VALUES (6, 'PostgreSQL for Beginners');

请注意,我们只为 id 和 name 两列插入了值。但是,book_author 列使用了默认值:

PostgreSQL ALTER TABLE 示例

添加检查约束

检查约束有助于验证插入表中的记录。我们可以通过将 ALTER TABLE 命令与 ADD CHECK 语句结合起来来实现这一点。语法:

ALTER TABLE table-name ADD CHECK expression;

表名是要修改的表的名称,表达式是要施加到表列上的约束。让我们修改 Book 表的 book_author 列,使其只接受 Nicholas 和 Samuel 这两个值:

ALTER TABLE Book ADD CHECK (book_author IN ('Nicholas', 'Samuel'));

现在,让我们尝试在 Book 表的 book_author 列中插入除 Nicholas 或 Samuel 之外的值:

INSERT INTO Book
VALUES(7, 'Best PostgreSQL Book', 'Gregory Bush');

该语句将返回以下错误:

PostgreSQL ALTER TABLE 示例

由于违反了检查约束,插入操作失败。

重命名表

以下是重命名表的 ALTER TABLE 命令的语法:

ALTER TABLE table-name
  RENAME TO new-table-name;

table-name 是表的当前名称,new-table-name 是要分配给表的新名称。例如,让我们将 Book 表的名称更改为 Books:

ALTER TABLE Book
  RENAME TO Books;

使用 pgAdmin

到目前为止,所有操作都是通过 SQL shell 执行的。现在让我们看看如何使用 pgAdmin 以可视化的方式执行这些操作。

添加新列

步骤1) 登录您的 pgAdmin 帐户。

步骤2)

  1. 在左侧的导航栏中,单击数据库。
  2. 单击“演示”。

PostgreSQL ALTER TABLE 示例

步骤3) 在查询编辑器中输入查询:

ALTER TABLE Book
  ADD author VARCHAR(50);

步骤4) 单击执行按钮。

PostgreSQL ALTER TABLE 示例

步骤5) 要检查该列是否已添加,请执行以下操作:

  1. 单击左侧导航中的数据库。
  2. 扩展演示。
  3. 展开架构。
  4. 展开公共。
  5. 展开表格。
  6. 導展書。
  7. 展开列。

PostgreSQL ALTER TABLE 示例

应该已经添加了该列,如下所示:

PostgreSQL ALTER TABLE 示例

重命名表列

步骤1) 登录您的 pgAdmin 帐户。

步骤2)

  1. 在左侧的导航栏中,单击数据库。
  2. 单击“演示”。

PostgreSQL ALTER TABLE 示例

步骤3) 在查询编辑器中输入查询:

ALTER TABLE Book
  RENAME COLUMN author TO book_author;

步骤4) 单击执行按钮。

PostgreSQL ALTER TABLE 示例

步骤5) 要检查更改是否成功,请像以前一样展开书籍表格列:

PostgreSQL ALTER TABLE 示例

各列现在应如下所示:

PostgreSQL ALTER TABLE 示例

列更改成功。

设置列的默认值

步骤1) 登录您的 pgAdmin 帐户。

步骤2)

  1. 在左侧的导航栏中,单击数据库。
  2. 单击“演示”。

PostgreSQL ALTER TABLE 示例

步骤3) 在查询编辑器中输入查询:

ALTER TABLE Book ALTER COLUMN book_author SET DEFAULT 'Nicholas Samuel';

步骤4) 单击执行按钮。

PostgreSQL ALTER TABLE 示例

步骤5) 要进行测试,请在查询编辑器中运行以下命令:

INSERT INTO Book (id, name)
 VALUES (6, 'PostgreSQL for Beginners')

步骤6) 现在,我们可以查询表来检查默认值是否插入到 book_author 列中:

PostgreSQL ALTER TABLE 示例

添加检查约束

步骤1) 登录您的 pgAdmin 帐户。

步骤2)

  1. 在左侧的导航栏中,单击数据库。
  2. 单击“演示”。

PostgreSQL ALTER TABLE 示例

步骤3) 在查询编辑器中输入查询:

ALTER TABLE Book ADD CHECK (book_author IN ('Nicholas', 'Samuel'))

步骤4) 单击执行按钮。

PostgreSQL ALTER TABLE 示例

步骤5) 要测试此功能,请在查询编辑器中输入以下查询,然后单击“执行”按钮:

INSERT INTO Book
VALUES(7, 'Best PostgreSQL Book', 'Gregory Bush');

PostgreSQL ALTER TABLE 示例

它将返回以下内容:

PostgreSQL ALTER TABLE 示例

重命名表

步骤1) 登录您的 pgAdmin 帐户。

步骤2)

  1. 在左侧的导航栏中,单击数据库。
  2. 单击“演示”。

PostgreSQL ALTER TABLE 示例

步骤3) 在查询编辑器中输入查询:

ALTER TABLE Book
  RENAME TO Books;

步骤4) 单击执行按钮。

PostgreSQL ALTER TABLE 示例

步骤5) 要检查表是否已重命名,请展开“数据库”>“演示”>“架构”>“公共”>“表”:

PostgreSQL ALTER TABLE 示例

该表已成功重命名。

下载本教程使用的数据库

常见问题

使用 ALTER TABLE table_name ALTER COLUMN column_name TYPE new_type。当需要转换值时,添加 USING 子句,例如 ALTER COLUMN price TYPE numeric USING price::numeric。 PostgreSQL 重写列并检查现有数据是否符合新类型。

仅当默认值易变时才如此。因为 PostgreSQL 11. 使用常量默认值添加列可以立即更新目录,而无需重写行。调用函数的默认值仍然会强制重写整个表并使用更强的锁。

序号 PostgreSQL 无法修改已有的约束。使用 DROP CONSTRAINT 删除现有约束,然后使用 ADD CONSTRAINT 添加更正后的约束。将这两个语句放在同一个事务中,以确保表中始终存在该规则。

列出几个操作,用逗号分隔:ALTER TABLE Book ADD COLUMN price int, ADD COLUMN isbn text. PostgreSQL 一次性应用所有更改,速度更快,并保持表格一致。

使用 ALTER TABLE table_name ADD PRIMARY KEY (column) 或 ADD CONSTRAINT pk_name PRIMARY KEY (column)。该列必须包含唯一且非空的值; PostgreSQL 创建键时自动构建支持的唯一索引。

RENAME 操作只会更新系统目录中的表名。存储的行、索引和约束保持不变,不受影响。引用旧名称的视图或函数可能仍需后续更新。

AI助手能够根据描述的变更自动生成ALTER TABLE脚本,正确排序ADD、RENAME和约束步骤,并添加USING子句进行类型转换。它们还会标记那些会重写大型表或占用大量锁的操作。

是的。AI 助手会审查迁移过程,警告是否存在锁定或全表重写的情况,建议批量或并发构建索引,并推荐包装方式。ping 事务中的更改,使得架构更新部署起来更加安全。

总结一下这篇文章: