九月 10, 2023
摘要:在本教程中,您将学习如何使用 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的新表,包含两列:id和customer_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;
以下语句将fax和email列添加到customers表中:
ALTER TABLE customers
ADD COLUMN fax VARCHAR,
ADD COLUMN email VARCHAR;
要在psql工具中查看customers表的结构,可以使用\d命令,如下:
\d customers

从输出中可以清楚地看到,phone、fax和email列出现在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语句向表中添加一列或多列。