MERGE рдХреА рд▓рдбрд╝рд╛рдИред рдирд┐рд╖реНрдХрд░реНрд╖ рдФрд░ рдиреИрддрд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рдХреНрд░реЙрдирд┐рдХрд▓

рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рддрд┐рдмрджреНрдз рддреНрдпреМрд╣рд╛рд░ рд╕реЗ рдХреБрдЫ рд╣рдлреНрддреЗ рдкрд╣рд▓реЗ - рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓ 11 рдХреЗ feature freeze рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ - рд╣реИрдХрд░реНрд╕ рдиреНрдпреВрдЬрд╝рд▓реЗрдЯрд░реНрд╕, рдмрд╛рдПрдВ рдкреИрдХреЗрдЬ рдореЗрдВ рдЪрд┐рдкрд╕реЗрдЯ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рддреЗ рд╣реБрдП, MERGE рдереНрд░рд┐рд▓рд░ рджреЗрдЦрд╛ред рдереНрд░рд┐рд▓рд░ рдирд┐рд░реНрджреЗрд╢рдХ рдФрд░ 2ndQuadrant рдХреЗ рд╕реАрдИрдУ , рд╕рд╛рдЗрдорди рд░рд┐рдЧреНрд╕ , рдиреЗ рдПрдХ рдкреИрдЪ рдХреЛ рдзрдХреНрдХрд╛ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬреЛ MERGE рдХрдорд╛рдВрдб рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рджреГрдврд╝рддрд╛ рдФрд░ рд╕рд░рд▓рддрд╛ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд░рд┐рдЧреНрд╕ 2009 рд╕реЗ рдПрдХ рдХреЙрдореЗрдбрд┐рдпрди рд╣реИрдВ, рдФрд░ рдПрдХ рдХреЙрдореЗрдбрд┐рдпрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдкреИрдЪ рдЕрдкреАрдпрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╣ рдХреЛрдИ рдХрдо рд╕рдореНрдорд╛рдирд┐рдд PostgreSQL рд╕рдорд┐рддрд┐рдпреЛрдВ рдФрд░ рджрд┐рдЧреНрдЧрдЬреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬреБрдиреВрди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрднрд░ рд░рд╣реЗ рдереЗ, рдпрд╣ рд╕реАрдзреЗ рдЕрдкрдорд╛рди рднреА рдирд╣реАрдВ рдЖрдпрд╛ рдерд╛ - рдХрдИ рдШрд░реЗрд▓реВ рдордВрдЪреЛрдВ рдореЗрдВ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рддрдереНрдпред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреБрдЫ рддрдирд╛рд╡ рддрдм рддрдХ рдмрдирд╛ рд░рд╣рд╛ рдЬрдм рд╕рд╡рд╛рд▓ рд╕реБрд▓рдЭрд╛ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред

рд▓реЗрдХрд┐рди рдЬреБрдиреВрди рдЬреБрдиреВрди рд╣реИрдВ (рдЙрдирдХреА рдЖрдЧреЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреА), рдФрд░ рдореИрдВ рдЗрд╕ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджреВрд░ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╛рд░ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред


рдмрд╛рд╣рд░ рдХреА рддрд░рдл


рдпрджрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд░рд▓ рд╣реИ, рддреЛ рдмрд╛рдд рдпрд╣ рд╣реИ: рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдлрд╝реАрд▓реНрдб рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде 2 рдЯреЗрдмрд▓ рд╣реИрдВред рдирд╛рдо рдФрд░ рдЖрдпреБ рдорд╛рди рд▓реЗрдВред рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдореЗрдВ рдорд┐рд▓рд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рддрдп рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрди рд╡реНрдпрдХреНрддрд┐рддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рджреЛрдиреЛрдВ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╣реИрдВред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдВрддрд┐рдо рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдорд┐рд▓рд╛рди рд╡рд╛рд▓реЗ рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬрд╛рдирдХрд╛рд░реА рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рднреА рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рд╣реИред рдпрд╣ MERGE рдмрд┐рдирд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рдЬрдЯрд┐рд▓ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдЯреНрд░рд┐рдЧрд░реНрд╕ рдФрд░ рдЗрддрдиреЗ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, MERGE рдХрд╛ рдЧреИрд░-рд╡рд┐рд╣рд┐рдд рд╕рдВрд╕реНрдХрд░рдг, рдЬрд┐рд╕реЗ UPSERT (UPdate + inSERT) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред

