I've got a foreign table (using postgresql_fdw
foreign data wrapper) and I need to find maximum ID to copy all records. When I run SELECT MAX(id) FROM foreign_table
it doesn't seem to be using index:
Aggregate (cost=205.06..205.07 rows=1 width=4) (actual time=13999.535..13999.535 rows=1 loops=1)
-> Foreign Scan on foreign_table (cost=100.00..197.75 rows=2925 width=4) (actual time=1.288..13632.768 rows=1849305 loops=1)
Planning time: 0.087 ms
Execution time: 14019.179 ms
When I run the same query (SELECT MAX(id) FROM table
) on the "real" table it uses index:
Result (cost=0.45..0.46 rows=1 width=0) (actual time=0.164..0.165 rows=1 loops=1)
InitPlan 1 (returns $0)
-> Limit (cost=0.43..0.45 rows=1 width=4) (actual time=0.152..0.153 rows=1 loops=1)
-> Index Only Scan Backward using table_pkey on table (cost=0.43..46102.55 rows=1821907 width=4) (actual time=0.143..0.143 rows=1 loops=1)
Index Cond: (id IS NOT NULL)
Heap Fetches: 1
Total runtime: 0.270 ms
The database with the foreign table has version 9.4.4 and the one with the "real" table has version 9.3.9.
Is there some way to use the index in the first query?
created_at > date
, I'd have to create a new view and foreign table for every date value to use index oncreated_at
? – Dressy