openGauss ALTER TABLE 表结构变更实战:原理、避坑与高阶应用
1. 从一次紧急的表结构变更说起那天下午我正在处理一个数据同步任务突然接到业务方的紧急电话说他们发现某个核心用户表的字段长度不够导致新一批数据导入失败报错信息是“value too long for type character varying(50)”。这个表有上亿条数据并且关联着好几个下游的报表和接口。显然直接删表重建是不可能的业务也等不起。我的第一反应就是使用ALTER TABLE语句来修改字段定义。在 openGauss 中ALTER TABLE就是应对这类表结构变更需求的“瑞士军刀”它允许你在不中断服务或尽可能减少中断的情况下动态地修改表的结构。对于任何一位数据库管理员或开发者来说熟练掌握ALTER TABLE的各类子句就如同掌握外科手术刀一样重要。它不仅仅是简单的添加或删除列更涉及到表的重构、约束管理、性能优化以及在线变更的平滑性。一个不当的ALTER TABLE操作可能会引发锁表、阻塞业务、甚至数据不一致的灾难。因此理解其背后的原理、掌握其正确的使用姿势是保障数据库稳定运行的关键技能。本文将深入 openGauss 的ALTER TABLE语句不仅介绍其语法更会结合实战场景剖析其工作原理、避坑指南以及高阶应用让你在面对表结构变更时能够从容不迫。2. ALTER TABLE 的核心能力全景ALTER TABLE语句的功能非常丰富几乎涵盖了表生命周期内所有结构层面的调整。我们可以将其核心能力归纳为以下几个维度这有助于我们在具体操作时快速定位所需的功能。2.1 列Column操作表结构的“细胞”级调整这是最常用的一类操作直接对表的列进行增删改。添加列 (ADD COLUMN): 为现有表增加新的字段。这里的关键是理解DEFAULT子句的行为。在 openGauss 中如果为新列指定了DEFAULT默认值对于已有行该列会被填充为这个默认值。这是一个相对快速的操作因为它主要更新了表的元数据并对已有数据做了一次批量更新。-- 添加一个带有默认时间戳的“更新时间”列 ALTER TABLE user_info ADD COLUMN update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP;注意添加一个没有默认值且设置为NOT NULL的列是不允许的因为数据库无法确定已有行的这个非空列的值应该是什么。你必须要么提供DEFAULT要么先添加可为空的列再分批更新数据最后再修改为NOT NULL。删除列 (DROP COLUMN): 移除表中不再需要的列。这同样是一个需要谨慎的操作。-- 删除一个废弃的列 ALTER TABLE user_info DROP COLUMN old_phone_number;警告删除列会物理删除该列的数据且操作不可逆除非有备份。在 OLTP 生产环境中直接删除大表的列可能会因为需要重写表而持有排他锁很长时间导致业务阻塞。对于重要表建议先使用ALTER TABLE ... SET UNUSED如果支持或在业务低峰期进行。修改列定义 (ALTER COLUMN): 这包括修改数据类型、长度、默认值以及空值约束。修改数据类型/长度: 这就是我开篇遇到的问题。将VARCHAR(50)改为VARCHAR(100)。ALTER TABLE user_info ALTER COLUMN email TYPE VARCHAR(100);原理与风险对于长度扩展如 50-100openGauss 通常只需修改元数据是瞬间完成的。但对于缩短长度或者改变数据类型如INT转BIGINT数据库必须检查已有数据是否兼容并可能触发全表重写这将是一个重量级操作会长时间锁表。修改默认值: 只影响后续插入的行已有数据不变。ALTER TABLE user_info ALTER COLUMN status SET DEFAULT active;修改空值约束: 将列从NULL改为NOT NULL或反之。-- 先确保所有行的 phone 列都不为 NULL才能执行 ALTER TABLE user_info ALTER COLUMN phone SET NOT NULL;关键步骤在设置NOT NULL前务必先执行UPDATE语句处理掉现有的NULL值否则语句会失败。2.2 约束Constraint操作数据完整性的“守卫”约束定义了数据的规则ALTER TABLE可以动态管理它们。添加约束 (ADD CONSTRAINT): 为表增加主键、外键、唯一键或检查约束。-- 添加一个唯一约束 ALTER TABLE user_info ADD CONSTRAINT uk_user_email UNIQUE (email); -- 添加一个外键约束 ALTER TABLE orders ADD CONSTRAINT fk_order_user FOREIGN KEY (user_id) REFERENCES user_info(id);执行代价添加唯一或主键约束时openGauss 需要扫描全表以确保现有数据满足唯一性这会产生锁并消耗资源。对于大表需要评估影响。删除约束 (DROP CONSTRAINT): 移除已有的约束。ALTER TABLE user_info DROP CONSTRAINT uk_user_email;小心外键删除外键约束通常是安全的但如果你删除了被引用的主键或唯一约束且存在外键引用操作会失败。你需要先删除或处理那些外键。启用/禁用约束: openGauss 支持禁用约束检查以提高数据批量导入速度但完成后必须重新启用并验证。-- 禁用外键约束检查慎用 ALTER TABLE orders DISABLE TRIGGER ALL; -- 批量数据操作... -- 重新启用并验证可能失败如果数据已违反约束 ALTER TABLE orders ENABLE TRIGGER ALL;2.3 表级属性与存储操作这类操作改变了表的物理或逻辑属性。重命名 (RENAME TO/RENAME COLUMN): 修改表名或列名。ALTER TABLE user_info RENAME TO t_user; ALTER TABLE t_user RENAME COLUMN phone TO mobile_phone;影响重命名操作很快只修改系统目录。但请注意所有依赖旧名称的视图、函数、应用程序代码都会立即失效需要同步修改。这是一个典型的“牵一发而动全身”的操作。修改表空间 (SET TABLESPACE): 将表移动到一个新的表空间。ALTER TABLE large_table SET TABLESPACE fast_ssd_tablespace;用途常用于数据生命周期管理、IO性能优化将热表移至高速存储或存储空间整理。修改存储参数: 调整表的填充因子 (fillfactor)、并行度等。这属于高级优化。ALTER TABLE heavily_updated_table SET (fillfactor70);fillfactor解析对于更新频繁的表设置一个小于100的填充因子如70可以在每个数据页中预留空间减少因行更新变长导致的页分裂和碎片化从而提升更新性能。但这会牺牲一定的存储空间。3. 深入原理ALTER TABLE 在 openGauss 中是如何工作的理解ALTER TABLE的内部机制是避免生产事故的关键。其执行模式主要分为两类即时操作Instant和重写操作Rewrite。3.1 即时操作元数据变更这类操作只修改pg_class、pg_attribute等系统目录表中的元数据不涉及用户数据的物理移动。因此速度极快通常毫秒级完成且只需要一个短暂的访问独占锁ACCESS EXCLUSIVE锁的持有时间很短。典型的即时操作包括添加一个带有默认值的列默认值直接存储在元数据中现有行在读取时按需计算或使用预置值。删除一个列在 openGauss 中这通常被标记为删除物理回收可能延迟。重命名表或列。增加或删除一个CHECK约束如果不需要验证现有数据。修改某些存储参数如fillfactor。实战心得在业务高峰期间如果必须进行表结构变更应优先选择能被优化为即时操作的方式。例如添加可为空且无默认值的列在 openGauss 中通常是即时的。3.2 重写操作表数据重构这类操作需要创建原表的一个新副本将数据逐行复制过去并在最后进行元数据切换。这是最重量级的操作其过程可以概括为获取表级的ACCESS EXCLUSIVE锁阻塞所有读写。创建一张具有新结构的新表临时表。将原表数据逐行插入新表同时应用新的结构定义如类型转换。重建原表上的所有索引、约束、触发器。将系统目录中的表名指向新表删除旧表的数据文件。典型的重量级操作包括修改列的数据类型如INTEGER到BIGINT。删除或修改一个NOT NULL约束在某些情况下。修改列的长度从大改小或从可变长改为固定长可能触发验证。添加一个PRIMARY KEY或UNIQUE约束需要全表扫描验证唯一性。某些表空间移动操作。性能影响与避坑指南锁阻塞整个重写过程持有最强的ACCESS EXCLUSIVE锁生产表在此期间完全不可用。磁盘 I/O 与空间需要额外的磁盘空间来存储新表副本大约等于原表大小并产生大量的读写 I/O。耗时耗时与表数据量成正比。对于上亿行的大表可能需要数小时甚至更久。如何规避风险业务低峰期操作这是铁律。在预定维护窗口进行。使用pg_relation_size评估操作前先估算表大小心中有数。SELECT pg_size_pretty(pg_relation_size(user_info));考虑替代方案对于添加非空列是否可以改为先添加可为空的列 - 在应用层逐步填充数据 - 最后在业务低峰期设置NOT NULL对于修改数据类型是否可以通过创建新列、双写迁移、最后切换的方式来避免长时间锁表监控与超时设置在会话中设置lock_timeout防止长时间无谓等待。SET lock_timeout 30s; ALTER TABLE ... -- 如果30秒内无法获取锁则语句自动失败避免雪崩。4. 高阶场景与实战技巧掌握了基础操作和原理后我们来看几个更复杂的实战场景。4.1 场景一在线大表添加字段并创建索引需求向一个数亿记录的订单表orders添加一个JSONB类型的extended_info字段并为其中的一个常用路径-‘source’创建索引以加速查询。错误做法顺序执行-- 1. 添加列可能是即时操作但JSONB列可能引发重写需测试 ALTER TABLE orders ADD COLUMN extended_info JSONB; -- 2. 创建索引会全表扫描对大表耗时很长 CREATE INDEX idx_orders_source ON orders USING gin ((extended_info - ‘source’));问题两个操作分开会分别持有锁。特别是创建索引期间表虽然可读但可能阻塞写操作。优化做法组合与并发控制评估添加列的成本对于大表添加一个无默认值的JSONB列在 openGauss 中通常是即时的但最好在测试环境验证。使用CONCURRENTLY创建索引如果支持openGauss 的某些索引类型支持并发创建这可以极大减少对业务的影响。-- 首先确保表名和列名正确 CREATE INDEX CONCURRENTLY idx_orders_extended_source ON orders USING gin ((extended_info - ‘source’));CONCURRENTLY原理它通过多阶段快照来构建索引允许在索引构建过程中对表进行正常的读写操作。但请注意耗时比标准创建更长。如果构建失败可能会留下一个无效的INVALID索引需要手动清理 (DROP INDEX ...)。不能在事务块内执行。完整安全流程-- 步骤1在业务低峰期执行添加列假设为即时操作 ALTER TABLE orders ADD COLUMN extended_info JSONB; -- 步骤2使用 CONCURRENTLY 创建索引 CREATE INDEX CONCURRENTLY idx_orders_extended_source ON orders USING gin ((extended_info - ‘source’)); -- 步骤3检查索引状态 SELECT indisvalid FROM pg_index WHERE indexrelid ‘idx_orders_extended_source’::regclass; -- 如果返回 t则索引创建成功且有效。4.2 场景二分区表的结构变更openGauss 支持表分区。对分区表的ALTER TABLE操作有特殊之处。添加列你需要在父表上执行ADD COLUMN。这个操作会自动级联到所有现有的子分区子表。ALTER TABLE sales_parent ADD COLUMN region_id INT;执行后sales_parent_202301sales_parent_202302等所有子分区都会自动增加region_id列。这非常方便。修改列类型在父表上修改列类型同样会尝试级联到所有子分区。但是这要求所有子分区上的该列都必须能够进行隐式或显式转换到新类型。如果某个子分区的数据不兼容操作会失败。对于分区表这种重写操作的成本是每个子分区独立计算的总时间可能是所有子分区耗时之和需要特别关注。实战技巧分区表DDL操作策略对于超大规模分区表一次性变更所有分区风险极高。可以考虑分批操作停止向待变更分区写入新数据可通过路由逻辑控制。针对单个子分区执行ALTER TABLE child_partition ...逐个击破。最后在父表上执行一个轻量的元数据操作如果系统支持或者最后处理父表。这种方法将一个大锁拆分成多个小锁每次只影响一个子分区的业务可控性更强。4.3 场景三使用事务确保结构变更的原子性ALTER TABLE语句本身是原子的。但如果你的变更是由多个ALTER TABLE语句组成的复杂操作你需要将它们放在一个数据库事务中以确保要么全部成功要么全部回滚避免留下中间状态。BEGIN; ALTER TABLE t1 ADD COLUMN new_col INT; ALTER TABLE t2 ADD CONSTRAINT fk_t2_t1 FOREIGN KEY (t1_id) REFERENCES t1(id); -- 如果第二个语句因为外键冲突失败... COMMIT; -- 只有两个都成功才会提交。否则第一个添加列的操作也会被回滚。重要提醒某些ALTER TABLE操作如ADD COLUMN ... DEFAULT对于大表可能会在内部拆分成多个步骤并隐式提交。openGauss 的 DDL 在大多数情况下是事务性的但像CREATE INDEX CONCURRENTLY这种就不支持在事务块内运行。最佳实践是在测试环境中验证你的多语句 DDL 脚本的原子性。5. 性能监控、问题排查与最佳实践汇总5.1 监控 ALTER TABLE 的执行当你在生产环境执行一个可能耗时的ALTER TABLE时需要监控其进度和影响。查看锁等待在新的会话中查询pg_stat_activity和pg_locks视图。SELECT pid, usename, query, wait_event_type, wait_event, state FROM pg_stat_activity WHERE query LIKE ‘%ALTER TABLE%‘ OR state ‘active’; -- 结合 pg_locks 查看具体的锁冲突 SELECT relation::regclass, mode, granted FROM pg_locks WHERE relation ‘your_table_name’::regclass;评估进度对于重写操作openGauss 不像某些数据库有直接的进度视图。但你可以通过监控目标表的数据文件大小变化、或通过pg_stat_progress_create_index针对索引创建来侧面了解。更直接的方法是在另一个会话中估算表大小然后观察pg_stat_activity中该后端进程的持续时间。5.2 常见错误与排查错误ERROR: cannot alter type of a column used by a view or rule原因你要修改的列被视图 (VIEW) 或规则 (RULE) 所依赖。解决必须先删除或修改这些依赖对象。使用\d your_table_name或查询pg_depend系统表来查找依赖关系。-- 查找依赖某个表的视图 SELECT dependent_ns.nspname as dependent_schema, dependent_view.relname as dependent_view FROM pg_depend JOIN pg_rewrite ON pg_depend.objid pg_rewrite.oid JOIN pg_class as dependent_view ON pg_rewrite.ev_class dependent_view.oid JOIN pg_class as source_table ON pg_depend.refobjid source_table.oid JOIN pg_namespace dependent_ns ON dependent_view.relnamespace dependent_ns.oid WHERE source_table.relname ‘your_table_name‘;错误ERROR: deadlock detected原因你的ALTER TABLE在等待锁时与应用事务产生了循环等待。解决这通常是因为应用中有长事务持有了较弱的锁如SHARE UPDATE EXCLUSIVE。确保在 DDL 操作前提交或终止所有长时间运行的事务。设置lock_timeout可以避免会话无限期等待。错误ERROR: out of memory或操作异常缓慢原因重写大表时如果maintenance_work_mem参数设置过小会影响排序和索引构建性能。解决在会话级别临时调大此参数操作完成后恢复。SET maintenance_work_mem ‘1GB’; ALTER TABLE ... -- 执行你的DDL RESET maintenance_work_mem;5.3 最佳实践清单备份先行在执行任何重要的ALTER TABLE前确保你有可用的备份逻辑备份或物理备份。对于关键表甚至可以先在测试环境做一次完整演练。理解操作类型区分“即时操作”和“重写操作”。通过查阅官方文档或在测试环境验证明确你的操作会触发哪种行为。选择正确时机重写操作必须在业务低峰期或维护窗口进行。使用监控工具确认数据库负载。使用超时设置在 DDL 语句前设置lock_timeout和statement_timeout防止单个语句拖垮整个系统。SET lock_timeout ‘2min’; SET statement_timeout ‘1h’;保持事务简洁将 DDL 放在独立的事务中执行避免与复杂的业务逻辑混合。监控与验证操作后立即检查表结构是否正确 (\d table_name)并运行一些简单的查询验证数据完整性和业务功能。沟通与回滚计划通知相关业务方变更窗口。制定清晰的回滚计划例如如果添加列失败回滚方案是什么如果是重命名操作是否有对应的应用代码发布和回滚流程ALTER TABLE是 openGauss 数据库管理中的一把利器但也是一把双刃剑。它赋予我们动态调整数据模型的能力同时也要求我们对其背后的代价有清醒的认识。从简单的加字段到复杂的在线重构每一次操作都需要结合表的大小、业务连续性要求、数据库的版本特性来综合决策。记住最安全的变更是经过充分测试的变更。在按下回车键之前多问自己一句“这个操作在测试环境跑过了吗”