MERGE рдСрдкрд░реЗрдЯрд░ SQL-2003 рдорд╛рдирдХ рдореЗрдВ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА SQL-2008 рдореЗрдВ рдЕрдкрдиреА рд╕рднреА рдорд╣рд┐рдорд╛ рдореЗрдВ рд╣реИред рдЗрд╕реЗ Oracle, DB2 рдФрд░ MS SQL рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ MERGE рдХреА рдХрдореА рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░реЗрдЧреА рдЬреЛ рдЗрди DBMSs рд╕реЗ PostgreSQL рдореЗрдВ рдЬрд╛рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╕рд╛рдЗрдорди рд░рд┐рдЧреНрд╕ рдХреА рд▓рд╛рд▓рд╕рд╛ рдХреА рдЗрдЪреНрдЫрд╛ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА PostgreSQL 11 рдореЗрдВ, 2ndQuadrant рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рдЗрдЪреНрдЫрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдФрд░ рдорд╣рддреНрд╡рд╛рдХрд╛рдВрдХреНрд╖рд╛ рдпрд╛ рдЭрдЧрдбрд╝реЗ рд╕реЗ рдирд╣реАрдВред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, MERGE рдореЗрдВ рд╕рдореГрджреНрдз рдХреНрд╖рдорддрд╛рдПрдВ рд╣реИрдВ, рдбреЗрдЯрд╛ рдХреЛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ рдирд╣реАрдВ рд▓реЗрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╕рдорд╛рди рд▓реЛрдЧреЛрдВ рд╕реЗред

рдХрдорд╛рдВрдб рд╕рд┐рдВрдЯреИрдХреНрд╕ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:

  MERGE INTO tablename USING table_reference ON (condition) WHEN MATCHED THEN UPDATE SET column1 = value1 [, column2 = value2 ...] WHEN NOT MATCHED THEN INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...]); 

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 MERGE [hint] INTO [schema .] {table | view} [table_alias] USING { subquery | [schema .] { table | view}} [table_alias] ON ( condition ) [ merge_update_clause ] [ merge_insert_clause ] [ error_logging_clause ] ; 

рдпрд╣ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдУрд░реЗрдХрд▓ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рдмреНрджреЛрдВ рдореЗрдВ, рддрдм MERGE рдХреНрд░рд┐рдпрд╛рдПрдБ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╣реА SQL рдХрдорд╛рдВрдб рдореЗрдВ data_source рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рдХреНрд╖реНрдп рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ target_table_name, рдЬреЛ рд╢рд░реНрддреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, INSERT, UPDATE рдпрд╛ DELETE рдХреЛ target_table_name рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, target_table_name рдПрдХ рджреГрд╢реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ data_source рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдпрд╛ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ , рдПрдХ рд╕рдмрдХреНрд╡реЗрд░реА рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, MERGE , data_source рдкрд░ data_source рд╕рд╛рде рдПрдХ left outer join рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ 0 рдпрд╛ рдЕрдзрд┐рдХ рдХреИрдВрдбрд┐рдбреЗрдЯ рдЪреЗрдВрдЬ рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ; рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреНрд░рдо рдореЗрдВ рдЧрдгрдирд╛ WHEN рдЬрд╛рддреА рд╣реИ; рдЬреИрд╕реЗ рд╣реА рд╕реНрдерд┐рддрд┐ рд╕рдВрддреБрд╖реНрдЯ рд╣реЛрддреА рд╣реИ, рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЬрд╛рддреА рд╣реИред WHEN [NOT] MATCH THEN SQL рдореЗрдВ рдХреАрд╡рд░реНрдб WHEN [NOT] MATCH THEN , рддреЛ рдпрд╣ рдмрд╣реБрдд рд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рдирд┐рдпрдВрддреНрд░рдг рдирд┐рд░реНрдорд╛рдг рд╣реИ рдЬреИрд╕реЗ if-else рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВред MERGE рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ UPDATE, INSERT рдпрд╛ DELETE target_table_name рд╕рдВрдмрдВрдз рдореЗрдВ рд╣реИ, рдХреЗрд╡рд▓ рдкреВрд░реЗ рдХрдорд╛рдВрдб рдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЕрд▓рдЧ рд╣реИред

ON рд╕рд╛рде рдПрдХ рдХреНрд▓реЙрдЬрд╝ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдХреЗ рд╕рднреА рд╕реНрддрдВрднреЛрдВ рдкрд░ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛, рдпрджрд┐ рдЕрдиреНрдп рдХреЙрд▓рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рдЕрджреНрд╡рд┐рддреАрдп рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдЕрдиреНрдп рд▓реЗрдирджреЗрди рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП [NOT] MATCHED рддреБрд░рдВрдд рдЙрдореНрдореАрджрд╡рд╛рд░ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдВред

MERGE рдирд┐рд░реНрдзрд╛рд░рдХ рдХрдорд╛рдВрдб: рдЖрдк рдПрдХ рд╣реА рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдПрдХ рд╣реА MERGE рдХрдорд╛рдВрдб рдореЗрдВ рдХрдИ рдмрд╛рд░ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:

 MERGE CustomerAccount CA USING RecentTransactions T ON T.CustomerId = CA.CustomerId WHEN MATCHED THEN UPDATE SET Balance = Balance + TransactionValue WHEN NOT MATCHED THEN INSERT (CustomerId, Balance) VALUES (T.CustomerId, T.TransactionValue); 

