рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдордзреАрд▓ рдСрдкрд░реЗрд╢рдирд▓ рдЕреЕрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕: рдорджрдд рдЖрдгрд┐ рдкреНрд░реЙрдореНрдкреНрдЯ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ FDW

рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░, рдпрд╛ рдЬрдЧрд╛рддреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рдЧреЛрд╖реНрдЯреАрдкреНрд░рдорд╛рдгреЗ, рддреНрдпрд╛рдЪреЗ рдлрд╛рдпрджреЗ рдЖрдгрд┐ рддреЛрдЯреЗ рдЖрд╣реЗрдд. рдХрд╛рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддреНрдпрд╛рд╕рд╣ рд╕реБрд▓рдн рд╣реЛрддрд╛рдд, рддрд░ рдХрд╛рд╣реА рдЕрдзрд┐рдХ рдХрдареАрдг. рдЖрдгрд┐ рдмрджрд▓рд╛рдЪреНрдпрд╛ рдЧрддреАрд╕рд╛рдареА рдЖрдгрд┐ рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреАрд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рддреНрдпрд╛рдЧ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рддреНрдпрд╛рдкреИрдХреА рдПрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рдЪреА рд╡рд╛рдврддреА рдЬрдЯрд┐рд▓рддрд╛ рдЖрд╣реЗ. рдЬрд░ рдореЛрдиреЛрд▓рд┐рдердордзреНрдпреЗ рд╕рд░реНрд╡ рдСрдкрд░реЗрд╢рдирд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдгреЗ SQL рдХреНрд╡реЗрд░реАрдордзреНрдпреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреГрддреАрдордзреНрдпреЗ рдХрдореА рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддрд╛рдд, рддрд░ рдорд▓реНрдЯреАрд╕рд░реНрд╡реНрд╣рд┐рд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡реЗрдЪрд╛ рд╕реНрд╡рддрдГрдЪрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдЕрд╕рддреЛ рдЖрдгрд┐ рдЕрд╕реЗ рджрд┐рд╕рддреЗ рдХреА рдПрдХ рдХреНрд╡реЗрд░реА рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА (рдХрд┐рдВрд╡рд╛ рдХрджрд╛рдЪрд┐рдд рддреЗ рд╣реЛрдК рд╢рдХрддреЗ?). рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдХрдВрдкрдиреАрддреАрд▓ рдСрдкрд░реЗрд╢рдирд▓ рдЕреЕрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕рдЪреА рд╕рдорд╕реНрдпрд╛ рдХрд╢реА рд╕реЛрдбрд╡рд▓реА рдЖрдгрд┐ рдЖрдореНрд╣реА рдпрд╛ рд╕реЛрд▓реНрдпреВрд╢рдирд╕рд╣ рдЬрдЧрдгреЗ рдХрд╕реЗ рд╢рд┐рдХрд▓реЛ рдпрд╛рдмрджреНрджрд▓ рд╕реНрд╡рд╛рд░рд╕реНрдп рдЕрд╕рд▓реЗрд▓реНрдпрд╛рдВрд╕рд╛рдареА - рд╕реНрд╡рд╛рдЧрдд рдЖрд╣реЗ.

рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдордзреАрд▓ рдСрдкрд░реЗрд╢рдирд▓ рдЕреЕрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕: рдорджрдд рдЖрдгрд┐ рдкреНрд░реЙрдореНрдкреНрдЯ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ FDW
рдорд╛рдЭреЗ рдирд╛рд╡ рдкрд╛рд╡реЗрд▓ рд╢рд┐рд╡рд╛рд╢ рдЖрд╣реЗ, DomClick рдпреЗрдереЗ рдореА рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рдбреЗрдЯрд╛ рд╡реЗрдЕрд░рд╣рд╛рдКрд╕ рд░рд╛рдЦрдгреНрдпрд╛рд╕рд╛рдареА рдЬрдмрд╛рдмрджрд╛рд░ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЯреАрдордордзреНрдпреЗ рдХрд╛рдо рдХрд░рддреЛ. рдкрд╛рд░рдВрдкрд╛рд░рд┐рдХрдкрдгреЗ, рдЖрдордЪреНрдпрд╛ рдХреНрд░рд┐рдпрд╛рдХрд▓рд╛рдкрд╛рдВрдирд╛ рдбреЗрдЯрд╛ рдЕрднрд┐рдпрд╛рдВрддреНрд░рд┐рдХреА рдореНрд╣рдгреВрди рд╡рд░реНрдЧреАрдХреГрдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ, рдкрд░рдВрддреБ, рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд, рдХрд╛рд░реНрдпрд╛рдВрдЪреА рд╢реНрд░реЗрдгреА рдЦреВрдк рд╡рд┐рд╕реНрддреГрдд рдЖрд╣реЗ. рдбреЗрдЯрд╛ рдЕрднрд┐рдпрд╛рдВрддреНрд░рд┐рдХреАрд╕рд╛рдареА ETL/ELT рдорд╛рдирдХ рдЖрд╣реЗрдд, рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЖрдгрд┐ рддреБрдордЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рд╕рд╛рдзрдирд╛рдВрдЪреНрдпрд╛ рд╡рд┐рдХрд╛рд╕рд╛рд╕рд╛рдареА рд╕рд╛рдзрдирд╛рдВрдЪреЗ рд╕рдорд░реНрдерди рдЖрдгрд┐ рдЕрдиреБрдХреВрд▓рди. рд╡рд┐рд╢реЗрд╖рддрдГ, рдСрдкрд░реЗрд╢рдирд▓ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧрд╕рд╛рдареА, рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдПрдХ рдореЛрдиреЛрд▓рд┐рде рдЖрд╣реЗ рдЕрд╕реЗ рдЖрдореНрд╣реА "рдмрд╕рд╡рдгреНрдпрд╛рдЪреЗ" рдард░рд╡рд▓реЗ рдЖрдгрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХрд╛рдВрдирд╛ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рджреНрдпрд╛ рдЬреНрдпрд╛рдордзреНрдпреЗ рддреНрдпрд╛рдВрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓рд╛ рд╕рд░реНрд╡ рдбреЗрдЯрд╛ рдЕрд╕реЗрд▓.

рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдЖрдореНрд╣реА рд╡рд┐рд╡рд┐рдз рдкрд░реНрдпрд╛рдпрд╛рдВрдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХреЗрд▓рд╛. рдкреВрд░реНрдг рд╡рд╛рдвреАрдЪреЗ рднрд╛рдВрдбрд╛рд░ рддрдпрд╛рд░ рдХрд░рдгреЗ рд╢рдХреНрдп рд╣реЛрддреЗ - рдЖрдореНрд╣реА рдкреНрд░рдпрддреНрди рджреЗрдЦреАрд▓ рдХреЗрд▓реЗ, рдкрд░рдВрддреБ, рдЦрд░реЗ рд╕рд╛рдВрдЧрд╛рдпрдЪреЗ рддрд░, рдЖрдореНрд╣реА рднрд╛рдВрдбрд╛рд░ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЖрдгрд┐ рддреНрдпрд╛рдд рдмрджрд▓ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдРрд╡рдЬреА рд╕рдВрде рдкреНрд░рдХреНрд░рд┐рдпреЗрд╕рд╣ рддрд░реНрдХрд╢рд╛рд╕реНрддреНрд░рд╛рддреАрд▓ рдмрд░реНтАНрдпрд╛рдЪ рд╡реЗрд│рд╛ рдмрджрд▓рд╛рдВрдирд╛ рдПрдХрддреНрд░ рдХрд░реВ рд╢рдХрд▓реЛ рдирд╛рд╣реА (рдЬрд░ рдХреЛрдгреА рдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реЗ рддрд░ , рдХрд╕реЗ рддреЗ рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдордзреНрдпреЗ рд▓рд┐рд╣рд╛). рд╡рд┐рд╢реНрд▓реЗрд╖рдХрд╛рдВрдирд╛ рд╕рд╛рдВрдЧрдгреЗ рд╢рдХреНрдп рд╣реЛрддреЗ: "рдореБрд▓рд╛рдВрдиреЛ, рдЕрдЬрдЧрд░ рд╢рд┐рдХрд╛ рдЖрдгрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреГрддреАрдВрд╡рд░ рдЬрд╛," рдкрд░рдВрддреБ рднрд░рддреАрд╕рд╛рдареА рд╣реА рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ рдЖрдгрд┐ рдЕрд╕реЗ рджрд┐рд╕рддреЗ рдХреА рд╣реЗ рд╢рдХреНрдп рдЕрд╕рд▓реНрдпрд╛рд╕ рдЯрд╛рд│рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ. рдЖрдореНрд╣реА FDW (рдлреЙрд░реЗрди рдбреЗрдЯрд╛ рд░реЕрдкрд░) рддрдВрддреНрд░рдЬреНрдЮрд╛рди рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛: рдореВрд▓рдд:, рд╣реЗ рдПрдХ рдорд╛рдирдХ dblink рдЖрд╣реЗ, рдЬреЗ SQL рдорд╛рдирдХрд╛рдд рдЖрд╣реЗ, рдкрд░рдВрддреБ рддреНрдпрд╛рдЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдЕрдзрд┐рдХ рд╕реЛрдпреАрд╕реНрдХрд░ рдЗрдВрдЯрд░рдлреЗрд╕рд╕рд╣. рддреНрдпрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд, рдЖрдореНрд╣реА рдПрдХ рдЙрдкрд╛рдп рдХреЗрд▓рд╛, рдЬреЛ рдЕрдЦреЗрд░реАрд╕ рдкрдХрдбрд▓рд╛ рдЧреЗрд▓рд╛ рдЖрдгрд┐ рдЖрдореНрд╣реА рддреНрдпрд╛рд╡рд░ рд╕реЗрдЯрд▓ рдЭрд╛рд▓реЛ. рддреНрдпрд╛рдЪреЗ рддрдкрд╢реАрд▓ рд╣рд╛ рдПрдХрд╛ рд╕реНрд╡рддрдВрддреНрд░ рд▓реЗрдЦрд╛рдЪрд╛ рд╡рд┐рд╖рдп рдЖрд╣реЗ, рдЖрдгрд┐ рдХрджрд╛рдЪрд┐рдд рдПрдХрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд, рдХрд╛рд░рдг рдорд▓рд╛ рдмрд░реЗрдЪ рдХрд╛рд╣реА рдмреЛрд▓рд╛рдпрдЪреЗ рдЖрд╣реЗ: рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭ рдХрд░рдгреНрдпрд╛рдкрд╛рд╕реВрди рддреЗ рдкреНрд░рд╡реЗрд╢ рдирд┐рдпрдВрддреНрд░рдг рдЖрдгрд┐ рд╡реИрдпрдХреНрддрд┐рдХ рдбреЗрдЯрд╛рдЪреЗ рд╡реИрдпрдХреНрддрд┐рдХрд░рдг. рд╣реЗ рдЖрд░рдХреНрд╖рдг рдХрд░рдгреЗ рджреЗрдЦреАрд▓ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдХреА рд╣реЗ рд╕рдорд╛рдзрд╛рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрдгрд┐ рднрд╛рдВрдбрд╛рд░рд╛рдВрдЪреА рдЬрд╛рдЧрд╛ рдирд╛рд╣реА; рддреЗ рдХреЗрд╡рд│ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпреЗрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рддреЗ.

рд╢реАрд░реНрд╖ рд╕реНрддрд░рд╛рд╡рд░ рдЕрд╕реЗ рджрд┐рд╕рддреЗ:

рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдордзреАрд▓ рдСрдкрд░реЗрд╢рдирд▓ рдЕреЕрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕: рдорджрдд рдЖрдгрд┐ рдкреНрд░реЙрдореНрдкреНрдЯ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ FDW
рдПрдХ PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрд╣реЗ рдЬреЗрдереЗ рд╡рд╛рдкрд░рдХрд░реНрддреЗ рддреНрдпрд╛рдВрдЪрд╛ рдХрд╛рд░реНрдп рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░реВ рд╢рдХрддрд╛рдд рдЖрдгрд┐ рд╕рд░реНрд╡рд╛рдд рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдореНрд╣рдгрдЬреЗ, рд╕рд░реНрд╡ рд╕реЗрд╡рд╛рдВрдЪреНрдпрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреГрддреА FDW рджреНрд╡рд╛рд░реЗ рдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕рд╢реА рдЬреЛрдбрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд. рдпрд╛рдореБрд│реЗ рдЕрдиреЗрдХ рдбреЗрдЯрд╛рдмреЗрд╕реЗрд╕рд╡рд░ рдХреНрд╡реЗрд░реА рд▓рд┐рд╣рд┐рдгреЗ рд╢рдХреНрдп рд╣реЛрддреЗ рдЖрдгрд┐ рддреЗ рдХрд╛рдп рдЖрд╣реЗ рдпрд╛рдиреЗ рдХрд╛рд╣реА рдлрд░рдХ рдкрдбрдд рдирд╛рд╣реА: PostgreSQL, MySQL, MongoDB рдХрд┐рдВрд╡рд╛ рджреБрд╕рд░реЗ рдХрд╛рд╣реАрддрд░реА (рдлрд╛рдЗрд▓, API, рдЕрдЪрд╛рдирдХ рдпреЛрдЧреНрдп рд░реЕрдкрд░ рдирд╕рд▓реНрдпрд╛рд╕, рдЖрдкрдг рд╕реНрд╡рддрдГрдЪреЗ рд▓рд┐рд╣реВ рд╢рдХрддрд╛). рдмрд░рдВ, рд╕рд░реНрд╡рдХрд╛рд╣реА рдЫрд╛рди рджрд┐рд╕рддреЗ! рдЖрдкрдг рдмреНрд░реЗрдХрдЕрдк рдХрд░рдд рдЖрд╣реЛрдд рдХрд╛?

рдЬрд░ рд╕рд░реНрд╡ рдХрд╛рд╣реА рдЗрддрдХреНрдпрд╛ рд▓рд╡рдХрд░ рдЖрдгрд┐ рд╕рд╣рдЬрддреЗрдиреЗ рд╕рдВрдкрд▓реЗ рддрд░, рдХрджрд╛рдЪрд┐рдд, рдПрдХ рд▓реЗрдЦ рдирд╕реЗрд▓.

рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рд╡рд┐рдирдВрддреНрдпрд╛рдВрдЪреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╢реА рдХрд░рддреЗ рдпрд╛рдмрджреНрджрд▓ рд╕реНрдкрд╖реНрдЯ рдЕрд╕рдгреЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ. рд╣реЗ рддрд╛рд░реНрдХрд┐рдХ рд╡рд╛рдЯрддреЗ, рдкрд░рдВрддреБ рдмрд░реЗрдЪрджрд╛ рд▓реЛрдХ рддреНрдпрд╛рдХрдбреЗ рд▓рдХреНрд╖ рджреЗрдд рдирд╛рд╣реАрдд: рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рд╕реНрд╡рддрдВрддреНрд░рдкрдгреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рднрд╛рдЧрд╛рдВрдордзреНрдпреЗ рд╡рд┐рдирдВрддреА рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ, рд╣рд╛ рдбреЗрдЯрд╛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рдЖрдгрд┐ рдЕрдВрддрд┐рдо рдЧрдгрдирд╛ рд╕реНрд╡рддрдГрдЪ рдХрд░рддреЗ, рддреНрдпрд╛рдореБрд│реЗ рдХреНрд╡реЗрд░реА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреА рдЧрддреА рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЗ рддреЗ рдХрд╕реЗ рд▓рд┐рд╣рд┐рд▓реЗ рдЖрд╣реЗ. рд╣реЗ рджреЗрдЦреАрд▓ рд▓рдХреНрд╖рд╛рдд рдШреЗрддрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ: рдЬреЗрд╡реНрд╣рд╛ рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░реВрди рдбреЗрдЯрд╛ рдпреЗрддреЛ рддреЗрд╡реНрд╣рд╛ рддреНрдпрд╛рдд рдпрд╛рдкреБрдвреЗ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдирд╕рддрд╛рдд, рд╢реЗрдбреНрдпреВрд▓рд░рд▓рд╛ рдорджрдд рдХрд░рдгрд╛рд░реЗ рдХрд╛рд╣реАрд╣реА рдирд╕рддреЗ, рдореНрд╣рдгреВрдирдЪ, рдХреЗрд╡рд│ рдЖрдореНрд╣реАрдЪ рддреНрдпрд╛рд▓рд╛ рдорджрдд рдХрд░реВ рд╢рдХрддреЛ рдЖрдгрд┐ рд╕рд▓реНрд▓рд╛ рджреЗрдК рд╢рдХрддреЛ. рдЖрдгрд┐ рдиреЗрдордХреЗ рд╣реЗрдЪ рдорд▓рд╛ рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╡рд╛рд░ рдмреЛрд▓рд╛рдпрдЪреЗ рдЖрд╣реЗ.

рдПрдХ рд╕рд╛рдзреА рдХреНрд╡реЗрд░реА рдЖрдгрд┐ рддреНрдпрд╛рд╕реЛрдмрдд рдПрдХ рдпреЛрдЬрдирд╛

рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ 6 рджрд╢рд▓рдХреНрд╖ рдкрдВрдХреНрддреА рдЯреЗрдмрд▓рдЪреА рдЪреМрдХрд╢реА рдХрд╢реА рдХрд░рддреЗ рд╣реЗ рджрд╛рдЦрд╡рдгреНрдпрд╛рд╕рд╛рдареА, рдЪрд▓рд╛ рдПрдХ рд╕рд╛рдзреА рдпреЛрдЬрдирд╛ рдкрд╛рд╣реВ.

explain analyze verbose  
SELECT count(1)
FROM fdw_schema.table;

Aggregate  (cost=418383.23..418383.24 rows=1 width=8) (actual time=3857.198..3857.198 rows=1 loops=1)
  Output: count(1)
  ->  Foreign Scan on fdw_schema."table"  (cost=100.00..402376.14 rows=6402838 width=0) (actual time=4.874..3256.511 rows=6406868 loops=1)
        Output: "table".id, "table".is_active, "table".meta, "table".created_dt
        Remote SQL: SELECT NULL FROM fdw_schema.table
Planning time: 0.986 ms
Execution time: 3857.436 ms

VERBOSE рд╕реНрдЯреЗрдЯрдореЗрдВрдЯрдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓реНрдпрд╛рдиреЗ рдЖрдореНрд╣рд╛рд▓рд╛ рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдкрд╛рдард╡рд▓реА рдЬрд╛рдгрд╛рд░реА рдХреНрд╡реЗрд░реА рдЖрдгрд┐ рдкреБрдвреАрд▓ рдкреНрд░рдХреНрд░рд┐рдпреЗрд╕рд╛рдареА рдЖрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдгрд╛рд░реЗ рдкрд░рд┐рдгрд╛рдо (RemoteSQL рд▓рд╛рдЗрди) рдкрд╛рд╣рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рдорд┐рд│рддреЗ.

рдЪрд▓рд╛ рдереЛрдбреЗ рдкреБрдвреЗ рдЬрд╛рдК рдЖрдгрд┐ рдЖрдордЪреНрдпрд╛ рд╡рд┐рдирдВрддреАрд╡рд░ рдЕрдиреЗрдХ рдлрд┐рд▓реНрдЯрд░реНрд╕ рдЬреЛрдбреВ: рдПрдХ рд╕рд╛рдареА рдмреБрд▓рд┐рдпрди рдлреАрд▓реНрдб, рдШрдЯрдирд╛рдВрдиреБрд╕рд╛рд░ рдПрдХ рд╢рд┐рдХреНрдХрд╛ рдордзреНрдпрд╛рдВрддрд░ рдЖрдгрд┐ рдПрдХ рдХрд░реВрди jsonb.

explain analyze verbose
SELECT count(1)
FROM fdw_schema.table 
WHERE is_active is True
AND created_dt BETWEEN CURRENT_DATE - INTERVAL '7 month' 
AND CURRENT_DATE - INTERVAL '6 month'
AND meta->>'source' = 'test';

Aggregate  (cost=577487.69..577487.70 rows=1 width=8) (actual time=27473.818..25473.819 rows=1 loops=1)
  Output: count(1)
  ->  Foreign Scan on fdw_schema."table"  (cost=100.00..577469.21 rows=7390 width=0) (actual time=31.369..25372.466 rows=1360025 loops=1)
        Output: "table".id, "table".is_active, "table".meta, "table".created_dt
        Filter: (("table".is_active IS TRUE) AND (("table".meta ->> 'source'::text) = 'test'::text) AND ("table".created_dt >= (('now'::cstring)::date - '7 mons'::interval)) AND ("table".created_dt <= ((('now'::cstring)::date)::timestamp with time zone - '6 mons'::interval)))
        Rows Removed by Filter: 5046843
        Remote SQL: SELECT created_dt, is_active, meta FROM fdw_schema.table
Planning time: 0.665 ms
Execution time: 27474.118 ms

рдкреНрд░рд╢реНрди рд▓рд┐рд╣рд┐рддрд╛рдирд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдЬреНрдпрд╛ рдореБрджреНрджреНрдпрд╛рдХрдбреЗ рд▓рдХреНрд╖ рджреЗрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рддреЗ рдпреЗрдереЗ рдЖрд╣реЗ. рдлрд┐рд▓реНрдЯрд░ рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдирд╛рд╣реАрдд, рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдХреА рддреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ рд╕рд░реНрд╡ 6 рджрд╢рд▓рдХреНрд╖ рдкрдВрдХреНрддреА рдмрд╛рд╣реЗрд░ рдХрд╛рдврддреЗ рдЬреЗрдгреЗрдХрд░реВрди рдирдВрддрд░ рд╕реНрдерд╛рдирд┐рдХ рдкрд╛рддрд│реАрд╡рд░ рдлрд┐рд▓реНрдЯрд░ рдХрд░рд╛ (рдлрд┐рд▓реНрдЯрд░ рдкрдВрдХреНрддреА) рдЖрдгрд┐ рдПрдХрддреНрд░реАрдХрд░рдг рдХрд░рд╛. рдпрд╢рд╛рдЪреА рдЧреБрд░реБрдХрд┐рд▓реНрд▓реА рдореНрд╣рдгрдЬреЗ рдХреНрд╡реЗрд░реА рд▓рд┐рд╣рд┐рдгреЗ рдЬреЗрдгреЗрдХрд░реБрди рдлрд┐рд▓реНрдЯрд░ рд░рд┐рдореЛрдЯ рдорд╢реАрдирд╡рд░ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓ рдЖрдгрд┐ рдЖрдореНрд╣реА рдлрдХреНрдд рдЖрд╡рд╢реНрдпрдХ рдкрдВрдХреНрддреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЛ рдЖрдгрд┐ рдПрдХрддреНрд░рд┐рдд рдХрд░рддреЛ.

рддреЗ рдХрд╛рд╣реА рдмреВрд▓реЗрдирд╢реАрдЯ рдЖрд╣реЗ

