You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过查询触发PostgreSQL 12.10进入PANIC状态?求可行语句

触发PostgreSQL 12.10 PANIC状态的查询方法

PostgreSQL的PANIC属于严重错误,会直接终止数据库进程,通常只有在系统内部一致性被破坏、关键资源不可用或触发特定底层bug时才会触发。以下是几个需要超级用户权限的测试方法(仅在测试环境操作,会损坏数据库,操作前务必备份):

  • 修改系统表破坏文件映射一致性

    1. 创建测试表并插入数据:
      CREATE TABLE test_panic (id int);
      INSERT INTO test_panic VALUES (1);
      
    2. 查询表对应的文件节点:
      SELECT relfilenode FROM pg_class WHERE relname = 'test_panic';
      
    3. 非法修改该表的文件节点为一个不存在的数值:
      UPDATE pg_class SET relfilenode = 999999 WHERE relname = 'test_panic';
      
    4. 尝试访问该表,此时PostgreSQL会因找不到对应文件且系统表一致性被破坏触发PANIC:
      SELECT * FROM test_panic;
      
  • 利用内存溢出触发PANIC(部分场景)
    递归CTE如果无限递归且内存耗尽,在较低work_mem配置下可能触发PANIC:

    WITH RECURSIVE r AS (
      SELECT 1 AS n
      UNION ALL
      SELECT n+1 FROM r
    )
    SELECT * FROM r;
    

    注:这个方法不一定100%触发PANIC,部分场景下可能仅终止查询,需结合参数调整测试。

需要注意的是,PANIC是PostgreSQL的极端错误状态,正常业务中应绝对避免,上述方法仅用于测试场景,操作后数据库可能无法正常运行,需通过备份恢复或重新初始化。

内容的提问来源于stack exchange,提问作者CharlesMoore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 14:36:25