рдпрд╛ рдПрдХ рдЙрдкрд╢реНрд░реЗрдгреА рдХреЗ рд╕рд╛рде:

 MERGE INTO bonuses D USING (SELECT employee_id, salary, department_id FROM employees WHERE department_id = 80) S ON (D.employee_id = S.employee_id) WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01 DELETE WHERE (S.salary > 8000) WHEN NOT MATCHED THEN INSERT (D.employee_id, D.bonus) VALUES (S.employee_id, S.salary*.01) WHERE (S.salary <= 8000); 

IBM DB2 рдореЗрдВ, рд╕рд┐рдВрдЯреИрдХреНрд╕ рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ , "рд╣реБрдб рдХреЗ рдиреАрдЪреЗ" рдпрд╣ рд╕рдорд╛рди рд░реВрдк рд╕реЗ UPDATE FROM рдирд┐рд░реНрдорд╛рдг UPDATE FROM рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
2008 рд╕реЗ, MS SQL рдореЗрдВ MERGE рднреА рд╣реИ ред

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

рдпреВрдкреАрдПрд╕рдИрдЖрд░рдЯреА, рд╕реНрдпреВрдбреЛ-рдореЗрд░реЗрдЬ


рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ DBMS рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕рдордЭреМрддрд╛ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рдереЗ, рд╕рдЪрдореБрдЪ рдорд╛рдирдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рд░рд╣реЗ рдереЗред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдкреНрд▓рд╕ рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рд╣реИред рдЖрдк рдЙрди рддрдВрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ DBMS рдХреЗ рд▓рд┐рдП рдЬреИрд╡рд┐рдХ рд╣реИрдВ, рдЖрдк рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдорд╛рдирддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, MySQL рдореЗрдВ рдПрдХ REPLACE рдХрдорд╛рдВрдб рд╣реИ рдЬреЛ INSERT рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдирдИ рдФрд░ рдкреБрд░рд╛рдиреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ PRIMARY KEY рдпрд╛ UNIQUE рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рд╕рдорд╛рди рдорд╛рди рд╣реИрдВ, рддреЛ рдирдпрд╛ рдбрд╛рд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреБрд░рд╛рдиреА рдкрдВрдХреНрддрд┐ рдХреЛ рдорд╛рд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди INSERT ... ON DUPLICATE KEY UPDATE рдЬрд╣рд╛рдБ INSERT рдФрд░ UPDATE рд╣реЛрддреЗ рд╣реИрдВ (рдмрдЬрд╛рдп REPLACE рдореЗрдВ DELETE )ред рдпрд╣ UPSERT ред рдФрд░ INSERT IGNORE , рдЬреЛ рдЯрд╛рд░рдЧреЗрдЯ рдЯреЗрдмрд▓ рдкрд░ рдХреБрдЫ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рддрд╣рдд рдПрдХ рддреНрд░реБрдЯрд┐ (рд▓реЗрдХрд┐рди рдЪреЗрддрд╛рд╡рдиреА) рдлреЗрдВрдХрдиреЗ рдХреЗ рдмрд┐рдирд╛, рдХреЗрд╡рд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

PG MERGE рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕


PostgreSQL рд╕рдореБрджрд╛рдп рдореЗрдВ, MERGE рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд 2005 рдореЗрдВ рд╢реБрд░реВ рд╣реБрдИ рдЬрдм Jaime Casanova рдиреЗ рдкреВрдЫрд╛ рдХрд┐ рдХреНрдпрд╛ рд╕рдореБрджрд╛рдп рдореЗрдВ рдХрд┐рд╕реА рдиреЗ MERGE рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ ред рдкреАрдЯрд░ рдПрд╕реЗрдиреНрдЯреНрд░реМрдЯ рдиреЗ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рдХреНрдпрд╛ PostgreSQL рдХреЛ MERGE рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: MySQL рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рдорд╛рди, рдпрд╛ Oracle рд╕реЗ MERGE рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣рд▓реНрдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреНрдпрд╛ рдЗрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ?

рдПрдХ рдЫреЛрдЯреА рдЪрд░реНрдЪрд╛ рдХреЗ рдмреАрдЪ рдореЗрдВ, рдЗрд╕ рдХрдерд╛ рдХреЗ рдирд╛рдпрдХ рд╕рд╛рдЗрдорди рд░рд┐рдЧреНрд╕ рд╢рдмреНрдж рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ:
MERGE, OLTP рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдФрд░ DW (рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ - рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕, рдпрд╛рдиреА рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдЬрд╣рд╛рдБ рдЬрдЯрд┐рд▓ рдкреНрд░рд╢реНрди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛рддреНрдордХ рд╡рд╛рддрд╛рд╡рд░рдг рдФрд░ рдбреЗрдЯрд╛ рд╢рд╛рдпрдж рд╣реА рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рд╡реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдорддреМрд░ рдкрд░ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ <> <>> рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред) рд╣рдо MERGE рдХреЛ COPY FROM рдХреЗ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

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

рдмреНрд░реВрд╕ рдореЛрдореНрдЬрд┐рдпрди рдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрд▓рдЧ, рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ: рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ MERGE рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдмрд╛рдХреА рдореЗрдВ рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрдВрдЧреЗ (рдФрд░ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рдкреВрд░реА рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛)ред рдФрд░ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдФрд░ рд╣рдо рд╕реЛрдЪреЗрдВрдЧреЗ рдХрд┐ рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдмрд░реНрдл рдЯреВрдЯ рдЪреБрдХреА рд╣реИ


