当前位置: 首页 > news >正文

第14节-增强表结构-Dropping-columns

摘要:在本教程中,您将学习如何使用 PostgreSQL ALTER TABLE DROP COLUMN 语句从表中删除列。

PostgreSQL ALTER TABLE DROP COLUMN 语句入门

当列过时时,有必要将其从表中删除,以避免存储开销并提高数据库性能。

PostgreSQL 中,您可以使用 ALTER TABLE DROP COLUMN 语句从表中永久删除列。

ALTER TABLE table_name
DROP COLUMN column_name;

在此语法中:

  • 首先,指定要在 ALTER TABLE 子句中删除列的表名。
  • 其次,在 DROP COLUMN 子句中提供要放置的列名。

如果删除不存在的列,PostgreSQL 将发出错误。为避免此错误,可以使用 IF EXISTS 选项:

ALTER TABLE table_name
DROP COLUMN IF EXISTS column_name;

在这种情况下,如果该列不存在,PostgreSQL 将发出通知而不是错误。当您需要知道该列是否存在并从应用程序中正确处理它时,此通知会很有帮助。

当您删除列时,PostgreSQL 将从该列中删除数据。它还会自动删除涉及列的表约束和索引。

如果删除表外其他对象引用的列,例如视图和外键约束,PostgreSQL 也会返回错误。在这种情况下,您可以使用 CASCADE 选项:

ALTER TABLE table_name
DROP COLUMN IF EXISTS column_name CASCADE;

CASCADE 选项将一次性删除列及其依赖对象,例如外键约束和视图。

要一次删除多个列,您可以使用多个 DROP COLUMN 子句:

ALTER TABLE table_name
DROP COLUMN column1,
DROP COLUMN column2,
DROP COLUMN column3;

删除一列示例

首先,创建一个存储供应商信息的供应商表 suppliers ,包括姓名、电话、电子邮件、传真和地址:

CREATE TABLE suppliers (id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,name VARCHAR(255) NOT NULL,phone VARCHAR(25) NOT NULL UNIQUE,email VARCHAR(255) NOT NULL UNIQUE,fax VARCHAR(25) NOT NULL UNIQUE,address TEXT,notes TEXT
);

其次,从 suppliers 表中删除 notes 列。

ALTER TABLE suppliers 
DROP COLUMN notes;

第三,验证列移除情况:

\d suppliers

输出:

                                Table "public.suppliers"Column  |          Type          | Collation | Nullable |           Default
---------+------------------------+-----------+----------+------------------------------id      | integer                |           | not null | generated always as identityname    | character varying(255) |           | not null |phone   | character varying(25)  |           | not null |email   | character varying(255) |           | not null |fax     | character varying(25)  |           | not null |address | text                   |           |          |
Indexes:"suppliers_pkey" PRIMARY KEY, btree (id)"suppliers_email_key" UNIQUE CONSTRAINT, btree (email)"suppliers_fax_key" UNIQUE CONSTRAINT, btree (fax)"suppliers_phone_key" UNIQUE CONSTRAINT, btree (phone)

输出指示语句已成功删除 notes 列。

删除具有依赖对象的列

首先,创建一个名为 fax_messages 的表来存储传真消息:

CREATE TABLE fax_messages (id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,fax VARCHAR(255) NOT NULL,message TEXT NOT NULL,sent_at TIMESTAMPTZ NOT NULL,FOREIGN KEY (fax) REFERENCES suppliers(fax) ON DELETE CASCADE
);

fax_messages 表将 fax 列作为引用 suppliers 表的 fax 列的外键约束。

其次,基于 suppliers 表创建一个名为 faxes 的视图:

CREATE VIEW faxes AS
SELECT name, fax
FROM suppliers;

第三,从 suppliers 表中删除 fax 列:

ALTER TABLE suppliers 
DROP COLUMN fax;

错误:

ERROR:  cannot drop column fax of table suppliers because other objects depend on it
DETAIL:  constraint fax_messages_fax_fkey on table fax_messages depends on column fax of table suppliers
view faxes depends on column fax of table suppliers
HINT:  Use DROP ... CASCADE to drop the dependent objects too.

PostgreSQL 发出错误,因为fax表具有以下依赖对象:

  • 外键约束 fax_messages_fax_fkey fax_messages 表中。
  • 视图 faxes

要将 fax 列与从属对象一起放置,可以使用 CASCADE 选项:

最后,使用 CASCADE 选项删除 fax 列及其从属对象:

ALTER TABLE suppliers 
DROP COLUMN fax CASCADE;

通知:

NOTICE:  drop cascades to 2 other objects
DETAIL:  drop cascades to constraint fax_messages_fax_fkey on table fax_messages
drop cascades to view faxes

该语句从 suppliers 表中删除 fax 列,删除外键约束 fax_messages_fax_fkey ,视图将 faxes

删除多列

首先,从 suppliers 表中删除 phoneemail 列:

ALTER TABLE suppliers
DROP COLUMN phone,
DROP COLUMN email;

其次,显示表结构以验证更改:

\d suppliers;

输出:

                                Table "public.suppliers"Column  |          Type          | Collation | Nullable |           Default
---------+------------------------+-----------+----------+------------------------------id      | integer                |           | not null | generated always as identityname    | character varying(255) |           | not null |address | text                   |           |          |
Indexes:"suppliers_pkey" PRIMARY KEY, btree (id)

总结

  • 使用 PostgreSQL ALTER TABLE DROP COLUMN 语句从表中删除一个或多个列。
  • ALTER TABLE DROP COLUMN 语句与 CASCADE 选项一起使用,以删除列及其从属对象。
http://www.dtcms.com/a/449955.html

相关文章:

  • 中山网站建设的价格wordpress 婚庆主题
  • LeetCode 刷题【103. 二叉树的锯齿形层序遍历、104. 二叉树的最大深度、105. 从前序与中序遍历序列构造二叉树】
  • joomla适合做什么网站弹性云主机做网站
  • 7.内置函数
  • 【深入理解计算机网络05】数据链路层:组帧,差错控制,流量控制与可靠传输
  • 夜神模拟器安装burp证书实现微信小程序抓包
  • 交互设计 网站推荐清美未来广告设计公司
  • 叮当快药网站谁做的网站改版 升级的目的
  • 佛山免费网站设计阿里云搭建wordpress
  • 大模型之用LLaMA-Factory微调Deepseek-r1-8b模型实践
  • 【C语言】寻找数组中唯一不重复的元素
  • 大数据成矿预测系列(三) | 从统计模型到机器学习:为何机器学习是成矿预测的新前沿?
  • UNIX下C语言编程与实践34-UNIX 守护进程:概念、特点与应用场景
  • 专项行业项目资源与源码
  • 《基于电阻抗断层成像的实时软触觉传感器中的深度神经网络方法》IROS2019论文解读
  • 网页设计第5次作业
  • 吃透大数据算法-霍夫曼编码(Huffman Coding)
  • 唐山自助建站软件app网站开发合同
  • 河北三河建设局网站哪个软件可以做明星视频网站
  • GESP2025年9月认证C++二级( 第三部分编程题(2)菱形)
  • 【大模型实战篇】AgentScope引入Sequential thinking mcp server实现顺序思考的React Agent
  • HashLfuCache
  • XSLFO 流:深入解析与实际应用
  • vscode 一键导出导入所有插件
  • 网站登录验证码显示不出来软件网站排名
  • 找人做一个网站要多少钱包头移动的网站建设
  • 网站设计师培训学校建网站建设网站
  • Linux 目录结构,远程登录 CentOS 服务器 和 远程文件传输 详解(Xshell, PuTTY, Xftp)
  • 外贸网站样式修改wordpress登陆后台
  • FFN、CNN和RNN对比