深入PostgreSQL表空间:物理原理、命令细节与生产排错指南
PostgreSQL里的表空间tablespace命令表面上就那么几条CREATE TABLESPACE、DROP TABLESPACE、ALTER TABLE SET TABLESPACE。但我发现很多同行包括一些写了几年PG的开发者都只停留在“会敲命令”的层面真正一上线就翻车删表空间删不掉、迁移后磁盘没释放、默认表空间改不回来、主从库路径不一致导致恢复失败。这篇文章我把表空间相关的命令串成一条完整链路从物理原理讲到生产实战把每条命令背后的细节、参数含义和踩坑点全部摊开说清楚。适合正在管理PostgreSQL实例的运维和后端同学也适合想把存储概念补扎实的PG使用者。1. 表空间的核心原理与设计思路1.1 表空间是什么逻辑与物理之间的一层目录映射PostgreSQL的表空间本质上是“数据库对象”和“文件系统目录”之间的一层映射。你在SQL里写CREATE TABLE时表的数据文件最终会落到服务器磁盘的某个具体路径上而表空间就是决定这个路径的关键开关。PG安装后默认带了两个表空间pg_default和pg_global。pg_default对应数据目录里的base子目录所有未指定表空间的对象默认都放这里pg_global存放共享系统表比如pg_database一般不需要碰它。理解了这层映射你就能明白一个关键结论表空间并不能像Oracle那样做“逻辑存储结构”的精细管理它更接近“我把这个对象放到哪个物理目录”的选择器。你可以把一张大表放到HDD大容量盘上把它的索引放到SSD高速盘上数据冷热做到了对象级别的物理分离但没法做到表内行级别的冷热分层这对后续设计存储策略很重要。1.2 表空间的物理目录结构软链接与三层嵌套很多DBA没有真正看过表空间在磁盘上的长相出了问题就抓瞎。这里必须说清楚。PostgreSQL的数据目录也就是PGDATA下有一个固定的子目录pg_tblspc。每当你执行CREATE TABLESPACEPG会在这个目录里创建一个符号链接链接名就是表空间的OID对象标识符链接目标是你指定的绝对路径。真实的目录结构大致是这样的$PGDATA/pg_tblspc/16400/16401/2356拆开来看16400是表空间的OID对应pg_tablespace里的记录16401是数据库的OID因为同一个表空间可以被多个数据库共用外层按库再分一层2356是具体表或索引的relfilenode也就是物理文件的编号。所以在排查问题时只要知道某张表的OID就能顺着这个路径结构找到它的物理文件。这也是很多备份和迁移工具要处理表空间路径映射的原因——路径一变整个寻址逻辑就变了。1.3 为什么需要多个表空间性能分层与容量管理我接触过的大部分团队最开始只有一个pg_default后来业务上去了才开始考虑加表空间驱动力通常来自两个方面第一个是磁盘性能分层。一台服务器上既有SSD又有HDDSSD放热点索引和频繁update的表HDD放只读归档数据或者历史大表这样不用换硬件就能明显提升整体IO效率。第二个是容量管理。某个库或者某类业务增长特别快你可以把它单独放到一块独立挂载的磁盘上避免它和系统表、主库抢空间备份和监控也可以针对这个目录单独做。这里必须提醒一句表空间不是银弹。它不能跨物理服务器扩展也不能自动负载均衡。你把表放进去之后后续扩容、迁移都需要手动操作。所以建表空间之前先想清楚业务模型别拍脑袋建一堆空的表空间后面维护起来全是负担。2. 表空间命令全景创建、查询、迁移与删除2.1 创建表空间目录准备和权限校验创建命令本身很简单CREATE TABLESPACE tbs_ssd OWNER app_user LOCATION /data/ssd/pg_ts;但真正执行前有三件事必须确认。目录必须提前存在。PostgreSQL不会帮你建目录LOCATION指定的路径如果不存在命令直接报错。更关键的是目录必须是一个空目录。PG会往这个目录里写入一个标记文件里面记录了PG的版本信息用来防止你后续误把同一个目录指向多个表空间。路径必须是绝对路径。写相对路径会直接报错。而且这个目录不能位于PGDATA目录内部或其子目录下。有人偷懒把表空间建到PGDATA下的某个子目录PG会给出警告并拒绝将已有目录关联。我在实际中见过把/data/pgsql/data/ts1直接填进去的案例结果是创建失败原因就是这个限制。目录的操作系统权限也要提前处理。PostgreSQL系统用户通常是postgres必须对目录有读写权限。如果你用root建了目录忘记chown那么启动实例的身份去写目录时会遇到Permission denied。推荐的准备步骤mkdir -p /data/ssd/pg_ts chown postgres:postgres /data/ssd/pg_ts创建完成后可以快速验证SELECT spcname, pg_tablespace_location(oid) FROM pg_tablespace;这里pg_tablespace_location函数很实用能直接看到每个表空间对应的操作系统路径省得翻pg_tblspc里的软链接。2.2 查看表空间信息从系统表到对象归属查看表空间列表最直接的是使用psql元命令\db但脚本化巡检时我更习惯直接查系统表SELECT oid, spcname, spcowner::regrole AS owner, spcoptions, pg_tablespace_location(oid) AS location FROM pg_tablespace;难点在于查看“哪些表、哪些索引在哪个表空间”。pg_class系统表里有个reltablespace字段存的是对象所在表空间的OID。需要注意一个特殊约定如果这个字段的值是0表示该对象使用的是所在数据库的默认表空间而不是pg_default本身。这在排查时容易让人懵掉。我常用的查询是这样写的SELECT n.nspname AS schema_name, c.relname AS object_name, CASE c.relkind WHEN r THEN TABLE WHEN i THEN INDEX WHEN m THEN MATERIALIZED VIEW END AS object_type, CASE WHEN c.reltablespace 0 THEN db_default ELSE ts.spcname END AS tablespace FROM pg_class c JOIN pg_namespace n ON n.oid c.relnamespace LEFT JOIN pg_tablespace ts ON ts.oid c.reltablespace WHERE c.relkind IN (r, i, m) AND n.nspname NOT IN (pg_catalog, information_schema) ORDER BY tablespace, n.nspname, c.relname;如果你只关心某一张具体表可以用pg_relation_filepath函数直接看物理路径SELECT pg_relation_filepath(orders);如果结果里出现pg_tblspc/16400这样的前缀说明表确实放在了对应表空间里路径一目了然。2.3 迁移对象单表、索引和批量操作的代价表空间迁移的本质是把对象的数据文件复制到新目录然后更新系统表里的映射关系再删除旧文件。因此迁移过程是重写整个对象不是简单改个指针。单表迁移ALTER TABLE orders SET TABLESPACE tbs_archive;索引迁移ALTER INDEX orders_pkey SET TABLESPACE tbs_ssd;物化视图迁移ALTER MATERIALIZED VIEW mv_sales_summary SET TABLESPACE tbs_report;这里必须强调的是锁问题。ALTER TABLE ... SET TABLESPACE需要对表加AccessExclusiveLock也就是最重的那把锁。表多大迁移多久锁就持有多久。别在业务高峰直接对一张几百GB的表执行这条命令否则所有读写都会被堵住。PostgreSQL 9.4之后提供了批量迁移语法可以一次性把某个表空间里的所有同类型对象迁移出去ALTER TABLE ALL IN TABLESPACE tbs_old SET TABLESPACE tbs_new;对应地索引也有ALTER INDEX ALL IN TABLESPACE物化视图有ALTER MATERIALIZED VIEW ALL IN TABLESPACE。可以加上OWNED BY子句只迁移指定角色拥有的对象但生产环境我建议还是提前用查询脚本把对象清单拉出来人工确认后再执行避免批量命令把不该动的对象也挪走。迁移时还有一个隐藏细节表的TOAST表会跟随主表一起迁移不需要单独处理。所以你会发现ALTER TABLE一个带大字段的表迁移后pg_relation_filepath(表名)指向新路径连它的附属TOAST文件也一起过去了。2.4 删除表空间清理残留对象的标准流程DROP TABLESPACE的语法是三行里最轻松的DROP TABLESPACE tbs_old;但执行起来它往往是最费劲的。因为PG规定表空间里不能有任何数据库对象否则拒绝删除。实际报错通常是tablespace tbs_old is not empty。删除前一定要找到残留对象。这里要注意不只是普通表和索引物化视图、TOAST表也都算。我一般用这条SQL查SELECT n.nspname AS schema_name, c.relname AS object_name, c.relkind FROM pg_class c JOIN pg_namespace n ON n.oid c.relnamespace WHERE c.reltablespace (SELECT oid FROM pg_tablespace WHERE spcname tbs_old) ORDER BY c.relkind, n.nspname, c.relname;查出来后根据relkind字段区别处理r是表、i是索引、m是物化视图、t是TOAST表。索引不能单独迁走后留着表通常的做法是把索引迁移到目标表空间或者直接把表的索引重建到别处TOAST表不用手动迁移跟随主表迁移即可物化视图需要单独ALTER。全部清空后再执行DROP TABLESPACE删除后可以顺便确认一下物理目录是否被清理。正常情况下pg_tblspc下的软链接会消失但原始LOCATION目录本身不会被删除因为系统不确认这个目录里还有没有其他文件需要手动清理或者保留复用这点要心里有数。3. 默认表空间机制从默认参数到成本配置3.1 default_tablespace数据库、角色与会话三层设置很多人不知道PostgreSQL可以改变“未指定表空间的表默认放到哪里”靠的是一个参数default_tablespace。这个参数有三个作用层级。第一层是会话级。连接数据库后现场指定SET default_tablespace tbs_ssd; CREATE TABLE report_new (id int); -- 这张表会落在 tbs_ssd第二层是数据库级。修改某个数据库的默认行为所有新连接都会继承ALTER DATABASE appdb SET default_tablespace TO tbs_ssd;第三层是角色级。指定某个用户默认建表到哪个表空间ALTER ROLE app_owner SET default_tablespace TO tbs_ssd;这三个级别的优先级是会话级 角色级 数据库级严格说参数生效遵循的是PG标准的配置优先级用户级高于数据库级会话级以实际SET为准。建议生产环境把设置收敛在数据库级角色和会话级操作过多时很容易审计混乱。还有一个创建数据库时就指定表空间的用法CREATE DATABASE appdb TEMPLATE template1 TABLESPACE tbs_ssd;这意味着这个库的所有默认对象都落在tbs_ssd适合新项目初始化时直接规划好存储路径。3.2 表空间用量统计别靠直觉靠函数和系统表管理表空间最常被问的问题是“这个表空间还剩多少”。PostgreSQL提供现成的函数SELECT pg_tablespace_size(tbs_ssd) / 1024 / 1024 AS size_mb;更直观一点一次把所有表空间的大小拉出来SELECT spcname, pg_size_pretty(pg_tablespace_size(spcname)) AS size FROM pg_tablespace;要注意的是pg_tablespace_size统计的是表空间里所有数据库对象实际占用的文件总大小它和操作系统du看到的结果可能会有小误差因为PG还有其他开销文件但作为日常监控完全够用。如果还想看单个对象的物理占用可以用pg_total_relation_sizeSELECT pg_size_pretty(pg_total_relation_size(orders)) AS total_size;这个函数会把表本身、索引、TOAST全部算进去。做迁移前的容量评估时先跑这一条确认体积再决定窗口时间能避免很多尴尬。3.3 表空间级成本参数让优化器知道快慢盘的区别这是比较进阶的用法很多人完全没有意识到PostgreSQL允许给表空间配置优化器成本参数。比如SSD和HDD的随机读取成本明显不一样你可以在表空间上设置不同的random_page_cost让查询计划更偏向使用合适的位置。创建时指定CREATE TABLESPACE tbs_ssd LOCATION /data/ssd/pg_ts WITH (random_page_cost 1.1);或者对已有表空间修改ALTER TABLESPACE tbs_ssd SET (random_page_cost 1.1, seq_page_cost 1.0);这个配置的实际意义在于如果把热点索引放到SSD表空间同时把它的random_page_cost调低优化器会认为通过索引扫描访问这个表空间的代价更低从而更偏好使用索引路径。这属于比较精细的调优手段适合IO分层明确的场景如果不确定参数对全局的影响建议在测试环境先做对比实验再上生产。4. 实战案例一套订单库的数据与索引物理分离4.1 场景与目标我接手过一套订单系统单表数据量到了一百多GB更新频率高索引也大。服务器上有两块盘一块SSD一块HDD容量都够但原来所有对象都挤在pg_default里SSD的优势完全没发挥出来。经过梳理目标很清晰订单核心表放在HDD大容量盘因为单表体积大且历史数据重这表上的主键索引和频繁查询的二级索引放到SSD因为索引读写更密集对延迟更敏感。这个方案的本质是“数据和索引分离”在PG里用两个表空间就能实现。4.2 操作序列与执行细节先创建两个表空间分别指向两条物理路径CREATE TABLESPACE tbs_data LOCATION /data/hdd/pg_data; CREATE TABLESPACE tbs_index LOCATION /data/ssd/pg_index;迁移订单表到HDDALTER TABLE orders SET TABLESPACE tbs_data;迁移主键索引和关键二级索引到SSDALTER INDEX orders_pkey SET TABLESPACE tbs_index; ALTER INDEX idx_orders_user_id SET TABLESPACE tbs_index;这里有一个经验之谈如果一张表上的索引非常多逐个ALTER INDEX太啰嗦可以把表迁过去之后直接在目标表空间重建索引。比如先把orders迁到tbs_data然后对索引做REINDEX时指定表空间REINDEX INDEX orders_pkey TABLESPACE tbs_index;不过要注意REINDEX TABLE不能直接指定表空间必须逐个索引来或者用动态SQL批量生成。我当时的做法是查出所有索引名生成一批ALTER INDEX ... SET TABLESPACE tbs_index;语句由运维在窗口内分批量执行。4.3 验证迁移结果迁移完成后必须验证。最简单的检查方式是看物理文件路径SELECT pg_relation_filepath(orders); SELECT pg_relation_filepath(orders_pkey);orders的路径应该指向pg_tblspc/(tbs_data的oid)/(数据库oid)/(文件号)而orders_pkey的路径指向pg_tblspc/(tbs_index的oid)/...。两条路径前缀不同说明物理分离生效了。同时还要查一下表空间大小确认数据确实“搬”过来了SELECT spcname, pg_size_pretty(pg_tablespace_size(spcname)) FROM pg_tablespace;4.4 执行窗口与风险控制整个迁移过程有几件事需要提前防范。锁表窗口必须提前评估。ALTER TABLE需要在目标表上加AccessExclusiveLock。我当时的订单表有一百多GB迁移耗时约十几分钟这段时间该表完全不可读写。策略是选择凌晨低峰期并且提前通知业务方脚本里还要加锁等待超时——用事务包裹并设置lock_timeout防止因为排队等锁把其他会话全部堵死。迁移期间磁盘空间要留足。迁移并不是“搬完就删旧文件”而是先写新文件成功后删旧文件所以新旧两份数据会短暂同时存在。提前确认目标表空间所在磁盘的剩余空间大于表的总大小是最基本的保障。主从环境要注意路径一致性。如果这套库搭了流复制standby机器上必须存在一样的目录路径否则主库应用CREATE TABLESPACE产生的WAL日志时从库会因找不到路径而中断恢复。我在很多生产环境里见过类似问题解决办法是在从库上手动mkdir并chown相同路径或者用软链接把路径指到从库实际挂载点。这一点在搭建时就该规划好而不是迁移当天才处理。5. 常见问题与排查技巧实录5.1 删除表空间提示“is not empty”查了半天不知道剩什么这个问题出现的频率极高。用\db只能看到表空间列表看不到内部对象。上面第2.4节给的那条pg_class pg_namespace查询就是标准答案但补充两个容易被忽略的点。第一TOAST表占了一半以上的“幽灵占用”。一张带大字段的表它的TOAST表也在表空间里relkind为t如果主表已经被DROP或迁移TOAST表可能还残留着必须跟随主表一起处理。第二一个表空间可能被多个数据库共享删除前要串联查所有数据库而不是只查当前连接的库。5.2 迁移后表空间占用没有下降反而看着更大了迁移完成后源表空间应该释放掉对象占用的空间。但有时你发现旧表空间大小没降下来。先不要慌原因通常是两个。其一迁移后新旧文件存在重叠期。源文件删除是异步的或因为仍有进程持有了旧文件的文件描述符导致磁盘空间未及时释放。通常过一段时间再查就会恢复。其二表空间的垃圾版本还没被清理。表空间里有大量更新、删除产生的dead tuple这些垃圾占用的空间属于表空间内部尚未回收的部分。跑一次VACUUM或者等autovacuum执行完再查pg_tablespace_size。排查时把两类情况分开用du -sh直接看表空间目录的实际磁盘占用再用pg_tablespace_size看PG统计值。两个数字偏差大说明是垃圾版本问题偏差小但磁盘没释放多半是文件句柄问题。5.3 普通用户无法创建或迁移到表空间CREATE TABLESPACE默认只允许超级用户执行。即使给了普通用户数据库的读写权限它也没法建表空间。这是PG的权限设计不是bug。但你可以给普通用户授权让它使用某个已有的表空间GRANT CREATE ON TABLESPACE tbs_ssd TO app_user;授权之后app_user创建表时指定TABLESPACE tbs_ssd或者执行ALTER TABLE ... SET TABLESPACE就都不会报权限错了。常见的报错是permission denied for tablespace tbs_ssd对应就是少了这条GRANT。5.4 把表空间建到了PGDATA内部创建失败前面提过表空间的LOCATION不能是PGDATA本身或其子目录。有人图省事把表空间目录直接放在数据目录下结果PG会明确拒绝。原因是这会破坏数据目录的结构假设导致pg_basebackup之类的备份工具行为异常。正确做法是单独建一个数据盘或者子目录比如/data/pg_tablespace/tbs1并且确保路径清晰、可扩展。5.5 reltablespace为0导致查询结果全部显示成pg_default这是查询对象归属时最容易踩的坑。pg_class.reltablespace 0并不绝对等于“对象在pg_default里”它表示“对象使用所在数据库的默认表空间”。如果你曾经ALTER DATABASE appdb SET default_tablespace TO tbs_ssd那么该库下所有reltablespace 0的对象实际都在tbs_ssd里。排查时如果只按reltablespace直接关联pg_tablespace会漏掉这些对象。正确做法是结合当前库的default_tablespace参数来判断。一个比较实用的视图写法是把pg_class.reltablespace为0的情况翻译成当前会话的default_tablespace前提是你知道当前连的是哪个库。我在巡检脚本里是直接查每个库的默认表空间再对库逐个核对避免误判。写在最后的实践经验表空间管理在我的日常运维里早就不是“临时救急”的工具了而是一套需要提前规划的存储策略。我养成了三个习惯每周跑一次pg_tablespace_size的统计脚本看每个表空间的增长曲线每月核对一遍对象分布确认没有对象因为误操作落在了错误的位置每次变更前先把当前所有表空间的OID、路径、对象数量打一个快照保存下来一旦出问题对照快照恢复比临时猜命令高效得多。最后分享一个小技巧把表空间和对象归属的关联查询做成一个视图名字就叫v_tablespace_objects日常巡检、工单排查、容量评估都用它省心不少。表空间的命令确实不多但把它放进完整的存储管理流程里每个细节都值得较真。

