暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

容器postgresql13迁移到16集群之后应用连接报错问题

原创 伟鹏 2024-04-28
385

环境

源端:部署在docker环境中的postgresql 13.*
目标端:patroni搭建的postgresql 16.*集群
迁移方式:pg_dump/pg_restore
报错:应用连接开启事务报错

背景

数据是通过pg_dump备份的容器里面得pg13里面得一个数据库,然后再通过pg_restore的方式恢复到pg16的集群环境,就是正常的备份恢复。问题报出来之后又做了一次备份恢复还是出现这种问题,这种恢复出来的数据库可以通过客户端正常得增删改,但是无法通过应用开启事务得操作。不知道其他朋友遇到过没有,通过这种备份恢复方式都这样么?还是单机迁移到集群才会有这种问题,限于时间问题就没再研究,得空有时间做个测试。

问题:

could not read block 1274 in file "base/263430/389462": read only 0 of 8192 bytes

排查:

1、权限排查

1.1、用户对象权限

怀疑是权限问题,查看其中一个表的权限,发现这个拥有所有应该有的权限
img_v3_02a8_212fb76617304f989f3aec74c2c8d8bg.jpg

1.2、临时授权super权限

授权超级用户权限之后还是报同样的错误;

2、工具测试

使用PGadmin4 登录数据库之后执行update,delete,insert都是可以正常操作的,只有在应用连接操作的时候才报如上的错误

3、表空间排查

oid | oid | spcname | spcowner | spcacl | spcoptions ------+------+------------+----------+--------+------------ 1663 | 1663 | pg_default | 10 | | 1664 | 1664 | pg_global | 10 | |

查看data目录

data_directory ------------------ /data/pgsql/data (1 row) [postgres@pg-cluster-node1 ~]$ ll /data/pgsql/data/base total 368 drwx------ 2 postgres postgres 16384 Apr 26 17:36 1 drwx------ 2 postgres postgres 126976 Apr 28 12:35 263430 drwx------ 2 postgres postgres 20480 Apr 28 05:04 348757 drwx------ 2 postgres postgres 36864 Apr 28 05:59 382532 drwx------ 2 postgres postgres 4096 Feb 21 18:10 4 drwx------ 2 postgres postgres 126976 Apr 27 23:35 459512 drwx------ 2 postgres postgres 36864 Apr 26 17:36 5 drwx------ 2 postgres postgres 4096 Apr 26 17:35 pgsql_tmp

4、完整性检查

查询报错对应的表
image.png

对导入的表进行完整性检查
检查发现log里面有数据,网上说应该是索引问题导致的。

···sql
pg_dump -U postgres -h10.0.5*.* -p 5432 -d kanban -v -t car_resources*user_id*** > car_resources_***user_id*** >> car_resources_***user_id***.log 2>&1


### 5、索引重建

 使用 vaccumdb 并重新索引,之后测试是正常的。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论