Microservice рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рдСрди-рд▓рд╛рдЗрди рд╡рд┐рд╢реНрд▓реЗрд╖рдг: рдорджрдж рдФрд░ рд╕реБрдЭрд╛рд╡ FDW FD ╨╕ рдкреЛрд╕реНрдЯ рдкреЛрд╕реНрдЯ ╠╢╨┐╠╢╤А╠╢╨╛╠╢╤Б╠╢╤В╠╢╨╕╠╢╤В ╨╕╤Мes

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


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

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

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


рдПрдХ 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 рдорд┐рд▓рд┐рдпрди рд▓рд╛рдЗрдиреЛрдВ рддрдХ рдлреИрд▓реА рд╣реБрдИ рд╣реИ, рдХреЗрд╡рд▓ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдмрд╛рдж рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдлрд╝рд┐рд▓реНрдЯрд░ рд▓рд╛рдЗрди) рдФрд░ рдПрдХрддреНрд░реАрдХрд░рдг рдХрд░реЗрдВред рд╕рдлрд▓рддрд╛ рдХреА рдХреБрдВрдЬреА рдПрдХ рдЕрдиреБрд░реЛрдз рд▓рд┐рдЦрдирд╛ рд╣реИ рддрд╛рдХрд┐ рдлрд╝рд┐рд▓реНрдЯрд░ рджреВрд░рд╕реНрде рдорд╢реАрди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рдПрдВ, рдФрд░ рд╣рдо рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдФрд░ рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВред

рд╡рд╣ рдХреБрдЫ рдмреВрд▓рд┐рдпрдирд╢реАрдЯ рд╣реИ


рдмреВрд▓рд┐рдпрди рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рдореВрд▓ рдЕрдиреБрд░реЛрдз рдореЗрдВ, рд╕рдорд╕реНрдпрд╛ рдХреА рд╡рдЬрд╣ рд╕реЗ рдерд╛ рд╣реИ рдмрдпрд╛рди ред рдпрджрд┐ рд╣рдо рдЗрд╕реЗ = рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддреЗ рд╣реИрдВ:

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 рд╕реЗрдХрдВрдб рддрдХ рдХрдо рд╣реЛ рдЧрдпрд╛ред

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣ рдСрдкрд░реЗрдЯрд░ = рдСрдкрд░реЗрдЯрд░ рд╕реЗ рднрд┐рдиреНрди рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╢реВрдиреНрдп рдорд╛рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдлрд╝рд┐рд▓реНрдЯрд░ рдореЗрдВ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ , рдЧрд▓рдд рдФрд░ рдЕрд╢рдХреНрдд рдЫреЛрдбрд╝ рджреЗрдЧрд╛, рдЬрдмрдХрд┐ ! = рд╕рддреНрдп рдХреЗрд╡рд▓ рдЭреВрдареА рдХреЛ рдЫреЛрдбрд╝ рджреЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЬрдм рдСрдкрд░реЗрдЯрд░ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рддреЛ OR рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рджреЛ рд╢рд░реНрддреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, WHERE (col! = True) OR (col is null) ред

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

timestamptz? рд╣рд░реНрдЯреНрдЬ


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

рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж! рдореБрдЭреЗ рд╕рд╡рд╛рд▓реЛрдВ, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЖрдкрдХреЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

All Articles