相关新闻

四线制电阻测量仪设计:电压跟随器与数字电压表协同实现0.1%精度

四线制电阻测量仪设计:电压跟随器与数字电压表协同实现0.1%精度

简介:本资源是一份面向电子类专业本科生与课程设计实践者的《数字电压表及高精度智能电阻测量仪器》教学设计文档,聚焦电压跟随器在精密测量电路中的核心应用。文档系统阐述了电压跟随器的工作原理、高输入阻抗(可达数兆欧)与低输…

2026/10/15 22:05:25 阅读更多 →
Ubuntu安装Docker完整指南:从环境预检到排错实战

Ubuntu安装Docker完整指南:从环境预检到排错实战

从零开始:Ubuntu 装机路上的一次 Docker 安装记录作为一个长期折腾 Linux 桌面和服务器的用户,我几乎每次重装系统都要和 Docker 打交道。这篇文章是我前段时间在一台全新的 Ubuntu 设备上安装 Docker 的完整记录,包含了每一步操作的背后逻辑…

2026/10/15 22:05:25 阅读更多 →
Qt网络上传实战:QNetworkAccessManager与multipart文件上传全解析

Qt网络上传实战:QNetworkAccessManager与multipart文件上传全解析

写 Qt 网络上传这事儿其实有点意思。很多人刚开始用 Qt 做 HTTP 请求时,第一反应是去翻 QNetworkAccessManager 的文档,然后照着示例抄一段 post() 代码,结果发现要么服务端收不到参数,要么上传大文件时界面直接卡死。这篇文章就围…