рдмреБрд▓рд┐рдпрди рдлреАрд▓реНрдбрд╕рд╣ рд╕рд░реНрд╡рдХрд╛рд╣реА рд╕реЛрдкреЗ рдЖрд╣реЗ. рдореВрд│ рд╡рд┐рдирдВрддреАрдордзреНрдпреЗ, рд╕рдорд╕реНрдпрд╛ рдСрдкрд░реЗрдЯрд░рдореБрд│реЗ рд╣реЛрддреА is. рдЬрд░ рддреБрдореНрд╣реА рддреНрдпрд╛рд╕ рдмрджрд▓рд╛ =, рдирдВрддрд░ рдЖрдореНрд╣рд╛рд▓рд╛ рдЦрд╛рд▓реАрд▓ рдкрд░рд┐рдгрд╛рдо рдорд┐рд│реЗрд▓:

explain analyze verbose
SELECT count(1)
FROM fdw_schema.table
WHERE is_active = True
AND created_dt BETWEEN CURRENT_DATE - INTERVAL '7 month' 
AND CURRENT_DATE - INTERVAL '6 month'
AND meta->>'source' = 'test';

Aggregate  (cost=508010.14..508010.15 rows=1 width=8) (actual time=19064.314..19064.314 rows=1 loops=1)
  Output: count(1)
  ->  Foreign Scan on fdw_schema."table"  (cost=100.00..507988.44 rows=8679 width=0) (actual time=33.035..18951.278 rows=1360025 loops=1)
        Output: "table".id, "table".is_active, "table".meta, "table".created_dt
        Filter: ((("table".meta ->> 'source'::text) = 'test'::text) AND ("table".created_dt >= (('now'::cstring)::date - '7 mons'::interval)) AND ("table".created_dt <= ((('now'::cstring)::date)::timestamp with time zone - '6 mons'::interval)))
        Rows Removed by Filter: 3567989
        Remote SQL: SELECT created_dt, meta FROM fdw_schema.table WHERE (is_active)
Planning time: 0.834 ms
Execution time: 19064.534 ms

рдЬрд╕реЗ рдЖрдкрдг рдкрд╛рд╣реВ рд╢рдХрддрд╛, рдлрд┐рд▓реНрдЯрд░ рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдЧреЗрд▓рд╛ рдЖрдгрд┐ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреА рд╡реЗрд│ 27 рддреЗ 19 рд╕реЗрдХрдВрджрд╛рдВрдкрд░реНрдпрдВрдд рдХрдореА рдХреЗрд▓реА рдЧреЗрд▓реА.

рд╣реЗ рдСрдкрд░реЗрдЯрд░ рд▓рдХреНрд╖рд╛рдд рдШреЗрдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдЖрд╣реЗ is рдСрдкрд░реЗрдЯрд░рдкреЗрдХреНрд╖рд╛ рд╡реЗрдЧрд│реЗ = рдХрд╛рд░рдг рддреЗ рд╢реВрдиреНрдп рдореВрд▓реНрдпрд╛рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░реВ рд╢рдХрддреЗ. рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдХреА рдЦрд░реЗ рдирд╛рд╣реА рдлрд┐рд▓реНрдЯрд░рдордзреНрдпреЗ False рдЖрдгрд┐ Null рд╣реА рдореВрд▓реНрдпреЗ рд╕реЛрдбрддреАрд▓ != рдЦрд░реЗ рдлрдХреНрдд рдЪреБрдХреАрдЪреА рдореВрд▓реНрдпреЗ рд╕реЛрдбрддреАрд▓. рдореНрд╣рдгреВрди, рдСрдкрд░реЗрдЯрд░ рдмрджрд▓рддрд╛рдирд╛ рдирд╛рд╣реА OR рдСрдкрд░реЗрдЯрд░рд╕рд╣ рджреЛрди рдЕрдЯреА рдлрд┐рд▓реНрдЯрд░рд▓рд╛ рдкрд╛рд╕ рдХреЗрд▓реНрдпрд╛ рдкрд╛рд╣рд┐рдЬреЗрдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдХреБрдареЗ (col != рдЦрд░реЗ) рдХрд┐рдВрд╡рд╛ (col null рдЖрд╣реЗ).

рдЖрдореНрд╣реА рдмреБрд▓рд┐рдпрдирдЪрд╛ рд╕рд╛рдордирд╛ рдХреЗрд▓рд╛ рдЖрд╣реЗ, рдЪрд▓рд╛ рдкреБрдвреЗ рдЬрд╛рдКрдпрд╛. рдЖрддреНрддрд╛рд╕рд╛рдареА, рдЗрддрд░ рдмрджрд▓рд╛рдВрдЪреНрдпрд╛ рдкрд░рд┐рдгрд╛рдорд╛рдЪрд╛ рд╕реНрд╡рддрдВрддреНрд░рдкрдгреЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдмреБрд▓рд┐рдпрди рдлрд┐рд▓реНрдЯрд░рд▓рд╛ рддреНрдпрд╛рдЪреНрдпрд╛ рдореВрд│ рд╕реНрд╡рд░реВрдкрд╛рдд рдкрд░рдд рдХрд░реВ.

timestamptz hz

рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡реНрд╣рд░рдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЕрд╕рд▓реЗрд▓реА рд╡рд┐рдирдВрддреА рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдХрд╢реА рд▓рд┐рд╣рд╛рдпрдЪреА рдпрд╛рдЪрд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрдиреЗрдХрджрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрддреЛ рдЖрдгрд┐ рддреНрдпрд╛рдирдВрддрд░рдЪ рд╣реЗ рдХрд╛ рдШрдбрддреЗ рдпрд╛рдЪреЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╢реЛрдзрд╛. рдЗрдВрдЯрд░рдиреЗрдЯрд╡рд░ рдпрд╛рдмрджреНрджрд▓ рдлрд╛рд░рдЪ рдХрдореА рдорд╛рд╣рд┐рддреА рдорд┐рд│реВ рд╢рдХрддреЗ. рддрд░, рдкреНрд░рдпреЛрдЧрд╛рдВрдордзреНрдпреЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдврд│рд▓реЗ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рддрд╛рд░реАрдЦ рдлрд┐рд▓реНрдЯрд░ рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдзрдорд╛рдХреЗрджрд╛рд░рдкрдгреЗ рдЙрдбрддреЛ, рдкрд░рдВрддреБ рдЬреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдбрд╛рдпрдиреЕрдорд┐рдХрд▓реА рддрд╛рд░реАрдЦ рд╕реЗрдЯ рдХрд░рд╛рдпрдЪреА рдЕрд╕рддреЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, now() рдХрд┐рдВрд╡рд╛ CURRENT_DATE, рддреЗрд╡реНрд╣рд╛ рдЕрд╕реЗ рд╣реЛрдд рдирд╛рд╣реА. рдЖрдордЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд, рдЖрдореНрд╣реА рдПрдХ рдлрд┐рд▓реНрдЯрд░ рдЬреЛрдбрд▓рд╛ рдЖрд╣реЗ рдЬреЗрдгреЗрдХрд░реВрди рднреВрддрдХрд╛рд│рд╛рддреАрд▓ 1 рдорд╣рд┐рдиреНрдпрд╛рдЪрд╛ рдбреЗрдЯрд╛ (CURRENT_DATE - INTERVAL '7 рдорд╣рд┐рдирд╛' рдЖрдгрд┐ CURRENT_DATE - INTERVAL '6 рдорд╣рд┐рдирд╛') рдпрд╛ рд╕реНрддрдВрднрд╛рдд рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХреЗрд▓рд╛ рдЖрд╣реЗ. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд рдЖрдореНрд╣реА рдХрд╛рдп рдХреЗрд▓реЗ?

explain analyze verbose
SELECT count(1)
FROM fdw_schema.table 
WHERE is_active is True
AND created_dt >= (SELECT CURRENT_DATE::timestamptz - INTERVAL '7 month') 
AND created_dt <(SELECT CURRENT_DATE::timestamptz - INTERVAL '6 month')
AND meta->>'source' = 'test';

Aggregate  (cost=306875.17..306875.18 rows=1 width=8) (actual time=4789.114..4789.115 rows=1 loops=1)
  Output: count(1)
  InitPlan 1 (returns $0)
    ->  Result  (cost=0.00..0.02 rows=1 width=8) (actual time=0.007..0.008 rows=1 loops=1)
          Output: ((('now'::cstring)::date)::timestamp with time zone - '7 mons'::interval)
  InitPlan 2 (returns $1)
    ->  Result  (cost=0.00..0.02 rows=1 width=8) (actual time=0.002..0.002 rows=1 loops=1)
          Output: ((('now'::cstring)::date)::timestamp with time zone - '6 mons'::interval)
  ->  Foreign Scan on fdw_schema."table"  (cost=100.02..306874.86 rows=105 width=0) (actual time=23.475..4681.419 rows=1360025 loops=1)
        Output: "table".id, "table".is_active, "table".meta, "table".created_dt
        Filter: (("table".is_active IS TRUE) AND (("table".meta ->> 'source'::text) = 'test'::text))
        Rows Removed by Filter: 76934
        Remote SQL: SELECT is_active, meta FROM fdw_schema.table WHERE ((created_dt >= $1::timestamp with time zone)) AND ((created_dt < $2::timestamp with time zone))
Planning time: 0.703 ms
Execution time: 4789.379 ms

рдЖрдореНрд╣реА рдкреНрд▓реЕрдирд░рд▓рд╛ рд╕рдмрдХреНрд╡реЗрд░реАрдордзреАрд▓ рддрд╛рд░рдЦреЗрдЪреА рдЖрдЧрд╛рдК рдЧрдгрдирд╛ рдХрд░рдгреНрдпрд╛рд╕ рд╕рд╛рдВрдЧрд┐рддрд▓реЗ рдЖрдгрд┐ рддрдпрд╛рд░ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдлрд┐рд▓реНрдЯрд░рдордзреНрдпреЗ рдкрд╛рд╕ рдХрд░рд╛. рдЖрдгрд┐ рдпрд╛ рдЗрд╢рд╛рд░рд╛рдиреЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдкрд░рд┐рдгрд╛рдо рджрд┐рд▓рд╛, рд╡рд┐рдирдВрддреА рдЬрд╡рд│рдЬрд╡рд│ 6 рдкрдЯ рд╡реЗрдЧрд╡рд╛рди рдЭрд╛рд▓реА!

рдкреБрдиреНрд╣рд╛, рдпреЗрдереЗ рд╕рд╛рд╡рдзрдЧрд┐рд░реА рдмрд╛рд│рдЧрдгреЗ рдорд╣рддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ: рд╕рдмрдХреНрд╡реЗрд░реАрдордзреАрд▓ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдЖрдкрдг рдЬреНрдпрд╛ рдлреАрд▓реНрдбрд╡рд░ рдлрд┐рд▓реНрдЯрд░ рдХрд░рдд рдЖрд╣реЛрдд рддреНрдпрд╛ рдлреАрд▓реНрдб рдкреНрд░рдорд╛рдгреЗрдЪ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЕрдиреНрдпрдерд╛ рдкреНрд▓реЕрдирд░ рдард░рд╡реЗрд▓ рдХреА рдкреНрд░рдХрд╛рд░ рднрд┐рдиреНрди рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдкреНрд░рдердо рд╕рд░реНрд╡ рдорд┐рд│рд╡рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдбреЗрдЯрд╛ рдЖрдгрд┐ рд╕реНрдерд╛рдирд┐рдХ рдкрд╛рддрд│реАрд╡рд░ рдлрд┐рд▓реНрдЯрд░ рдХрд░рд╛.

