Postgresql Postgres:在不扫描整个表的情况下确定表中更改的最佳方法
我正在设计一个etl,从postgres表中获取增量更改Postgresql Postgres:在不扫描整个表的情况下确定表中更改的最佳方法,postgresql,etl,Postgresql,Etl,我正在设计一个etl,从postgres表中获取增量更改 如何检测在上次etl运行后是否修改了表行而不进行全表扫描?我会保存统计数据并从pg_stat_所有表中进行比较,例如我只是按顺序运行: t=# select schemaname,relname,n_tup_ins,n_tup_upd,n_tup_del from pg_stat_all_tables where relname = 'rapid_inserts'; schemaname | relname | n
如何检测在上次etl运行后是否修改了表行而不进行全表扫描?我会保存统计数据并从pg_stat_所有表中进行比较,例如我只是按顺序运行:
t=# select schemaname,relname,n_tup_ins,n_tup_upd,n_tup_del from pg_stat_all_tables where relname = 'rapid_inserts';
schemaname | relname | n_tup_ins | n_tup_upd | n_tup_del
------------+--------------------+-----------+-----------+-----------
public | rapid_inserts| 254681563 | 0 | 0
(1 row)
Time: 10.921 ms
t=# select schemaname,relname,n_tup_ins,n_tup_upd,n_tup_del from pg_stat_all_tables where relname = 'rapid_inserts';
schemaname | relname | n_tup_ins | n_tup_upd | n_tup_del
------------+--------------------+-----------+-----------+-----------
public | rapid_inserts| 254681569 | 0 | 0
(1 row)
Time: 10.980 ms
这意味着在短短的一秒钟内插入了6行。同样适用于更新和删除…Vao Tsun的回答对您的问题是正确的,但从PostgreSQL复制数据的最佳方式可能是使用触发器,而这些触发器不需要检查pg_stat_all_表。感谢Vao的快速回复。有没有办法找到插入/更新/删除了哪些行,以便etl只能直接处理这些行?