PostgreSQL 教程: ADD COLUMN 向表中添加列

九月 10, 2023

摘要:在本教程中,您将学习如何使用 PostgreSQL 的ADD COLUMN语句向现有表添加一列或多列。

PostgreSQL Add Column

PostgreSQL ADD COLUMN 语句简介

要将新列添加到现有表,请使用ALTER TABLE ADD COLUMN语句,如下:

ALTER TABLE table_name
ADD COLUMN new_column_name data_type constraint;

在这个语法中:

  • 首先,在ALTER TABLE关键字后面指定要添加新列的表的名称。
  • 其次,在ADD COLUMN关键字后指定新列的名称及其数据类型和约束。

当您向表中添加新列时,PostgreSQL 会将其附加到表的末尾。PostgreSQL 没有选项来指定新列在表中的位置。

要将多列添加到现有表中,可以在ALTER TABLE语句中使用多个ADD COLUMN子句,如下所示:

ALTER TABLE table_name
ADD COLUMN column_name1 data_type constraint,
ADD COLUMN column_name2 data_type constraint,
...
ADD COLUMN column_namen data_type constraint;

PostgreSQL ADD COLUMN 语句示例

下面的CREATE TABLE语句创建一个名为customers的新表,包含两列:idcustomer_name

DROP TABLE IF EXISTS customers CASCADE;

CREATE TABLE customers (
    id SERIAL PRIMARY KEY,
    customer_name VARCHAR NOT NULL
);

以下语句使用ALTER TABLE ADD COLUMN语句将phone列添加到customers表中:

ALTER TABLE customers 
ADD COLUMN phone VARCHAR;

以下语句将faxemail列添加到customers表中:

ALTER TABLE customers
ADD COLUMN fax VARCHAR,
ADD COLUMN email VARCHAR;

要在psql工具中查看customers表的结构,可以使用\d命令,如下:

\d customers

img

从输出中可以清楚地看到,phonefaxemail列出现在customers表的列列表的末尾。

将具有 NOT NULL 约束的列添加到已有数据的表中

以下语句将数据插入customers表中。

INSERT INTO 
   customers (customer_name)
VALUES
   ('Apple'),
   ('Samsung'),
   ('Sony');

假设您要将contact_name列添加到customers表中:

ALTER TABLE customers 
ADD COLUMN contact_name VARCHAR NOT NULL;

PostgreSQL 发出错误:

ERROR:  column "contact_name" contains null values

这是因为contact_name列有NOT NULL约束。当 PostgreSQL 添加该列时,这个新列会得到NULL值,这违反了NOT NULL约束。

为了解决这个问题…

首先,添加没有NOT NULL约束的列:

ALTER TABLE customers 
ADD COLUMN contact_name VARCHAR;

其次,更新contact_name列中的值。

UPDATE customers
SET contact_name = 'John Doe'
WHERE id = 1;

UPDATE customers
SET contact_name = 'Mary Doe'
WHERE id = 2;

UPDATE customers
SET contact_name = 'Lily Bush'
WHERE id = 3;

第三步,设置contact_name列的NOT NULL约束。

ALTER TABLE customers
ALTER COLUMN contact_name SET NOT NULL;

在本教程中,您学习了如何使用 PostgresSQL 的ADD COLUMN语句向表中添加一列或多列。