相关新闻

【Harness Engineering】01_为什么需要给 AI 代理造一个驾驶舱

【Harness Engineering】01_为什么需要给 AI 代理造一个驾驶舱

源码地址:https://github.com/wquguru/harness-books 如果你最近在关注 AI 编程工具,一定听说过 Claude Code。很多人把它看作一个“能跟你聊天、顺手改代码的 CLI”。但如果只看到这一层,就错过了它设计里最有价值的部分。 真正让 Claude C…

2026/10/10 2:09:04 阅读更多 →
解决Codex/ChatGPT工具合并后中文界面丢失与插件拓展指南

解决Codex/ChatGPT工具合并后中文界面丢失与插件拓展指南

如果你最近在 Windows 上使用 Codex 或 ChatGPT 相关的开发工具,发现界面突然变成了英文,或者压根找不到切换语言的选项,先别急着怀疑自己的操作。这很可能不是你一个人的问题,而是近期一次服务端合并更新带来的“副作用”。 很多…

2026/10/4 16:06:42 阅读更多 →
闲置的Joy-Con别吃灰,一个开源驱动让它3分钟变身PC手柄

闲置的Joy-Con别吃灰,一个开源驱动让它3分钟变身PC手柄

闲置的Joy-Con别吃灰,一个开源驱动让它3分钟变身PC手柄 【免费下载链接】JoyCon-Driver A vJoy feeder for the Nintendo Switch JoyCons and Pro Controller 项目地址: https://gitcode.com/gh_mirrors/jo/JoyCon-Driver JoyCon-Driver 是一款免费开源的 Wi…