рдЪрд▓рд╛ рддрд╛рд░реАрдЦ рдлрд┐рд▓реНрдЯрд░ рддреНрдпрд╛рдЪреНрдпрд╛ рдореВрд│ рдореВрд▓реНрдпрд╛рд╡рд░ рдкрд░рдд рдХрд░реВ.

рдлреНрд░реЗрдбреА рд╡рд┐. Jsonb

рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдмреБрд▓рд┐рдпрди рдлреАрд▓реНрдб рдЖрдгрд┐ рддрд╛рд░рдЦрд╛рдВрдиреА рдЖрдзреАрдЪ рдЖрдордЪреНрдпрд╛ рдХреНрд╡реЗрд░реАрд▓рд╛ рдкреБрд░реЗрд╕рд╛ рд╡реЗрдЧ рджрд┐рд▓рд╛ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЖрдгрдЦреА рдПрдХ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╢рд┐рд▓реНрд▓рдХ рд╣реЛрддрд╛. рдЦрд░реЗ рд╕рд╛рдВрдЧрд╛рдпрдЪреЗ рддрд░, рдпрд╛рджреНрд╡рд╛рд░реЗ рдлрд┐рд▓реНрдЯрд░рд┐рдВрдЧрдЪреА рд▓рдврд╛рдИ рдЕрджреНрдпрд╛рдк рд╕рдВрдкрд▓реЗрд▓реА рдирд╛рд╣реА, рдЬрд░реА рдпреЗрдереЗрд╣реА рдпрд╢ рдЖрд╣реЗ. рддрд░, рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рдЖрдореНрд╣реА рдлрд┐рд▓реНрдЯрд░ рдкрд╛рд╕ рдХрд░рдгреНрдпрд╛рдд рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ jsonb рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдлреАрд▓реНрдб.

explain analyze verbose
SELECT count(1)
FROM fdw_schema.table 
WHERE is_active is True
AND created_dt BETWEEN CURRENT_DATE - INTERVAL '7 month' 
AND CURRENT_DATE - INTERVAL '6 month'
AND meta @> '{"source":"test"}'::jsonb;

Aggregate  (cost=245463.60..245463.61 rows=1 width=8) (actual time=6727.589..6727.590 rows=1 loops=1)
  Output: count(1)
  ->  Foreign Scan on fdw_schema."table"  (cost=1100.00..245459.90 rows=1478 width=0) (actual time=16.213..6634.794 rows=1360025 loops=1)
        Output: "table".id, "table".is_active, "table".meta, "table".created_dt
        Filter: (("table".is_active IS TRUE) AND ("table".created_dt >= (('now'::cstring)::date - '7 mons'::interval)) AND ("table".created_dt <= ((('now'::cstring)::date)::timestamp with time zone - '6 mons'::interval)))
        Rows Removed by Filter: 619961
        Remote SQL: SELECT created_dt, is_active FROM fdw_schema.table WHERE ((meta @> '{"source": "test"}'::jsonb))
Planning time: 0.747 ms
Execution time: 6727.815 ms

рдСрдкрд░реЗрдЯрд░ рдлрд┐рд▓реНрдЯрд░ рдХрд░рдгреНрдпрд╛рдРрд╡рдЬреА, рдЖрдкрдг рдПрдХрд╛ рдСрдкрд░реЗрдЯрд░рдЪреА рдЙрдкрд╕реНрдерд┐рддреА рд╡рд╛рдкрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ jsonb рд╡реЗрдЧрд│реНрдпрд╛ рдордзреНрдпреЗ. рдореВрд│ 7 рдРрд╡рдЬреА 29 рд╕реЗрдХрдВрдж jsonb рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░, рдкрд░рдВрддреБ рдпреЗрдереЗ рдПрдХ рдорд░реНрдпрд╛рджрд╛ рд▓рдХреНрд╖рд╛рдд рдШреЗрдгреЗ рдорд╣рддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ: рдЖрдореНрд╣реА рдбреЗрдЯрд╛рдмреЗрд╕рдЪреА рдЖрд╡реГрддреНрддреА 9.6 рд╡рд╛рдкрд░рдд рдЖрд╣реЛрдд, рдкрд░рдВрддреБ рдПрдкреНрд░рд┐рд▓рдЪреНрдпрд╛ рдЕрдЦреЗрд░реАрд╕ рдЖрдореНрд╣реА рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдЪрд╛рдЪрдгреНрдпрд╛ рдкреВрд░реНрдг рдХрд░реВрди рдЖрд╡реГрддреНрддреА 12 рд╡рд░ рдЬрд╛рдгреНрдпрд╛рдЪреА рдпреЛрдЬрдирд╛ рдЖрдЦрдд рдЖрд╣реЛрдд. рдПрдХрджрд╛ рдЖрдореНрд╣реА рдЕрдкрдбреЗрдЯ рдХреЗрд▓реНрдпрд╛рд╡рд░, рддреНрдпрд╛рдЪрд╛ рдХрд╕рд╛ рдкрд░рд┐рдгрд╛рдо рдЭрд╛рд▓рд╛ рдпрд╛рдмрджреНрджрд▓ рдЖрдореНрд╣реА рд▓рд┐рд╣реВ, рдХрд╛рд░рдг рддреЗрдереЗ рдмрд░реЗрдЪ рдмрджрд▓ рдЖрд╣реЗрдд рдЬреНрдпрд╛рд╕рд╛рдареА рдЦреВрдк рдЖрд╢рд╛ рдЖрд╣реЗ: json_path, рдирд╡реАрди CTE рд╡рд░реНрддрди, рдкреБрд╢ рдбрд╛рдЙрди (рдЖрд╡реГрддреНрддреА 10 рдкрд╛рд╕реВрди рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЖрд╣реЗ). рдорд▓рд╛ рдЦрд░реЛрдЦрд░рдЪ рд▓рд╡рдХрд░рдЪ рдкреНрд░рдпрддреНрди рдХрд░рд╛рдпрдЪреЗ рдЖрд╣реЗрдд.