2008 рдореЗрдВ, рд╕рд╛рдЗрдорди рд░рд┐рдЧреНрд╕ рдиреЗ рдлрд┐рд░ рд╕реЗ MERGE рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рдЖрдЧреНрд░рд╣ рдХрд┐рдпрд╛ - рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рддрд░реАрдХреЗ (рддрдм рддрдХ SQL-2008 рдорд╛рдирдХ рдореЗрдВ MERGE рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг, рдЬреЛ рдЕрднреА рднреА рдорд╕реМрджрд╛ рд╣реИ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИ)ред рд╡рд╣ рдЙрд╕ рд╕рдордп рдУрд░реЗрдХрд▓, рдЖрдИрдмреАрдПрдо рдФрд░ рдПрдордПрд╕ SQL тАЛтАЛрдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ MySQL рдФрд░ Teradata рд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкреЗрдВрдЯ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рджрд┐рд╢рд╛ рдореЗрдВ 2ndQuadrant рдореЗрдВ рдХрд╛рдо рдХреА рд╢реБрд░реБрдЖрдд рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИред

рдкреАрдЯрд░ рдЖрдЗрд╕реЗрдирдЯреНрд░рд╛рдЯ рдЕрдкрдиреЗ рдмреНрд▓реЙрдЧ рдкрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ : рдмреЗрд╢рдХ, рд░рд┐рдЧреНрд╕ рд╕рдмрд╕реЗ рдпреЛрдЧреНрдп рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИрдВ, рд╡рд╣ MERGE рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдХрд╛рдо рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдкрд╣рд▓рд╛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдореЛрдбрд╝ рдЖрддрд╛ рд╣реИ: рдПрдХ рдЫрд╛рддреНрд░ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ - рдЬреАрдПрд╕рдУрд╕реА рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдПрдХ рднрд╛рдЧреАрджрд╛рд░, рдпрд╛рдиреА рдХреЛрдб рдХрд╛ Google рдЧреНрд░реАрд╖реНрдордХрд╛рд▓реАрдиред рдЙрд╕рдХрд╛ рдирд╛рдо рдмреЙрдХреНрд╕реБрдЖрди Bxzhai рд╣реИ - рдореИрдВ рдЕрдВрддрд┐рдо рдирд╛рдо рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдорд╛рдирддрд╛ рд╣реВрдВред рдЬрд▓реНрдж рд╣реА рд╡рд╣ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХрд╛рдо рд▓рдЧрднрдЧ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рд▓рдЧрднрдЧ рдЧрд┐рдирддреА рдирд╣реАрдВ рд╣реИред 2ndQuadrant рдХреЗ рдЧреНрд░реЗрдЧ рд╕реНрдорд┐рде (рдпрд╛рдиреА рд╕рд╛рдЗрдорди рд░рд┐рдЧреНрд╕ рд╕рд╣рдпреЛрдЧреА) рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХреЛрдб рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдзрд╛ рджрд░реНрдЬрди рдЧрдВрднреАрд░ рдЕрдирд╕реБрд▓рдЭреЗ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред рдореИрдВ рдХреНрд╖реБрджреНрд░ рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреБрдк рд╣реВрдБред рдХрдореЗрдЯреА рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдПрдВ рдмрд╣реБрдд рдЧрд╣рд░реА рд╣реИрдВред рдЗрд╕ рдмреАрдЪ, рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдмреЙрдХреНрд╕реБрдЖрди рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕реБрдирд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо рдЙрд╕рдХреА рдорджрдж рдХрд░ рд╕рдХрддреЗ рдереЗ, рд▓реЗрдХрд┐рди рд╡рд╣ рдХрд╣рд╛рдВ рд╣реИ? рдХрд┐рд╕рдореЗрдВ рд╣реИ рдЬрд╛рди?

2014 рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрдереЛрдВ рдХреА рдЪрд░реНрдЪрд╛ рдлрд┐рд░ рд╕реЗ рднрдбрд╝рдХреА , рд▓реЗрдХрд┐рди рдлрд┐рд░ рдХреБрдЫ рдирд╣реАрдВ рд╣реБрдЖ: рдХреЛрдИ рдХреЛрдб рдирд╣реАрдВ рд╣реИред

рдЕрдВрдд рдореЗрдВ, 2017 рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ , рд╕рд╛рдЗрдорди рд░рд┐рдЧреНрд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
рдореИрдВ MERGE рдХреЛ PostgreSQL рд╕рдВрд╕реНрдХрд░рдг 11 рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╣рдо рдЙрд╕реА рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░ рд░рд╣реЗ INSERT ON CONFLICT рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдХрд┐рд╕реА рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдБрдЪреЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛ, рдореВрд▓ рд░реВрдк рд╕реЗ рдЬреЛ рдЙрдкрд▓рдмреНрдз рд╣реИ рдЙрд╕рдХреЗ рдКрдкрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд▓рд╛рдЧреВ рдХрд░рдирд╛ред рд▓реЗрдХрд┐рди рдореИрдВ рдЦрд░реЛрдВрдЪ рд╕реЗ рдЕрдкрдирд╛ рдХреЛрдб рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рдореИрдВ рдкрд┐рдЫрд▓реЗ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред

рд╣рдо рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдкреАрдЯрд░ рдЬреЛрдЧреЗрдЧрди ( рд╡реАрдПрдорд╡реЗрдпрд░ ) рдХреА, рдЬреЛ рддрдм рддрдХ рд▓рд╛рдЧреВ рд╣реЛ рдЪреБрдХрд╛ рдерд╛, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 9.5 рд╡реИрдХрд▓реНрдкрд┐рдХ INSERT .. ON CONFLICT UPDATE рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд░, SQL рдорд╛рдирдХ рд╕реЗ рдЕрд▓рдЧ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА MySQL рдореЗрдВ MERGE рдФрд░ REPLACE рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рд╛рдЗрдорди рдХрд╛ рдХрд╛рдо рдиреАрд╕ рдХреЗ рдХрд╛рдо рдХреЗ рдЙрджреНрдЧрд╛рд░ рд╕реЗ рдорд┐рд▓рд╛ рдерд╛! рд╣рд╛рд▓рд╛рдВрдХрд┐, рд░реЙрдмрд░реНрдЯ рд╣рд╛рд╕ , рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рд╣рд╛рдпрдХ рд╣реИрдВ, рд╕рдВрднрд╛рд╡рд┐рдд рдХреНрд░рдорд┐рдХ рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреА рдЪреЗрддрд╛рд╡рдиреА рджреЗрддреЗ рд╣реИрдВред рдЬреИрд╕реЗ, INSERT .. ON CONFLICT UPDATE рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП INSERT .. ON CONFLICT UPDATE , рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ MERGE рдХреЗ рдмрд┐рдирд╛, рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╢рд╛рдВрдд рд╣реИред

PostgreSQL UPSERT рд▓реЗрдЦрдХ UPSERT рдЦреБрдж:
рдореИрдВ ON CONFLICT DO UPDATE рдФрд░ MERGE рдХреЛ рдирд╣реАрдВ ON CONFLICT DO UPDATE ред <...> рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ( bulk load ), рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, merge join рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред <...> рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, MERGE рдХреЗ рдлрд╛рдпрджреЗ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдВрдЧреЗ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдХрдиреЗрдХреНрд╢рди рд╡рд╣рд╛рдВ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ: nested loop, hash, merge ред рдФрд░ INSERT тАж ON CONFLICT рдХреЛрдИ INSERT тАж ON CONFLICT рдирд╣реАрдВ рд╣реИрдВред

рд╣рд╛рд╕: рдкреАрдЯрд░ рдХреА рддрд░рд╣, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ DML рдЕрдиреБрд░реЛрдз рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдРрд╕рд╛ рдордЬрдмреВрдд рд▓реЙрдХ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдкреНрд░рд╕рдиреНрди рд╣реЛрдЧрд╛ рдХрд┐ рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╡реНрдпрдХреНрддрд┐ MERGE рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдХреЗ рд▓рд┐рдП: рдЧреАрдЧрди MERGE рдФрд░ MERGE рдмреАрдЪ рд╕реВрдХреНрд╖реНрдорддрд╛рдУрдВ рдФрд░ UPSERT рдЕрдВрддрд░реЛрдВ рдХреЛ рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ (рд╣рдо рдЕрдкрдиреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдХреНрдпреВрдПрд▓ рдХреЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ) рдХреЛ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВред

рд╕рд╛рдЗрдорди рдиреЗ рд╡рд┐рд░реЛрдз рдХрд┐рдпрд╛ред рд╡рд╣ рд╣рд╛рд▓ рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдХреА рдЕрдкреАрд▓ рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕реЗ, рд╕реЗрдХреНрд╢рдирд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рдпрд╣ рднреА рдХрд╣рд╛ "рдПрдХ рдирдпрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕, рдЗрд╕рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВред" рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рдЪреАрдЬ рдирд┐рдХрд▓рд╛ред рд▓реЗрдХрд┐рди рдореИрдВ рддреБрд░рдВрдд рд╕рдм рдХреБрдЫ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рдХрд░рддрд╛ рдЬреЛ рдХрд┐ MERGE рдореЗрдВ рд╣реИред рд╣рдо рд╡рд┐рднрд╛рдЬрди рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдХрд░реЗрдВрдЧреЗ - рд╣рдо рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдФрд░ рдПрдХ рдФрд░ рддрд░реНрдХ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдмрд╣реБрдд рдЖрд╢реНрд╡рд╕реНрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ: рдЕрдЪреНрдЫрд╛ред рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдЪреБрдирддреЗ рд╣реИрдВред рдореИрдВ рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╡рд┐рдХрд▓реНрдк рд╕реБрдЭрд╛рддрд╛ рд╣реВрдВред 10 рд╕рд╛рд▓ рдЬрд▓реНрдж рд╣реА MERGE рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рдкрд╣рд▓реЗ рдЧрдВрднреАрд░ рдкреНрд░рдпрд╛рд╕ рд╕реЗ рдЖрдПрдВрдЧреЗ ред рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдХреЗ 10 рд╡рд░реНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдХреБрдЫ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ, рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ? рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рд╕рдм рдореМрдЬреВрдж рд╣реИред

