在PostgreSQL中,是否可以限制那些数据实际上没有改变的文件的改变?

t5zmwmid  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(128)

**问题:**我们有一个表“test”,由“test_202309”、“test_202310”、“test_202311”三个部分组成,这些部分存储了2023年9月、2023年10月和2023年11月的数据。

1.我使用命令“oid 2name-d“来获取节的文件名(文件节点<db_name>)
1.将目录更改为包含数据库文件的目录:

cd <datadirectory>/<oid_db>

字符串
1.获取文件的哈希值:

md5sum <filenode>


1.执行SQL命令VACUUM,并带有verbose、analyze、freeze选项:

VACUUM (verbose, analyze, freeze) test;


1.再次获取文件的哈希和:

md5sum <filenode>


部分test_202309和test_202310的哈希和不同,但部分中的数据没有更改。
当我第二次运行VACUUM(冻结)时,它仍然会改变,并且它与不包含死行的部分有关。
对于数据库,增量复制是在文件系统级别执行的,这些文件将被视为已更改,并将包含在增量复制中,从而相应地增加复制大小。

**Question:**PostgreSQL是否可以将更改限制在数据实际未更改的文件中?
**P.S.**对于Oracle,通过将表分区放置在单独的表空间中并使其成为只读表空间,解决了类似的问题

k5hmc34c

k5hmc34c1#

不,你不能这样做。PostgreSQL需要对数据文件的写访问权。至少,它会运行一个防环绕的自动真空运行每个autovacuum_freeze_max_age事务,不会做任何事情,但仍然会更改文件(如你所观察到的)。
但是,这种情况很少发生,并且所有冻结的表可能在很长一段时间内都不会更改,因此增加的备份量应该不会有太大的问题。

相关问题