In postgreSQL 15, I had the below query that worked quickly. Now, I make no claims that the query is the best possible, or even a good query, but it DID work, and it did so quickly enough to be un-noticable when running.
Then I upgrade to PostgreSQL 18 - and now the query never completes (as in, I get a command timeout after at least half an hour before I get a result). Looking at the EXPLAIN (https://explain.depesz.com/s/llAQ) makes it pretty obvious why: we have a sequence scan on a large table inside a nested loop - and that sequence scan is apparently not short circuiting. I tried the obvious: REINDEX database and VACUUM ANALYZE, but neither helped. I have my default_statistics_target set to 500 at the moment. Then I tried SET enable_seqscan = off; Lo and behold, the query ran in only 123.888 ms (fun number :-D ) - https://explain.depesz.com/s/K2K9 What did I do wrong here? Thanks! The query in question: SELECT stations.id, stations.name as name, latitude::float as lat, longitude::float as lon, elevation::float alt, type, coalesce(sites.name, 'Unknown') as site, sites.id as siteid, coalesce((SELECT true FROM tilt_data INNER JOIN tilt_orientation ON tilt_data.station=tilt_orientation.station WHERE tilt_data.station=stations.id LIMIT 1), false) as has_tilt, array_to_json(volcano) as stationvolcs, coalesce( (SELECT array_agg(s.volcano_name ORDER BY t.ord) FROM volcano s JOIN unnest( volcano ) WITH ORDINALITY t(id,ord) ON (t.id=s.volcano_id) ), '{}' ) volcnames FROM stations LEFT JOIN sites ON stations.siteref=sites.id ORDER BY site, name --- Israel Brewster Software Engineer Alaska Volcano Observatory Geophysical Institute - UAF 2156 Koyukuk Drive Fairbanks AK 99775-7320 Work: 907-474-5172 cell: 907-328-9145