рдЕрдВрдд рдореЗрдВ, рдкреИрдЪ рд╕рдореБрджрд╛рдп рдореЗрдВ рдЖрддрд╛ рд╣реИред рдХрд┐рд╕ рддрд╛рд░реАрдЦ рдХреЛ? рдХреГрдкрдпрд╛ рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдПред рдирд╣реАрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛: рд╕рд╛рдЗрдорди 30 рджрд┐рд╕рдВрдмрд░, 2017 рдХреЛ рдЙрдиреНрд╣реЗрдВ рднреЗрдЬрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ WIP рдкреИрдЪ рд╣реИ, рдЕрд░реНрдерд╛рдд рд╡рд░реНрдХ рдЗрди рдкреНрд░реЛрдЧреНрд░реЗрд╕ - рд╡рд░реНрдХ рдЗрди рдкреИрдЪред

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

рд╕рдорд┐рддрд┐рдпреЛрдВ рдХреА рдЬрд╛рддрд┐


рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рдПрдХ рдХрджрдо рдЙрдард╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╕рдореБрджрд╛рдп рдореЗрдВ рдЖрдпреБрдХреНрдд рдХреА рднреВрдорд┐рдХрд╛ рдХреЛ рд╕рдордЭрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдпреБрдХреНрдд рдХреЗ рдХрд╛рд░реНрдп, рдЕрд░реНрдерд╛рддреН, рдЬреЛ рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкреИрдЪ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╢рдХреНрдд рд╣реИ, рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм рдХреБрдЫ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдереЗ, рддреЛ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реЛрдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рдЙрджрд╛рд░рддрд╛ рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╕рд┐рджреНрдз (рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ) рдЬреВрд▓рд┐рдпрди рдЕрд╕рд╛рдВрдЬреЗ рдиреЗ рдХреЗрд╡рд▓ рдЫрд╣ рдкреИрдЪ рдХреЗ рд▓реЗрдЦрдХ рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ рдХрдорд╛рдВрдбрд░ рдХреА рдЙрдкрд╛рдзрд┐ рдкреНрд░рд╛рдкреНрдд рдХреАред рдЕрдм рдХрдорд┐рд╢реНрдирд░ рдмрдирдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рдПрдХ рджрд░реНрдЬрди рд▓реЛрдЧреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рдмреЙрдпрд╕ рдореЛрдореНрджрдЬрд╛рди (рдПрдВрдЯрд░рдЯреАрдбреАрдбреАрдмреА) рдореЗрдВ 13,363 рдХрдорд┐рдЯреНрд╕ рд╣реИрдВ, рдЯреЙрдо рд▓реЗрди (рдЯреЙрдо рд▓реЗрди, рдХреБрд░рдХреБрд░реЗ рдбреЗрдЯрд╛ ) 13127, рд░реЙрдмрд░реНрдЯ рд╣рд╛рд╕ ( рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрдмреАрдбреА ) - 2074ред рд╡реИрд╕реЗ, рд░реВрд╕ рд╕реЗ рдПрдХрдорд╛рддреНрд░ рдХрдореЗрдВрдЯ рдлреЗрдбрд░ рд╕рд┐рдЧреЗрд╡ ( рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдкреНрд░реЛрдлреЗрд╢рдирд▓ ) рдЕрдкрдиреЗ 383 рдХрдорд┐рдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИред ред рд╕рд╛рдЗрдорди рд░рд┐рдЧреНрд╕ рд╕реНрд╡рдпрдВ рдХреЗ рдкрд╛рд╕ 449 рд╣реИрдВред рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ: рд╡рд╣, рдПрдХ рдЖрдпреБрдХреНрдд рдХреЗ рд░реВрдк рдореЗрдВ, рдЙрдирдХреЗ рдФрд░ рдЙрдирдХреЗ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдкреИрдЪ рд▓реЗрдиреЗ рдФрд░ рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЕрдзрд┐рдХрд╛рд░ рд╣реИред рдПрдХ рдФрд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╢рд╛рдпрдж рд╣реА рдРрд╕рд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдЕрдиреНрдп рдкреНрд░рдореБрдЦ рд▓реБрдорд┐рдиреЗрд░реА-рд╕рдорд┐рддрд┐рдпреЛрдВ рдХреА рд░рд╛рдп рдХреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкреЗрдХреНрд╖рд╛ред рд╡реЗ рдПрдХ рдЖрдпреБрдХреНрдд рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рднреА рд╡рдВрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рд╡реЗ рдкреИрдЪ рдмреИрдХ рдХреЛ revert рдХрд░ рджреЗрдВрдЧреЗред

