暂无图片
分享
2019-08-13
Could not open file pg_clog/0251

查询PostgreSQL一个表时,出现以下错误,帮忙看下是什么原因

select * from employee t

> ERROR:  could not access status of transaction 622198178

  DETAIL:  Could not open file "pg_clog/0251": No such file or directory.


收藏
分享
5条回答
默认
最新
joan

这个是事务记录文件,里面记录了事务的提交或回滚,如果丢失了此文件就无法判断事务的状态,一种解决办法是伪造此文件,然后全部使用提交的方式填充文件,建议最好再与你最近的备份文件进行数据对比。

暂无图片 评论
暂无图片 有用 0
打赏 0

怎样使用提交的方式填充文件呢

另外,可以查出文件丢失的原因吗

暂无图片 评论
暂无图片 有用 0
打赏 0
joan

一、首先对数据库进行全库物理备份;

二、用dd进行伪造这个数据块(数据块伪造全部提交),并且更改权限

for i in {1..262144}; do printf '\125'; done > 0251

chown postgres:postgres 0251

chmod 600 0251

mv -i 0251 $PGDATA/pg_clog/0251


至于怎么丢失的那要你们自己找原因了。


暂无图片 评论
暂无图片 有用 0
打赏 0

好的,感谢您的分析及提供的解决方案

暂无图片 评论
暂无图片 有用 0
打赏 0
joan
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
请问各位老大postgresql为什么会同时发布5个版本的release?
回答 3
已采纳
PostgreSQL项目组有时会选择同时发布多个版本的更新,主要是出于以下几个原因:支持多个版本:PostgreSQL有着广泛的用户群体,不同的用户可能正在使用不同的版本。为了确保所有用户都能得到安全
pgsql里设置了用户的访问IP限制策略,只给了某个库的权限,但是程序报错,提示无法访问 template1,必须同时给template1权限才正常,这是什么原因?
回答 1
template1也是要用到的。如果再建立database,建库时如果不指定TEMPLATE属性,默认用的是template1模板库
怎么通过sh脚本 登陆 postgresql?
回答 1
已采纳
通过psql连接,可以使用非交互模式进行查询。
oracle存储过程转PG,record兼容问题
回答 3
已采纳
pgfunction可以这样写:CREATEORREPLACEFUNCTIONfun(parmCHARACTERVARYING)RETURNSSETOFRECORDAS$BODY$DECLAREire
wal_level 的疑问
回答 2
你的理解是正确的
postgresql 中等待事件如何查看?
回答 1
已采纳
PG中可以通过系统表pgstatactivity查看等待事件,这张表的waiteventtype字段表示等待事件的类型。
postgreSQL10流复制是必须用复制槽吗?
回答 1
 在PostgreSQL10及以后的版本中,流复制不一定必须使用复制槽(ReplicationSlots)。复制槽是PostgreSQL提供的一种机制,用于跟踪主服务器和备份服务器之间的数据
libevent-devel-2.0.21-4.el7.x86_64.rpm,求一个
回答 2
已采纳
上传附件:libevent2.0.214.el7.x8664.rpm
为什么PostgreSQL连接的时候说用户认证失败?
回答 1
已采纳
你需要在pghba.conf文件中设置防火墙规则,如:echo“hostallall0.0.0.0/0md5”>>pghba.conf
postgresql,查询某列中最大值那条记录,sql怎么写最简单高效。
回答 1
已采纳
来自于高性能mysql一书的一个方法。我想同样适用于postgre对这列建一个倒顺索引 然后selectfieldfromtlimit1就可以。性能最好
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~