diff --git a/martin/src/pg/config.rs b/martin/src/pg/config.rs index c84aa01b3..60dd80b0b 100644 --- a/martin/src/pg/config.rs +++ b/martin/src/pg/config.rs @@ -1,6 +1,10 @@ use futures::future::try_join; +use futures::pin_mut; +use log::warn; use serde::{Deserialize, Serialize}; +use std::time::Duration; use tilejson::TileJSON; +use tokio::time::timeout; use crate::config::{copy_unrecognized_config, UnrecognizedValues}; use crate::pg::config_function::FuncInfoSources; @@ -110,8 +114,18 @@ impl PgConfig { pub async fn resolve(&mut self, id_resolver: IdResolver) -> crate::Result { let pg = PgBuilder::new(self, id_resolver).await?; + + let instantiate_tables = pg.instantiate_tables(); + pin_mut!(instantiate_tables); + if timeout(Duration::from_secs(5), &mut instantiate_tables) + .await + .is_err() + { + warn!("PostgreSQL table discovery is taking too long. Make sure your table geo columns have a GIS index, or use --disabling-bounds."); + } + let ((mut tables, tbl_info), (funcs, func_info)) = - try_join(pg.instantiate_tables(), pg.instantiate_functions()).await?; + try_join(instantiate_tables, pg.instantiate_functions()).await?; self.tables = Some(tbl_info); self.functions = Some(func_info);