环境
源端:部署在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、用户对象权限
怀疑是权限问题,查看其中一个表的权限,发现这个拥有所有应该有的权限

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、完整性检查
查询报错对应的表

对导入的表进行完整性检查
检查发现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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




