PostgreSQL 10 - 事务日志
PostgreSQL提供了系统crash的时候,不破坏数据的完整性的功能。vi如在断电以后,系统也能重新启动继续完成工作。
这类安全保证由WAL(Write Ahead Log)提供-数据不直接写到数据文件,而是首先写到日志。
比如这样一条语句:
INSERT INTO data ... VALUES ('12345678');
假设数据直接写到数据文件。如果操作失败,数据文件就会被破坏。比如只写了半行,列没有索引指针,丢失了commit信息等。由于硬件无法保证大量数据的原子写入,因此必须找到一种办法,使数据库更健壮。通过写日志,问题能被解决。
一次写包含多个记录(records),它有一个校验和,并且被链接到一起。一个事务可能包含B-tree、索引、存储管理、提交记录等。每个类型的对象都有自己的WAL条目,确保对象可以在crash时幸存。如果系统crash,PostgreSQL再次启动时,会基于事务日志准备数据文件,确保不发生永久性的破坏。
查看事务日志
WAL通常位于pg_wal目录下,老版本的位于pg_xlog目录。
postgres@LBS-8500:~/10/main/pg_wal$ ls -l
总用量 638980
-rw------- 1 postgres postgres 16777216 12月 29 09:56 00000001000000000000003E
-rw------- 1 postgres postgres 16777216 7月 4 10:32