El vie, 21 ene 2022 a las 5:04, Michael Lewis (<mle...@entrata.com>)
escribió:

> When dealing with foreign tables, I believe planning is not the same
> because of access to statistics (maybe has improved since 9.6 though). I
> just wonder... Would it be a viable option to create a materialized view
> using the FDW but then use the PHP script against the local tables only?
> Materialized views are not maintained automatically, but you have local
> statistics and can create indexes. Just a thought in case the data is not
> changing constantly and this might fit the need.
>
> Also, it seems like perhaps the foreign queries might be more targeted if
> some data was encouraged to be pre-computed. What would be the expected row
> count from just table1?
>
> Note- your explain plan doesn't mention "fichero_origen" field name. Is
> that just a copy/paste error?
>

It's a column renaming mistake.
t1.fichero_origen = t1.file (it's the column where incoming file name is
stored).



>
> with cte_interesting_t1_rows_precomputed AS materialized(
> select
> t1.*,
> substring(t1.bbb from 1 for 3) in (<some_values>) AND t1.file =
> 'file_name.csv' AS needs_t2,
> substring(t1.bbb from 1 for 3) in (<some_different_values>) AS needs_t3
> FROM
> table1 t1
> where t1.ccccc = 'ACTIVE'
> and t1.fichero_origen = 'file_name.csv'
> )
>
>  select t1.aaaa as maindb_aaaa, t1.bbb as maindb_bbb, t1.ccccc as
> maindb_ccccc, t1.timestamp_create as maindb_create,
>     t1.timestamp_closed as maindb_close, t1.ddddddddd as maindb_ddddddddd,
> null::text as db1_sth,
>     t2.eeeeeeee as db1_eeeeeeee, t2.ffffffff as db1_ffffffff, null::text
> as db2_sth,
>     t3.eeeeeeee as db2_eeeeeeee, t3.ffffffff as db2_ffffffff
> from cte_interesting_t1_rows_precomputed AS t1
> left join database1_fdw.table2 AS t2 on t1.aaaa = t2.btatpd_aaaa and
> t2.btatpd_fecha = '20220119120000' AND needs_t2
> left join database2_fdw.table2 AS t3 on t1.aaaa = t3.btatpd_aaaa and
> t3.btatpd_fecha = '20220119120000' AND needs_t3
> where
>     (t2.eeeeeeee is null and t3.eeeeeeee is null)
>     or
>     (t2.eeeeeeee is not null and t1.ddddddddd <> t2.ffffffff)
>     or
>     (t3.eeeeeeee is not null and t1.ddddddddd <> t3.ffffffff)
> order by t1.bbb nulls last;
>

I'm doing some tests after reading carefully your answer and Tom's, and
I'll post back.
Thank you both.

Reply via email to