Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Postgres:在不扫描整个表的情况下确定表中更改的最佳方法_Postgresql_Etl - Fatal编程技术网

Postgresql 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,从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_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只能直接处理这些行?