рд╕рдВрдкрд╡реВрди рдЯрд╛рдХ рддреНрдпрд╛рд▓рд╛

рдкреНрд░рддреНрдпреЗрдХ рдмрджрд▓рд╛рдиреЗ рд╡рд┐рдирдВрддреА рдЧрддреАрд╡рд░ рд╡реИрдпрдХреНрддрд┐рдХрд░рд┐рддреНрдпрд╛ рдХрд╕рд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрддреЛ рдпрд╛рдЪреА рдЖрдореНрд╣реА рдЪрд╛рдЪрдгреА рдХреЗрд▓реА. рдЖрддрд╛ рддрд┐рдиреНрд╣реА рдлрд┐рд▓реНрдЯрд░ рдмрд░реЛрдмрд░ рд▓рд┐рд╣рд┐рд▓реНрдпрд╛рд╡рд░ рдХрд╛рдп рд╣реЛрддреЗ рддреЗ рдкрд╛рд╣реВ.

explain analyze verbose
SELECT count(1)
FROM fdw_schema.table 
WHERE is_active = True
AND created_dt >= (SELECT CURRENT_DATE::timestamptz - INTERVAL '7 month') 
AND created_dt <(SELECT CURRENT_DATE::timestamptz - INTERVAL '6 month')
AND meta @> '{"source":"test"}'::jsonb;

Aggregate  (cost=322041.51..322041.52 rows=1 width=8) (actual time=2278.867..2278.867 rows=1 loops=1)
  Output: count(1)
  InitPlan 1 (returns $0)
    ->  Result  (cost=0.00..0.02 rows=1 width=8) (actual time=0.010..0.010 rows=1 loops=1)
          Output: ((('now'::cstring)::date)::timestamp with time zone - '7 mons'::interval)
  InitPlan 2 (returns $1)
    ->  Result  (cost=0.00..0.02 rows=1 width=8) (actual time=0.003..0.003 rows=1 loops=1)
          Output: ((('now'::cstring)::date)::timestamp with time zone - '6 mons'::interval)
  ->  Foreign Scan on fdw_schema."table"  (cost=100.02..322041.41 rows=25 width=0) (actual time=8.597..2153.809 rows=1360025 loops=1)
        Output: "table".id, "table".is_active, "table".meta, "table".created_dt
        Remote SQL: SELECT NULL FROM fdw_schema.table WHERE (is_active) AND ((created_dt >= $1::timestamp with time zone)) AND ((created_dt < $2::timestamp with time zone)) AND ((meta @> '{"source": "test"}'::jsonb))
Planning time: 0.820 ms
Execution time: 2279.087 ms

рд╣реЛрдп, рд╡рд┐рдирдВрддреА рдЕрдзрд┐рдХ рдХреНрд▓рд┐рд╖реНрдЯ рджрд┐рд╕рддреЗ, рд╣реА рд╕рдХреНрддреАрдЪреА рдлреА рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреА рдЧрддреА 2 рд╕реЗрдХрдВрдж рдЖрд╣реЗ, рдЬреА 10 рдкрдЯ рдЕрдзрд┐рдХ рд╡реЗрдЧрд╡рд╛рди рдЖрд╣реЗ! рдЖрдгрд┐ рдЖрдореНрд╣реА рддреБрд▓рдиреЗрдиреЗ рд▓рд╣рд╛рди рдбреЗрдЯрд╛ рд╕реЗрдЯрдЪреНрдпрд╛ рд╡рд┐рд░реВрджреНрдз рд╕рд╛рдзреНрдпрд╛ рдХреНрд╡реЗрд░реАрдмрджреНрджрд▓ рдмреЛрд▓рдд рдЖрд╣реЛрдд. рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рдирдВрддреНрдпрд╛рдВрд╡рд░, рдЖрдореНрд╣рд╛рд▓рд╛ рдХрд┐рддреНрдпреЗрдХ рд╢рдВрднрд░ рдкрдЯ рд╡рд╛рдв рдорд┐рд│рд╛рд▓реА.

рдереЛрдбрдХреНрдпрд╛рдд: рдЬрд░ рддреБрдореНрд╣реА FDW рд╕рд╣ PostgreSQL рд╡рд╛рдкрд░рдд рдЕрд╕рд╛рд▓, рддрд░ рдиреЗрд╣рдореА рд╕рд░реНрд╡ рдлрд┐рд▓реНрдЯрд░ рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдкрд╛рдард╡рд▓реЗ рдЖрд╣реЗрдд рд╣реЗ рддрдкрд╛рд╕рд╛, рдЖрдгрд┐ рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдирдВрдж рд╣реЛрдИрд▓... рдХрд┐рдорд╛рди рдЬреЛрдкрд░реНрдпрдВрдд рддреБрдореНрд╣реА рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░реВрди рдЯреЗрдмрд▓реНрд╕рдордзреНрдпреЗ рд╕рд╛рдореАрд▓ рд╣реЛрдд рдирд╛рд╣реА рддреЛрдкрд░реНрдпрдВрдд. рдкрдг рддреА рджреБрд╕рд░реНтАНрдпрд╛ рд▓реЗрдЦрд╛рдЪреА рдХрдерд╛ рдЖрд╣реЗ.

рдЖрдкрдг рд▓рдХреНрд╖ рджрд┐рд▓реНрдпрд╛рдмрджреНрджрд▓ рдзрдиреНрдпрд╡рд╛рдж! рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдордзреНрдпреЗ рддреБрдордЪреНрдпрд╛ рдЕрдиреБрднрд╡рд╛рдВрдмрджреНрджрд▓ рдкреНрд░рд╢реНрди, рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдЖрдгрд┐ рдХрдерд╛ рдРрдХрд╛рдпрд▓рд╛ рдорд▓рд╛ рдЖрд╡рдбреЗрд▓.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