2026/10/12 23:23:54 阅读更多 →

最新新闻

家电品牌出海GEO优化公司推荐:家电品牌如何判断服务商实力

家电品牌出海GEO优化公司推荐:家电品牌如何判断服务商实力

家电品牌做 GEO,首先要解决的是信息能否被 AI 讲对。型号、容量、认证、安装和售后等内容,都需要按目标市场整理,并通过持续监测验证实际呈现。 家电品牌在评估广拓时代CantoTimes时,可以重点看其自研系统、产品资料整理、海外内容…

2026/10/14 13:31:30 阅读更多 →
动力电池液冷板内部流道5类结构设计要点与Fluent散热效果对比分析方法详解

动力电池液冷板内部流道5类结构设计要点与Fluent散热效果对比分析方法详解

动力电池液冷板是电池热管理系统的核心部件。其内部流道结构直接决定电芯温度均匀性和系统压降。设计不当会导致局部过热、温差过大、泵耗过高等问题。本文从流道设计基础出发,梳理5类常见流道结构,并说明用Fluent进行散热效果对比分析的方法。一、流道设…

2026/10/14 13:31:30 阅读更多 →
显存不够怎么降?本地跑大模型的 5 级降级顺序表(8G 实测)

显存不够怎么降?本地跑大模型的 5 级降级顺序表(8G 实测)