рд▓рдбрд╝рд╛рдИ рдореЗрдВ рдлреНрд░реИрдХреНрдЪрд░


рдмреЗрд╢рдХ, "рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ" рдкреИрдЪ рдореЗрдВ, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдЬрд▓реНрджрдмрд╛рдЬреА рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рдирдИ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВред рдЬрд╡рд╛рдм рдореЗрдВ рдирдП рд╕рдВрд╕реНрдХрд░рдг рд░реЛрд▓ред

рдЬрдирд╡рд░реА рдХреЗ рдЕрдВрдд рдореЗрдВ, рдПрдХ рдирдпрд╛ рдЪрд░рд┐рддреНрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ: 2ndQuadrant Pavan рдХрд╛ рд╡рд┐рдХрд╛рд╕рдХ (рдЙрд╕рдХрд╛ рдирд╛рдо рд╣рд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рд╣реИ; рдкреВрд░реА рддрд░рд╣ рд╕реЗ Pavan Deolasee)ред рдЕрдм рд╕рдореБрджрд╛рдп рдПрдХ рдорд╣рд╛рдорд╛рд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ: рдкрд╡рди рдирдП рд╕рдВрд╕реНрдХрд░рдг рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рдЖрд▓реЛрдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рд╛рдЗрдорди рдПрдХ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╡рд┐рдкрдгрди рджрдмрд╛рд╡ рдХреЗ рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рддреЛрдбрд╝рддрд╛ рд╣реИред

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

рддрд░реНрдХ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

  • рдПрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛, рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ "рдХреИрд╡реЗрд▓рд░реА рд╣рдорд▓реЗ рдХреА рд╢реИрд▓реА" рдХреЗ рдШрдЯрдирд╛рдХреНрд░рдо рдореЗрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
  • рд╕рдВрд╕реНрдХрд░рдг 10-11 рдореЗрдВ рдирдП рд╡рд┐рднрд╛рдЬрди рдЬреИрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди, рд╕реАрдЯреАрдИ (рдХреЙрдорди рдЯреЗрдмрд▓ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди = рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд╕рд╛рде) рдпрд╛ рдЖрд░рдПрд▓рдПрд╕ (рд░реЛ рд▓реЗрд╡рд▓ рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА) рдкреИрдЪ рдХреЛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рддрднреА рдЬрдм рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╢реАрд░реНрд╖ рдкрд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реЛред рдЙрд╕рдХреА рд╡рд╛рдВрдЫрд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ред

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

рдЗрд╕ рдмреАрдЪ, рдШрдВрдЯреЗ X (рдЕрдВрддрд┐рдо рдХрдореЗрдЯреАрдлреЗрд╕реНрдЯ) рдЖ рд░рд╣рд╛ рд╣реИ, рдФрд░ MERGE рдкрд░ рдмрд╛рджрд▓ рдЬрдорд╛ рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдВрд╕реНрдерд╛рдкрдХ рдкрд┐рддрд╛ рдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд╛рдЗрдорди рдФрд░ рдлрд┐рд░ рдкрд╛рд╡рди рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдкреЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рддрд▓рд╛рд╢ рдХреАред рдореБрдЭреЗ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рддрд▓рд╛рд╢ рдирд╣реАрдВ рдХрд░рдиреА рдереА, рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕реНрд╡реЗрдЪреНрдЫрд╛ рд╕реЗ рдЦреБрдж рдХреЛ рдЦреЛрд▓рд╛ред

рд╕рдВрдкреНрд░рджрд╛рдп рдирд┐рдХрдЯ рд╣реИ


рдХрдерд╛рдирдХ рдореЗрдВ рддреЗрдЬреА рдЖ рд░рд╣реА рд╣реИред рдЕрдкрдиреЗ рдЙрдкрдХреНрд░рдо рдХреЗ рдкреНрд░рддрд┐ рдЕрдиреНрдп рд╕рдорд┐рддрд┐рдпреЛрдВ рдХреЗ рдардВрдбреЗ рд░рд╡реИрдпреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, 2 рдЕрдкреНрд░реИрд▓ рдХреЛ, рд╕рд╛рдЗрдорди рдиреЗ рдПрд╕рдХреНрдпреВрдПрд▓: 2016 рдкреИрдЪ рдХреЗ рдмрд╛рдж рдХрдорд╛рди рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдлрд╛рдЗрд▓реНрд╕ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдбреАрдкреЗрдЬрд╝ (рд╣реНрдпреВрдмрд░реНрдЯ рд▓реБрдмрд╛рдЪреЗрд╡рд╕реНрдХреА) рдЕрдкрдиреЗ рдмреНрд▓реЙрдЧ рдкрд░ рдЗрд╕рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕реА рджрд┐рди рд╕рд╛рдЗрдорди рд╕рдм рдХреБрдЫ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рддреНрд░реБрдЯрд┐рдпреЛрдВред

рдЕрдЧрд▓реЗ рджрд┐рди, рд╕рдорд░реНрдерди рдХреЗ WITH рдЬреЛрдбрд╝рдХрд░ рдлрд┐рд░ рд╕реЗ рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░реЗрдВред

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

рдЯреЙрдо рд▓реЗрди:
рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЯреНрд░реА рдХрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрдордЬреЛрд░ рд╣реИред



рдЖрдк InsertStmt рдлрд╝рдВрдХреНрд╢рди рдХреЛ InsertStmt рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ, рдпрд╣ INSERT рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдореВрд▓ рдХреЗ рд╕рдорд╛рди рдлрд╝реАрд▓реНрдб рд╣реЛрддреЗ рд╣реИрдВред рдФрд░ рд╕рднреА рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫред рдпрд╣ рдмреБрд░рд╛ рд╣реИ, рдЗрд╕рд╕реЗ рднреНрд░рдо рдкреИрджрд╛ рд╣реЛрддрд╛ рд╣реИред

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


рд╕рд╛рдЗрдорди, рд╢рд╛рдВрддрд┐ рд╕реЗ: рдареАрдХ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдмрджрд▓ рджреЗрдВрдЧреЗ рдФрд░ рдХрд▓ рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рднреЗрдЬреЗрдВрдЧреЗ ред
Haas: рдореИрдВ рдкреАрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рд╣рдордд рд╣реВрдБред рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЕрд╕рдлрд▓ рд╣реИред

рд╕рд╛рдЗрдорди рд╣рд╛рд░ рдирд╣реАрдВ рдорд╛рдирддрд╛ред 6 рдЕрдкреНрд░реИрд▓, рдЯреЙрдо рд▓реЗрди рдХреА рдЖрд▓реЛрдЪрдирд╛ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ, рдкрд╛рд░реНрд╕рд░ рдореЗрдВ рд╕рдВрд╢реЛрдзрди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреИрдЪ рдХрд░рддрд╛ рд╣реИред

рдмрд╛рддрдЪреАрдд рдФрд░ рд╕рдорд░реНрдкрдг


рдмреНрд░реВрд╕ рдореЛрдореНрдЬрди 6 рдЕрдкреНрд░реИрд▓ :
рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд▓реЛрдЧреЛрдВ рдиреЗ рдЖрдкрдХреЛ рддрддреНрдХрд╛рд▓ рдХреБрдЫ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд╣рд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдЖрдкрдХреЛ рдкреИрдЪ рд╡рд╛рдкрд╕ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдЕрдкрдиреЗ рджрд┐рдорд╛рдЧ рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди - рдлрд┐рд░ рд╕реЗ - рдЙрдиреНрд╣реЛрдВрдиреЗ рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрд╕реЗ рдирд╣реАрдВ рдкреВрдЫрд╛ред

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

рдЯреЙрдо рд▓реЗрди: рдореИрдВ рдЕрднреА рднреА рдкреИрдЪ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рд▓реБрдврд╝рдХрд╛ рд╣реБрдЖ рд╣реВрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╡рд╣ рдЕрдм рдкрд░рд┐рдкреВрд░реНрдг рдереЗ, рддреЛ рдЕрдм рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╢реНрд╡рд╕реНрдд рд╣реЛрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ - рдЕрдиреНрдп рдЬрд░реВрд░реА рдорд╛рдорд▓реЛрдВ рдХреЗ рдЧрд▓реЗ рдХреЗ рд▓рд┐рдПред

рд╡рд╣ рд╕рдм рд╣реИред

рд╕рд╛рдЗрдорди рдиреЗ рдХрд╣рд╛ рдареАрдХ рд╣реИ, рдФрд░ MERGE рдкрд░ рд▓рдбрд╝рд╛рдИ рдЦрддреНрдо рд╣реЛ MERGE рдереАред рд╕рднреА рдкреИрдЪ рдХреЛ рд╡рд╛рдкрд╕ рдкрдВрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ "рд▓реЗрдЦрдХ рдХреЗ рд╕рдорд╛рдкрди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛" рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдЕрдЧрд▓реЗ рдХрдореЗрдЯ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢реЛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдиреЗ рд╢рд╛рдВрддрд┐ рдмрдирд╛рдП рд░рдЦреАред


рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рд╛рд▓ рдХреЗ рд╣рдлреНрддреЛрдВ рдХреЗ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдХреБрдЫ рддрдирд╛рд╡ рдмрдирд╛ рд╣реБрдЖ рд╣реИред

рдиреИрддрд┐рдХрддрд╛ рдХрд╛ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛


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

рдкреБрдирд╢реНрдЪ: рд▓реЗрдЦрдХ рд╕реЗ рдЕрд╕реНрд╡реАрдХрд░рдг : рд╣рдо рд╕рд┐рд░реНрдл рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдЬреАрд╡рди рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред рд╕рднреА рдирд╛рдо рдорд┐рд▓рд╛рди рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реИрдВ :)
PPS: рд╕рдореБрд░рд╛рдИ рдирддрд╛рд▓рд┐рдпрд╛ рд▓реЗрд╡рд╢рд┐рдирд╛ ред

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


All Articles