рдПрд╕рдХреНрдпреВрдПрд▓: рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдордп

рд╣реИрд▓реЛ, рд░реЗрдбрд┐рдпреЛ рдПрд╕рдХреНрдпреВрдПрд▓ рдлрд┐рд░ рд╕реЗ рд╣рд╡рд╛ рдореЗрдВ рд╣реИ! рдЧреИрдВрдЧреНрд▓рд┐рдпрд╛ рдХреЛ рдЬрд╛рдиреЗрдВ, рд╕реНрдпреВрдбреЛрдлреЛрдбрд┐рдпрд╛ (рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд?) рдлреИрд▓рд╛рдПрдВ рдФрд░ рд╣рдорд╛рд░реА рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рд▓рд╣рд░ рдореЗрдВ рдЯреНрдпреВрди рдХрд░реЗрдВред


рдкрд┐рдЫрд▓реА рдмрд╛рд░, рдореИрдВ рдУрд▓рдВрдкрд┐рдпрд╛рдб рдПрд╕рдХреНрдпреВрдПрд▓ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд┐рдВрдЧ ( https://habr.com/en/post/359064/ ) рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рдЕрд╕реНрдерд┐рд░ рдерд╛, рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬреАрд╡рди рдХреЗ рдХрд╛рдлреА рдХрд░реАрдм рдирд╣реАрдВ рдерд╛ред рдЬреИрд╕реЗ рдХрд┐ рдЯреИрдЧ "рдЕрд╕рд╛рдорд╛рдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ" рдФрд░ "рдУрд▓рдВрдкрд┐рдХ" рдЦреБрдж рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмреЛрд▓рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЛрдИ рднреА рдЯреИрдЧ рдирд╣реАрдВ рдкрдврд╝рддрд╛ рд╣реИ! рдлрд┐рд░ рднреА, рдореИрдВ рдЕрджреНрднреБрдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ SQL рдореЗрдВ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╡рд┐рд╖рдп рдХреЛ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛ред рдХреНрдпреЛрдВрдХрд┐ рдкрдВрдЬреЗ (рдЦреБрдЬрд▓реА)ред

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

рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрддрд╛рддрд╛ рд╣реВрдВред

рдЗрд╕рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рд╕рдорд╛рдкреНрддрд┐ рдХреА рддрд┐рдерд┐-рд╕рдордп (рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг) рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрдИ рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рд╣реИрдВ:

with periods(id, start_time, stop_time) as ( values(1, '2019-03-29 07:00:00'::timestamp, '2019-04-08 14:00:00'::timestamp), (2, '2019-04-10 07:00:00'::timestamp, '2019-04-10 20:00:00'::timestamp), (3, '2019-04-11 12:00:00'::timestamp, '2019-04-12 16:07:12'::timestamp), (4, '2018-12-28 12:00:00'::timestamp, '2019-01-16 16:00:00'::timestamp) ) 

рдХрд╛рдо рдХреЗ рдШрдВрдЯреЛрдВ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЕрдВрддрд░рд╛рд▓ рдХреА рдЕрд╡рдзрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ SQL рдХреНрд╡реЗрд░реА (c) рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рд╕реЛрдорд╡рд╛рд░ рд╕реЗ рд╢реБрдХреНрд░рд╡рд╛рд░ рддрдХ рд╕рдкреНрддрд╛рд╣ рдХреЗ рджрд┐рдиреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдХрд╛рдо рдХреЗ рдШрдВрдЯреЗ рд╣рдореЗрд╢рд╛ 10:00 рд╕реЗ 19:00 рддрдХ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд░реВрд╕реА рд╕рдВрдШ рдХреЗ рдЙрддреНрдкрд╛рджрди рдХреИрд▓реЗрдВрдбрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХрдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЫреБрдЯреНрдЯрд┐рдпрд╛рдВ рд╣реИрдВ рдЬреЛ рдХрд╛рдо рдХреЗ рджрд┐рди рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рджрд┐рди рдмрдВрдж рд╣реИрдВ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЙрдиреНрд╣реАрдВ рдЫреБрдЯреНрдЯрд┐рдпреЛрдВ рдХреЗ рд╕реНрдердЧрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдХрд╛рдо рдХреЗ рджрд┐рди рд╣реИрдВред рдкреВрд░реНрд╡-рдЫреБрдЯреНрдЯреА рдХреЗ рджрд┐рдиреЛрдВ рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдкреВрд░рд╛ рдорд╛рдирддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдЫреБрдЯреНрдЯрд┐рдпрд╛рдВ рд╕рд╛рд▓-рджрд░-рд╕рд╛рд▓ рдмрджрд▓рддреА рд░рд╣рддреА рд╣реИрдВ, рдпрд╛рдиреА рд╕реНрдкрд╖реНрдЯ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ, рд╣рдо рдХреЗрд╡рд▓ 2018 рдФрд░ 2019 рддрдХ рдЦреБрдж рдХреЛ рд╕реАрдорд┐рдд рд░рдЦреЗрдВрдЧреЗред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд╕рдорд╛рдзрд╛рди рдЖрд╕рд╛рдиреА рд╕реЗ рдкреВрд░рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдкреАрд░рд┐рдпрдбреНрд╕ рд╕реЗ рд╢реБрд░реБрдЖрддреА рдкреАрд░рд┐рдпрдб рддрдХ рдХрд╛рдо рдХреЗ рдШрдВрдЯреЗ рдореЗрдВ рдПрдХ рдХреЙрд▓рдо рдЬреЛрдбрд╝рдирд╛ рдЬрд░реВрд░реА рд╣реИред рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдо рд╣реИ:

  id | start_time | stop_time | work_hrs ----+---------------------+---------------------+---------- 1 | 2019-03-29 07:00:00 | 2019-04-08 14:00:00 | 58:00:00 2 | 2019-04-10 07:00:00 | 2019-04-10 20:00:00 | 09:00:00 3 | 2019-04-11 12:00:00 | 2019-04-12 16:07:12 | 13:07:12 4 | 2018-12-28 12:00:00 | 2019-01-16 16:00:00 | 67:00:00 

рд╣рдо рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ; рд╣рдо рд╣рдореЗрд╢рд╛ start_time <= stop_time рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ ред

PostgreSQL рдХреЗ рд╡рд┐рд╢реЗрд╖ SQL рдмреЛрд▓реА рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд░реНрддреЛрдВ рдХреА рдкреВрд░реНрдг рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрд╡реЗрд░реА рдХреЛ PostgreSQL рд╕рдВрд╕реНрдХрд░рдг 10 рдпрд╛ рдЙрд╕рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдХ рдорд╣реАрдиреЗ рдореЗрдВ рдХрд╛рд░реНрдп рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╣реЛрдЧрд╛ред рдореИрдВ рдХреЛрдИ рднреА рдирд┐рд░реНрдгрдп рдирд╣реАрдВ рд▓рд╛рддрд╛, рддрд╛рдХрд┐ рдореЗрд░реЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрддреНрд╕рд╛рд╣рди рд╣реЛред рд╣рдо рдХреГрдкрдпрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ - рдХреЛрдб рдХреЛ рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рдиреАрдЪреЗ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд░рдЦреЗрдВ!

рдЕрдВрддрд┐рдо рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдирд╣реАрдВ ред рдЕрдЧрд░ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдкреНрд░реЛрдлреЗрд╢рдирд▓ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдмреНрд▓реЙрдЧ рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рд╣рдо рдХреБрдЫ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдЕрдЪреНрдЫрд╛рдЗрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ: рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП, рд╣рдо PGConf.Russia 2020 рдХреА рдореБрдлреНрдд рдпрд╛рддреНрд░рд╛ рдХрд░реЗрдВрдЧреЗред рдмреНрдпрд╛рдЬ рдХреА рдХрд╕реМрдЯреА рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореЗрд░реА рд╣реЛрдЧреА, рд╕рд╛рде рд╣реА рдЙрди рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреА рдЬрд┐рдирдХреЗ рд╕рд╛рде рдореИрдВ рдкрд░рд╛рдорд░реНрд╢ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╕рдордЭрддрд╛ рд╣реВрдВред рд╕реМрднрд╛рдЧреНрдп рд╣реИ

рдЕрджреНрдпрддрди! рдХреБрдЫ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдХрд╛рдо рдХреЗ рдШрдВрдЯреЗ рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрд┐рдирд╛ рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдорд┐рдирдЯ рдордд рднреВрд▓рдирд╛! рдореИрдВрдиреЗ рд╢реБрд░реБрдЖрддреА рдЕрдВрддрд░рд╛рд▓ рдФрд░ рдорд┐рдирдЯреЛрдВ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдкрд░ рдЬреЛрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд┐рдд рдЙрддреНрддрд░ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ред

UPDATE2 рд╕рд╛рд░рд╛рдВрд╢: https://habr.com/en/company/postgrespro/blog/457722/ ред

Source: https://habr.com/ru/post/hi448368/


All Articles