8G 卡跑 14B 直接 OOM,我是怎么一步步退下来的 前两天在一张 8G 的老卡上加载一个 14B 的 Q4_K_M,Ollama 那边直接报内存不够,换 llama.cpp 加载也是分配失败。我的第一反应是"换更低的量化档",结果换完照样起不来。后来…

2026/10/14 13:31:30 阅读更多 →
电商AI搜索优化无效的原因及解决策略

电商AI搜索优化无效的原因及解决策略

引言在当前的电商环境中,AI搜索优化(AI Search Optimization, AISO)已成为提升用户体验和转化率的重要手段。然而,许多企业在实施AISO时遇到了效果不佳的问题。本文将探讨电商AI搜索优化无效的原因,并提出相应的解决策…

2026/10/14 13:31:30 阅读更多 →
心理学在员工激励和团队管理中的应用(总监ppt)

心理学在员工激励和团队管理中的应用(总监ppt)

将员工动机与团队协作研究转化为具体管理动作,覆盖目标设定、奖励认可、公平规则、心理安全、绩效反馈与冲突处理,并配套场景分析、效果评估和90天实施路线,适用于管理者培训、团队建设及人力资源管理交流。 表格解读一:员工激励机…

2026/10/14 13:31:30 阅读更多 →
Unity 2020+ Prefab光照烘焙失效原因与修复方案

Unity 2020+ Prefab光照烘焙失效原因与修复方案

1. 项目概述:为什么Prefab烘焙突然“不香了”?2020年前后,Unity3d开发者圈里频繁出现一个扎心现象:明明在Scene视图里光影效果完美,一打包成Build或切换到Game视图,模型突然变灰、阴影消失、Lightmap全黑—…

2026/10/14 13:30:30 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →