在PostgreSQL 9.1中,流式复制是通过流式WAL记录来完成的,这些记录是由主数据上的UPDATE和DELETE生成的。如何复制DDL更改?这些都不是长城的一部分。
vktxenjb1#
Postgresql的Write Ahead Log(WAL)does contain DDL.在PostgreSQL中,DDL是事务性的,就像DML一样。一切都经过长城。参见http://wiki.postgresql.org/wiki/Transactional_DDL_in_PostgreSQL:_A_Competitive_Analysis
gfttwv5a2#
为了详细说明科林的答案,几乎所有的东西都要经过预写日志。它是一个块级日志,记录将对任何数据库结构进行的每一次写入。对数据目录任何部分的每次更改都首先记录在WAL中。这是因为WAL的主要目的是在系统崩溃或断电时允许重放更改,因此它需要记录每个计划的磁盘写入。在PostgreSQL中,表、视图等只是系统目录表中的条目。对这些目录的更改会与其他所有内容沿着被写入日志。数据库创建也是如此; db只是pg_database和相应目录结构中的一个条目。VACUUM、CLUSTER、TRUNCATE等对表格所做的更改;它们都通过WAL,或者使用块级更改记录,或者使用特殊的WAL条目来描述操作。只有少数非耐用品不会通过WAL,例如:
pg_database
VACUUM
CLUSTER
TRUNCATE
UNLOGGED
TEMPORARY
2条答案
按热度按时间vktxenjb1#
Postgresql的Write Ahead Log(WAL)does contain DDL.在PostgreSQL中,DDL是事务性的,就像DML一样。一切都经过长城。
参见http://wiki.postgresql.org/wiki/Transactional_DDL_in_PostgreSQL:_A_Competitive_Analysis
gfttwv5a2#
为了详细说明科林的答案,几乎所有的东西都要经过预写日志。它是一个块级日志,记录将对任何数据库结构进行的每一次写入。对数据目录任何部分的每次更改都首先记录在WAL中。这是因为WAL的主要目的是在系统崩溃或断电时允许重放更改,因此它需要记录每个计划的磁盘写入。
在PostgreSQL中,表、视图等只是系统目录表中的条目。对这些目录的更改会与其他所有内容沿着被写入日志。数据库创建也是如此; db只是
pg_database
和相应目录结构中的一个条目。VACUUM
、CLUSTER
、TRUNCATE
等对表格所做的更改;它们都通过WAL,或者使用块级更改记录,或者使用特殊的WAL条目来描述操作。只有少数非耐用品不会通过WAL,例如:
UNLOGGED
和TEMPORARY
表的更改