2026/10/15 22:05:25 阅读更多 →

最新新闻

VS2017 MFC打包部署实战:解决0xc000007b与DLL缺失问题

VS2017 MFC打包部署实战:解决0xc000007b与DLL缺失问题

1. 项目概述:为什么MFC打包部署至今仍是硬需求在某高校实验室带学生做工业控制界面开发时,我连续三年遇到同一个问题:学生写完功能完整的MFC程序,一到老师验收环节就卡在“打不开”——不是提示缺少MSVCP140.dll,就是报…

2026/10/15 22:58:24 阅读更多 →
STM32 ADC多通道采集必须用DMA的原理与实战

STM32 ADC多通道采集必须用DMA的原理与实战

简介:本资源是一份面向STM32F4系列嵌入式开发者的ADC多通道采集实战工程,聚焦模拟信号高速、低负载采集场景,特别适用于传感器阵列监测、工业数据采集等需兼顾实时性与CPU效率的应用。项目完整实现ADC多通道轮询配置、DMA自动搬运及传输完成中…

2026/10/15 22:58:24 阅读更多 →
上下文工程实战:从提示词优化到信息架构的完整指南

上下文工程实战:从提示词优化到信息架构的完整指南

1. 上下文工程到底在解决什么问题第一次听到“上下文工程”这个词,很多人会下意识觉得它只是“提示词优化”换了个马甲。但真上手做过几个基于大模型的应用之后,你会发现这两件事根本不在一个层面上。提示词优化关注的是“这一句话怎么写才让模型答得更好…

