首页 > 数据库 >PostgreSQL坏块问题

PostgreSQL坏块问题

时间:2023-11-03 14:02:22浏览次数:44  
标签:count row1 PostgreSQL 问题 bad 坏块 ctid find row

问题概述

应用在做查询操作时报错

ERROR: invalid memory alloc request size 18446744073709551613

问题原因

数据中有物理坏块

解决方案

删除损坏的行

1.创建扩展

create extension hstore;

PostgreSQL坏块问题_坏块

2.创建function

CREATE OR REPLACE FUNCTION
  find_bad_row(tableName TEXT)
  RETURNS tid
  as $find_bad_row$
DECLARE
  result tid;
  curs REFCURSOR;
  row1 RECORD;
  row2 RECORD;
  tabName TEXT;
  count BIGINT := 0;
BEGIN
  SELECT reverse(split_part(reverse($1), '.', 1)) INTO tabName;
  OPEN curs FOR EXECUTE 'SELECT ctid FROM ' || tableName;
  count := 1;
  FETCH curs INTO row1;
  WHILE row1.ctid IS NOT NULL LOOP
    result = row1.ctid;
    count := count + 1;
    FETCH curs INTO row1;
    EXECUTE 'SELECT (each(hstore(' || tabName || '))).* FROM '
         || tableName || ' WHERE ctid = $1' INTO row2
         USING row1.ctid;
    IF count % 100000 = 0 THEN
      RAISE NOTICE 'rows processed: %', count;
    END IF;
  END LOOP;
  CLOSE curs;
  RETURN row1.ctid;
  EXCEPTION
    WHEN OTHERS THEN
      RAISE NOTICE 'LAST CTID: %', result;
      RAISE NOTICE '%: %', SQLSTATE, SQLERRM;
  RETURN result;
END
$find_bad_row$
LANGUAGE plpgsql;


3.通过函数查找问题行


pepsidb=# select find_bad_row('pepsi.t1');
NOTICE: LAST CTID: (6112,6)
NOTICE: XX000: invalid memory alloc request size 18446744073709551613
find_bad_row
--------------
(6112,6)
(1 row)


4.查看问题ctid

pepsidb=#  select * from pepsi.t1 where ctid = '(6112,6)';    #查找有问题的ctid,若能查出
的数据可保存下来
ERROR: invalid memory alloc request size 18446744073709551613


pepsidb=#  delete from pepsi.t1 where ctid = '(6112,6)';   #删除有问题的ctid对应的数据块

5.重复执行第3,4步,直到全部有问题的记录被清除。

标签:count,row1,PostgreSQL,问题,bad,坏块,ctid,find,row
From: https://blog.51cto.com/u_13482808/8165279

相关文章

  • PostgreSQL技术大讲堂 - 第32讲:数据库参数调整
     PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUGPG技术大讲堂。 第32讲:数据库参数调整 第32讲:11月04日(周六)19:30-20:30,......
  • flask部署在腾讯云上,但在本地使用网页无法访问——问题解决
    flask部署在腾讯云上,但在本地使用网页无法访问——问题解决1.修改腾讯云防火墙,把对应的port开放:2.修改代码if__name__=='__main__':app.run(host="0.0.0.0",port=5000,debug=True)参考链接:https://zhuanlan.zhihu.com/p/611969276......
  • 校验 ChatGPT4 真实性的三个经典问题:区分 GPT3.5 与 GPT4,并提供免费测试网站
    现在已经有很多ChatGPT的套壳网站,以下分享验明GPT-4真身的三个经典问题,帮助你快速区分套壳网站背后到底用的是GPT-3.5还是GPT-4。大家可以在这个网站测试:https://ai.hxkj.vip,免登录可以问三条,登录之后无限制。咱们使用免登录的额度测试就已经够用了测试问题1:Whatist......
  • angie rocky docker 镜像问题
    angierockydocker在构建的时候似乎有一些问题,启动的时候会有问题异常信息angie:[emerg]open()"/run/angie/angie.pid"failed(2:Nosuchfileordirectory)解决方法自己构建一个镜像,对于缺少的文件夹进行创建FROMdocker.angie.software......
  • 苏格拉底问答、实践过程截图、遇到问题解决问题截图,代码链接
    #include<signal.h>#include<stdio.h>#include<sys/time.h>intcount=0;structitimervalt;voidtimer_handler(intsig){printf("timer_handler:signal=%dcount=%d\n",sig,++count);if(count>=8){printf("cancel......
  • uni-swipe-action的使用和样式问题
    <uni-swipe-action>         <viewv-for="(item,index)innoticeList":key="item.id"style="margin-top:30upx;">            <uni-swipe-action-itemclass="swipe-action-item":right-options="o......
  • C# Lambda 分组排序问题(先对数据进行时间倒序排列,然后再按照某字符分组,在每个分组内再
    问题:先对数据进行时间倒序排列,然后再按照某字符分组,在每个分组内再按照某数字或字符正序排列解答:vardata=list.OrderByDescending(i=>i.Date).ToList();vargData=data.GroupBy(g=>g.code).Select(l=>l.OrderBy(i=>i.Step));varinvData=newList<IndexVM>();......
  • 安装MySQL初始化问题由于找不到VCRUNTIME140_1.dll,无法继续执行代码。重新安装程序可
    1.关于安装MySQL初始化遇到的问题出现的是如下图错误 这是安装mysql-8.0.25初始化的时候我遇到的报错解决方法如下:安装微软常用运行库合集[下载地址,没有积分的可以评论区联系我](https://download.csdn.net/download/qq_42603590/19686518)安装好之后就不会报错了好了之......
  • postcss-pxtorem 使用和问题
    postcss-pxtorem是存放在postcss.config.js文件里的。结构如下:module.exports={ plugins:{  autoprefixer:{},  'postcss-pxtorem':{   rootValue({file}){    return10//尺寸   },   propList:['*'],   //替......
  • 这才是当今生成式人工智能的根本性问题!
    原创|文BFT机器人01引言近年来,生成式人工智能产品层出不穷,ChatGPT火爆出圈后,百度、谷歌等科技大佬争相研究生成式人工智能产品,将该技术的普及程度提升到了一个新的水平。然而,生成式人工智能的运营需要高昂的能源成本。02现代化风向标:光速发展的人工智能人工智能的产生是必然,是人......