рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рдСрдкрд░реЗрд╢рдирд▓ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕: рдорджрдж рдФрд░ рд╕рдВрдХреЗрдд рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдПрдлрдбреАрдбрдмреНрд▓реНрдпреВ

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

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

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдордиреЗ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ред рдПрдХ рдкреВрд░реНрдг рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рдерд╛ - рд╣рдордиреЗ рдХреЛрд╢рд┐рд╢ рднреА рдХреА, рд▓реЗрдХрд┐рди, рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдХрд╣реЗрдВ рддреЛ, рд╣рдо рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдиреЗ рдФрд░ рдЙрд╕рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреА рдзреАрдореА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рддрд░реНрдХ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рджреЛрд╕реНрддреА рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдереЗ ( рдпрджрд┐ рдХреЛрдИ рд╕рдлрд▓ рд╣реБрдЖ, рддреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВ рдХрд┐ рдХреИрд╕реЗ)ред рдЖрдк рд╡рд┐рд╢реНрд▓реЗрд╖рдХреЛрдВ рд╕реЗ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ: "рджреЛрд╕реНрддреЛрдВ, рдкрд╛рдпрдерди рд╕реАрдЦреЗрдВ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рдЬрд╛рдПрдВ," рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рднрд░реНрддреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЗрд╕рд╕реЗ рдмрдЪрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдордиреЗ FDW (рдлреЙрд░реЗрди рдбреЗрдЯрд╛ рд░реИрдкрд░) рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдПрдХ рдорд╛рдирдХ dblink рд╣реИ, рдЬреЛ SQL рдорд╛рдирдХ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рдеред рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдордиреЗ рдПрдХ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдЬреЛ рдЕрдВрддрддрдГ рдЬрдбрд╝ рд╣реЛ рдЧрдпрд╛, рд╣рдо рдЙрд╕ рдкрд░ рдХрд╛рдпрдо рд░рд╣реЗред рдЗрд╕рдХрд╛ рд╡рд┐рд╡рд░рдг рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдмрд╣реБрдд рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рд╕реЗ рд▓реЗрдХрд░ рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдФрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рддрд┐рд░реВрдкрдг рддрдХред рдпрд╣ рднреА рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рд╕рдорд╛рдзрд╛рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИред

рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрддрд╛ рд╣реИ:

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

рдпрджрд┐ рд╕рдм рдХреБрдЫ рдЗрддрдиреА рдЬрд▓реНрджреА рдФрд░ рд╕рд░рд▓рддрд╛ рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛, рддреЛ, рд╢рд╛рдпрдж, рд▓реЗрдЦ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрддрд╛ред

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬрд╝ рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред рдпрд╣ рддрд░реНрдХрд╕рдВрдЧрдд рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рд▓реЛрдЧ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ: рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬрд╝ рдХреНрд╡реЗрд░реА рдХреЛ рдЙрди рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдВрддрд┐рдо рдЧрдгрдирд╛ рд╕реНрд╡рдпрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рдХрд╛рдлреА рд╣рдж рддрдХ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧреА рдХрд┐ рдХреИрд╕реЗ рдпрд╣ рд▓рд┐рдЦрд╛ рд╣реИред рдпрд╣ рднреА рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: рдЬрдм рдбреЗрдЯрд╛ рдХрд┐рд╕реА рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рд╕реЗ рдЖрддрд╛ рд╣реИ, рддреЛ рдЙрдирдХреЗ рдкрд╛рд╕ рдЗрдВрдбреЗрдХреНрд╕ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдРрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╢реЗрдбреНрдпреВрд▓рд░ рдХреА рдорджрдж рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП, рдХреЗрд╡рд▓ рд╣рдо рд╣реА рдЗрд╕рдХреА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реБрдЭрд╛рд╡ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдореИрдВ рдЗрд╕реА рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЕрдиреБрд░реЛрдз рдФрд░ рдЙрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдпреЛрдЬрдирд╛

рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬрд╝ рдПрдХ рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рдкрд░ 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 рдСрдкрд░реЗрдЯрд░ рд╕реЗ рднрд┐рдиреНрди = рд╡рд╣ рдЬреЛ рд╢реВрдиреНрдп рдорд╛рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реИ рдлрд╝рд┐рд▓реНрдЯрд░ рдореЗрдВ рдорд╛рди рдЧрд▓рдд рдФрд░ рд╢реВрдиреНрдп рдЫреЛрдбрд╝ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рдЬрдмрдХрд┐ != рд╕рддреНрдп рдХреЗрд╡рд▓ рдЧрд▓рдд рдорд╛рди рдЫреЛрдбрд╝реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдСрдкрд░реЗрдЯрд░ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рдирд╣реАрдВ рд╣реИ рдЖрдкрдХреЛ OR рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдлрд╝рд┐рд▓реНрдЯрд░ рдореЗрдВ рджреЛ рд╢рд░реНрддреЗрдВ рдкрд╛рд╕ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╣рд╛рдБ (col != True) рдпрд╛ (col рд╢реВрдиреНрдп рд╣реИ).

рдмреВрд▓рд┐рдпрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдХрд░, рдЖрдЧреЗ рдмрдврд╝реЗрдВред рдЗрд╕ рдмреАрдЪ, рдЖрдЗрдП рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдкреНрд░рднрд╛рд╡ рдкрд░ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреВрд▓рд┐рдпрди рдорд╛рди рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдЙрд╕рдХреЗ рдореВрд▓ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рдПрдБред

рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдкрдЯреНрдЬрд╝? рд╣рд░реНрдЯреНрдЬ

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдкрдХреЛ рдЕрдХреНрд╕рд░ рдпрд╣ рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреНрд╡реЗрд░реА рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреИрд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдП рдЬрд┐рд╕рдореЗрдВ рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдпрд╣ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдвреВрдВрдврд╝рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓ рд╕рдХрддреА рд╣реИ. рдЗрд╕рд▓рд┐рдП, рдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рд╣рдордиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рджрд┐рдирд╛рдВрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдПрдХ рдзрдорд╛рдХреЗ рдХреЗ рд╕рд╛рде рдПрдХ рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рдкрд░ рдЙрдбрд╝ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рд╣рдо рджрд┐рдирд╛рдВрдХ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрднреА() рдпрд╛ CURRENT_DATE, рддреЛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдЬреЛрдбрд╝рд╛ рд╣реИ рддрд╛рдХрд┐ create_at рдХреЙрд▓рдо рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдареАрдХ 1 рдорд╣реАрдиреЗ рдХрд╛ рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛ (CURRENT_DATE - рдЕрдВрддрд░рд╛рд▓ '7 рдорд╣реАрдиреЗ' рдФрд░ CURRENT_DATE - рдЕрдВрддрд░рд╛рд▓ '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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