暂无图片
pg中用dd模拟表损坏?
我来答
分享
暂无图片 匿名用户
pg中用dd模拟表损坏?

dd bs=8192 count=1 seek=1 of=/data/pgdata/base/16401/177846 if=/data/pgdata/base/16401/177846


1+0 records in
1+0 records out
8192 bytes (8.2 kB) copied, 0.000301755 s, 27.1 MB/s


执行完成后,表tab1对应的文件:/data/pgdata/base/16401/177846

希望select * from tab1报错,

但是没有报错,

我如何用dd模拟出tab1损坏了呢?

我来答
添加附件
收藏
分享
问题补充
5条回答
默认
最新
刘贵宾

你可以直接vi relfilenode来模拟表损坏

暂无图片 评论
暂无图片 有用 2
李宏达

把seek去掉,可能表特别小,都没有1K。

暂无图片 评论
暂无图片 有用 0
李宏达

记得先备份
dd if=/dev/zero of=/data/pgdata/base/16401/177846 bs=1M count=1

暂无图片 评论
暂无图片 有用 1
超越无限D
2022-10-17
张sir

1、你这个表有多大?pg的一次写入是8k,如果你的表行数很少的话,你这个表总共也就8k。

2、另外就是你的select * from tab1,可能根本不用读磁盘,都在内存里呢。

3、dd bs=8192 count=1 seek=1 of=/data/pgdata/base/16401/177846 if=/data/pgdata/base/16401/177846    ====》你这条命令的意思是从177846开头读出8k,写到177846的8k开始的地方。

4、楼上的方法可以:

dd if=/dev/zero of=/data/pgdata/base/16401/177846 bs=1M count=1  ===>把1M的0,写入到177846.

暂无图片 评论
暂无图片 有用 1
李宏达

27F13F16.png

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