Postgres:无需扫描整个 table 即可确定 table 中更改的最佳方法
Postgres: Best way to determine changes in table without scanning entire table
我正在设计一个 etl 以从 postgres table 进行增量更改。
如何检测 table 行在上次 etl 运行 之后是否被修改而不进行完整 table 扫描?
我会保存统计数据并与 pg_stat_all_tables
进行比较,例如我只是按顺序 运行:
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行。同样适用于更新和删除...
我正在设计一个 etl 以从 postgres table 进行增量更改。
如何检测 table 行在上次 etl 运行 之后是否被修改而不进行完整 table 扫描?
我会保存统计数据并与 pg_stat_all_tables
进行比较,例如我只是按顺序 运行:
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行。同样适用于更新和删除...