2026/10/15 22:58:24 阅读更多 →
ResNet残差连接原理与PyTorch实现详解

ResNet残差连接原理与PyTorch实现详解

1. 项目概述:为什么ResNet不是“又一个CNN”,而是深度学习的分水岭ResNet的pytorch实现与解析——这八个字背后,藏着过去十年最硬核的一次模型架构突破。我带过不少刚接触CV的新手,他们第一次看到ResNet论文里那张“50层、101层甚…

2026/10/15 22:58:24 阅读更多 →
企业数据安全防护:零信任架构与行为分析实践

企业数据安全防护:零信任架构与行为分析实践

1. 企业数据安全现状与挑战去年某跨国零售企业遭遇的内部数据泄露事件,让整个行业都倒吸一口凉气——一位离职工程师利用未及时撤销的访问权限,带走了超过200万客户的消费记录。这起事件暴露出一个残酷现实:最危险的安全威胁往往来自企业内部…

2026/10/15 22:58:23 阅读更多 →
C语言笔试算法18题:内存与指针驱动的闭环训练体系

C语言笔试算法18题:内存与指针驱动的闭环训练体系

1. 这不是题库搬运,而是一套可闭环复用的C语言算法训练体系“18个笔试考试算法 C语言”——看到这个标题,很多人第一反应是:又一个刷题合集?点开就背代码?先别急着划走。我带过几十届校招辅导班,也参与过多…

2026/10/15 22:57:23 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →