MVCC -1ред рдЗрдиреНрд╕реБрд▓реЗрд╢рди

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд╕рд╛рде, рдореИрдВ PostgreSQL рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реВрдк (рдпрд╛ рдПрдХ рд▓реВрдк рдСрдл рд╕реАрд░реАрдЬрд╝? рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдПрдХ рднрд╡реНрдп рд╡рд┐рдЪрд╛рд░) рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВред

рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╢рд╛рд╕рди рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкрд╛рдареНрдпрдХреНрд░рдореЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдЧреА рдЬреЛ рд╣рдо рдкрд╛рд╡реЗрд▓ рдкреНрд▓реБрдЬрд╝рдиреЛрд╡ рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВред рд╣рд░ рдХреЛрдИ рд╡реАрдбрд┐рдпреЛ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ (рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛), рд▓реЗрдХрд┐рди рд╕реНрд▓рд╛рдЗрдб рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рдкреВрд░реА рддрд░рд╣ рд╕реЗ "рдЧрд▓рдд" рд╣реИред

рдмреЗрд╢рдХ, рд▓реЗрдЦ рдПрдХ рд╕реЗ рдПрдХ рдкрд╛рдареНрдпрдХреНрд░рдореЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдирд╣реАрдВ рджреЛрд╣рд░рд╛рдПрдВрдЧреЗред рдореИрдВ рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рд╢рд╛рд╕рди рдХреЛ рдЫреЛрдбрд╝ рджреЗрдирд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рдФрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЬреНрдЮрд╛рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬреЛ рдкреНрд░рд╢рд╛рд╕рдХ рд╕реЗ рдХрдо рдирд╣реАрдВ рд╣реИред

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

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

рдкрд╣рд▓рд╛ рдЪрдХреНрд░ рдЕрд▓рдЧрд╛рд╡ рдФрд░ рдмрд╣реБрд╡рд┐рд╡рд╛рд╣ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИ, рдФрд░ рдЗрд╕рдХреА рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

  1. рдЕрд▓рдЧрд╛рд╡, рдорд╛рдирдХ рдФрд░ PostgreSQL (рдЗрд╕ рд▓реЗрдЦ) рджреНрд╡рд╛рд░рд╛ рд╕рдордЭрд╛ рдЧрдпрд╛;
  2. рдкрд░рддреЗрдВ, рдлрд╛рдЗрд▓реЗрдВ, рдкреГрд╖реНрда - рднреМрддрд┐рдХ рд╕реНрддрд░ рдкрд░ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ;
  3. рдкрдВрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдг, рдЖрднрд╛рд╕реА рдФрд░ рдиреЗрд╕реНрдЯреЗрдб рд▓реЗрдирджреЗрди ;
  4. рдбреЗрдЯрд╛ рд╕реНрдиреИрдкрд╢реЙрдЯ рдФрд░ рдкрдВрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рджреГрд╢реНрдпрддрд╛, рдШрдЯрдирд╛ рдХреНрд╖рд┐рддрд┐рдЬ ;
  5. рдЗрди-рдкреЗрдЬ рд╕рдлрд╛рдИ рдФрд░ HOT-рдЕрдкрдбреЗрдЯ ;
  6. рд╕рд╛рдорд╛рдиреНрдп рд╕рдлрд╛рдИ (рд╡реИрдХреНрдпреВрдо);
  7. рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдлрд╛рдИ (рдСрдЯреЛрд╡реИрдХреНрдпреВрдо);
  8. рд▓реЗрди-рджреЗрди рдХрд╛рдЙрдВрдЯрд░ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдФрд░ рдлреНрд░реАрдЬ ред

рдЕрдЪреНрдЫрд╛, рдЪрд▓рд┐рдПред

рдЗрдиреНрд╕реБрд▓реЗрд╢рди рдХреНрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрдпреЛрдВ рд╣реИ?


рд╕рдВрднрд╡рддрдГ рд╣рд░ рдХреЛрдИ рдХрдо рд╕реЗ рдХрдо рд▓реЗрдирджреЗрди рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рдкрд░рд┐рдЪрд┐рдд рдПрд╕реАрдЖрдИрдбреА тАЛтАЛрд╕реЗ рдорд┐рд▓рд╛ рдФрд░ рдЕрд▓рдЧрд╛рд╡ рдХреЗ рд╕реНрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ред рд▓реЗрдХрд┐рди рдПрдХ рдХреЛ рдЕрднреА рднреА рд░рд╛рдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕рд┐рджреНрдзрд╛рдВрдд рд╣реИ рдЬреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрдпреЛрдВ рд╣реИред

рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЧрд▓рдд рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдпрд╛ рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЧрд▓рдд рдбреЗрдЯрд╛ рд▓рд┐рдЦрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЦреБрд╢ рд╣реЛрдВрдЧреЗред

рд▓реЗрдХрд┐рди "рд╕рд╣реА" рдбреЗрдЯрд╛ рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрддрд░ рдкрд░, рдЖрдк рдЕрдЦрдВрдбрддрд╛ рдмрд╛рдзрд╛рдПрдБ (рдЬреИрд╕реЗ рдХрд┐ NULL рдпрд╛ UNIQUE) рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдбреЗрдЯрд╛ рд╣рдореЗрд╢рд╛ рдЕрдЦрдВрдбрддрд╛ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ (рдФрд░ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ DBMS рдЗрд╕рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ), рддреЛ рд╡реЗ рд╕рдордЧреНрд░ рд╣реИрдВред

рдХреНрдпрд╛ рд╕рд╣реА рдФрд░ рдЕрднрд┐рдиреНрди рд╣реИрдВ - рдПрдХ рд╣реА рдмрд╛рдд? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВред рд╕рднреА рдкреНрд░рддрд┐рдмрдВрдз рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрддрд░ рдкрд░ рддреИрдпрд╛рд░ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдХрдИ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред рдФрд░ рднрд▓реЗ рд╣реА рдкреНрд░рддрд┐рдмрдВрдз, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╡реЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рдереЗ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

рдЕрдм рд╕реЗ, рд╣рдо рд╢реБрджреНрдзрддрд╛ рдХреЛ рд╕реНрдерд┐рд░рддрд╛ рд╢рдмреНрдж рдХрд╣реЗрдВрдЧреЗред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрд╡реЗрджрди рдХреЗрд╡рд▓ рдмрдпрд╛рдиреЛрдВ рдХреЗ рд╕рд╣реА рдЕрдиреБрдХреНрд░рдо рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрд╡реЗрджрди рд╕рд╣реА рд╣реИ, рддреЛ DBMS рдХреА рдХреНрдпрд╛ рднреВрдорд┐рдХрд╛ рд╣реИ?

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

рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рдЕрдЦрдВрдбрддрд╛ рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕реНрддрд░ рдкрд░ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдирд┐рдпрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдХрдордЬреЛрд░ рд╣реИрдВ? ┬й

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

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

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

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

рдЬрдм рд╕рд╣реА рд▓реЗрди-рджреЗрди рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕реНрдерд┐рддрд┐ рдХреЛ рдПрдХ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрди рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рдпрджрд┐ рдЕрдиреНрдп, рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдБ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд╕рдордЭреЗрдВрдЧреЗред

рдмреЗрд╢рдХ, рдПрдХ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ: рдЕрдиреНрдпрдерд╛, рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ? рд▓реЗрдХрд┐рди рдЖрдк рдЧрд▓рдд рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

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

рддреЛ, рд╣рдо рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░ рдЖрддреЗ рд╣реИрдВ:

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

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

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

SQL рдЕрд▓рдЧрд╛рд╡ рд╕реНрддрд░ рдФрд░ рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдБ


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

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

рдЕрджреНрдпрддрди рдЦреЛ рджрд┐рдпрд╛ рд╣реИ


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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреЛ рд▓реЗрдирджреЗрди рдПрдХ рд╣реА рдЦрд╛рддреЗ рдореЗрдВ рд░рд╛рд╢рд┐ рдХреЛ 100 are рддрдХ рдмрдврд╝рд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рд▓реЗрди-рджреЗрди рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп (1000 the) рдкрдврд╝рддрд╛ рд╣реИ, рдлрд┐рд░ рджреВрд╕рд░рд╛ рд▓реЗрдирджреЗрди рдЙрд╕реА рдореВрд▓реНрдп рдХреЛ рдкрдврд╝рддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рд▓реЗрдирджреЗрди рд░рд╛рд╢рд┐ рдмрдврд╝рд╛рддрд╛ рд╣реИ (рдпрд╣ 1100 amount рдирд┐рдХрд▓рд╛) рдФрд░ рдпрд╣ рдорд╛рди рд▓рд┐рдЦрддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рд▓реЗрди-рджреЗрди рд╡рд╣реА рдХрд░рддрд╛ рд╣реИ - рд╡рд╣реА 1,100 same рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдЧреНрд░рд╛рд╣рдХ 100 client рдЦреЛ рджрд┐рдпрд╛ред

рдХрд┐рд╕реА рднреА рдЕрд▓рдЧрд╛рд╡ рд╕реНрддрд░ рдкрд░ рдорд╛рдирдХ рджреНрд╡рд╛рд░рд╛ рдЦреЛрдП рдЧрдП рдЕрдкрдбреЗрдЯ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред

рдбрд░реНрдЯреА рд░реАрдбрд┐рдВрдЧ рдФрд░ рдЕрдирдХрдореНрдб рд░реАрдб


рдЧрдВрджреЗ рдкрдврд╝рдиреЗ рдХреЗ рд╕рд╛рде рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдКрдкрд░ рдорд┐рд▓ рдЪреБрдХреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рд╕рдВрдЧрддрд┐ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдХреЛрдИ рд▓реЗрдирджреЗрди рдХрд┐рд╕реА рдЕрдиреНрдп рд▓реЗрдирджреЗрди рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рд▓рдВрдмрд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓рд╛ рд▓реЗрдирджреЗрди рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдЦрд╛рддреЗ рд╕реЗ рджреВрд╕рд░реЗ рдЦрд╛рддреЗ рдореЗрдВ рд╕рднреА рдзрди рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЕрдиреНрдп рд▓реЗрди-рджреЗрди рдЦрд╛рддрд╛ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ, 0 receives рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдирдХрдж рдЬрд╛рд░реА рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ - рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдкрд╣рд▓рд╛ рд▓реЗрдирджреЗрди рдмрд╛рдзрд┐рдд рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд░рджреНрдж рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдорд╛рди 0 рдХрднреА рднреА рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред

рдЧрдВрджреЗ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд╛рдирдХ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝реЗ рд╕реНрддрд░ рдкрд░ рд╣реИред

рдиреЙрди-рд░рд┐рдкреАрдЯ рд░реАрдб рдПрдВрдб рд░реАрдб рдХрдорд┐рдЯреЗрдб


рдЧреИрд░-рджреЛрд╣рд░рд╛рд╡ рдкрдврд╝рдиреЗ рд╡рд╛рд▓рд╛ рд╡рд┐рд╕рдВрдЧрддрд┐ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдПрдХ рд▓реЗрди-рджреЗрди рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рдХреЛ рджреЛ рдмрд╛рд░ рдкрдврд╝рддрд╛ рд╣реИ, рдФрд░ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рдмреАрдЪ рдореЗрдВ, рджреВрд╕рд░рд╛ рд▓реЗрди-рджреЗрди рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ (рдпрд╛ рд╣рдЯрд╛рддрд╛ рд╣реИ) рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИред рддрдм рдкрд╣рд▓реЗ рд▓реЗрди-рджреЗрди рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗрдВрдЧреЗред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдЧрддрддрд╛ рдирд┐рдпрдо рдЧреНрд░рд╛рд╣рдХ рдЦрд╛рддреЛрдВ рдореЗрдВ рдирдХрд╛рд░рд╛рддреНрдордХ рдорд╛рддреНрд░рд╛ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ ред рдкрд╣рд▓рд╛ рд▓реЗрди-рджреЗрди рдЦрд╛рддреЗ рдореЗрдВ рд░рд╛рд╢рд┐ to 100 рд╕реЗ рдХрдо рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рд╡рд╣ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреА рд╣реИ, 1000, рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ рдФрд░ рдирд┐рд░реНрдгрдп рд▓реЗрддреА рд╣реИ рдХрд┐ рдХрдореА рд╕рдВрднрд╡ рд╣реИред рдЗрд╕ рд╕рдордп, рджреВрд╕рд░рд╛ рд▓реЗрдирджреЗрди рдЦрд╛рддреЗ рдореЗрдВ рд░рд╛рд╢рд┐ рдХреЛ рд╢реВрдиреНрдп рдореЗрдВ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЕрдм рдкрд╣рд▓реЗ рд▓реЗрдирджреЗрди рдиреЗ рд░рд╛рд╢рд┐ рдХреА рдлрд┐рд░ рд╕реЗ рдЬрд╛рдБрдЪ рдХреА, рддреЛ рдЙрд╕реЗ 0 re рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ (рд▓реЗрдХрд┐рди рдЙрд╕рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдореВрд▓реНрдп рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдЦрд╛рддрд╛ "рдорд╛рдЗрдирд╕ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ")ред

рдЧреИрд░-рджреЛрд╣рд░рд╛рдП рдЧрдП рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд╛рдирдХ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝реЗ рдЧрдП рдЕрдирдзрд┐рдХреГрдд рдФрд░ рдкрдврд╝реЗ рдЧрдП рд╕реНрддрд░реЛрдВ рдкрд░ рд╣реИред рд▓реЗрдХрд┐рди рдЧрдВрджрд╛ рдкрдврдирд╛ рдХрдорд┐рдЯреЗрдб рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

рдкреНрд░реЗрдд рдкрдврд╝реЗрдВ рдФрд░ рдмрд╛рд░-рдмрд╛рд░ рдкрдврд╝реЗрдВ


рдлреИрдВрдЯрдо рд░реАрдбрд┐рдВрдЧ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдХреЛрдИ рд▓реЗрди-рджреЗрди рдПрдХ рд╣реА рд╕реНрдерд┐рддрд┐ рдХреЗ рддрд╣рдд рджреЛ рдмрд╛рд░ рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкрдврд╝рддрд╛ рд╣реИ, рдФрд░ рд░реАрдбреНрд╕ рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ, рджреВрд╕рд░рд╛ рд▓реЗрди-рджреЗрди рдЙрди рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдорд╛рдирддреЗ рд╣реИрдВ)ред рдлрд┐рд░ рдкрд╣рд▓реЗ рд▓реЗрди-рджреЗрди рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреЗред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдХ рд╕рдВрдЧрддрддрд╛ рдирд┐рдпрдо рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЛ 3 рд╕реЗ рдЕрдзрд┐рдХ рдЦрд╛рддреЗ рд░рдЦрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ ред рдкрд╣рд▓рд╛ рд▓реЗрдирджреЗрди рдПрдХ рдирдпрд╛ рдЦрд╛рддрд╛ рдЦреЛрд▓рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЙрдирдХреА рд╡рд░реНрддрдорд╛рди рд╕рдВрдЦреНрдпрд╛ (рдХрд╣рддреЗ рд╣реИрдВ, 2) рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИ рдХрд┐ рдЙрджреНрдШрд╛рдЯрди рд╕рдВрднрд╡ рд╣реИред рдЗрд╕ рд╕рдордп, рджреВрд╕рд░рд╛ рд▓реЗрдирджреЗрди рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЦрд╛рддрд╛ рднреА рдЦреЛрд▓рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЕрдм рдкрд╣рд▓рд╛ рд▓реЗрди-рджреЗрди рдорд╛рддреНрд░рд╛ рдХреЛ рджреЛрдЧреБрдирд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ 3 рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреЗ (рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдФрд░ рдЦрд╛рддрд╛ рдЦреЛрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдкрд╛рд╕ рдЙрдирдореЗрдВ рд╕реЗ 4 рд╣реИрдВ)ред

рдкреНрд░реЗрдд рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рддреА рд╣реИ рдорд╛рдирдХ рдкрд░ рдкрдврд╝реЗрдВ рдЕрдирдХрдореНрдпреБрдирд┐рдЯреЗрдб, рд░реАрдб рдХрдорд┐рдЯреЗрдб рдФрд░ рд░рд┐рдкреАрдЯреЗрдмрд▓ рд░реАрдб рд╕реНрддрд░реЛрдВ рдкрд░ред рд▓реЗрдХрд┐рди рд░рд┐рдкреАрдЯреЗрдмрд▓ рд░реАрдб рд╕реНрддрд░ рдкрд░, рдЧреИрд░-рджреЛрд╣рд░рд╛рдП рдЧрдП рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред

рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдФрд░ рд╕реАрд░рд┐рдпрд▓ рдХреЗ рдЕрднрд╛рд╡


рдорд╛рдирдХ рдПрдХ рдФрд░ рд╕реНрддрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ - рд╕реАрд░рд┐рдпрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп - рдЬрд┐рд╕ рдкрд░ рдХреЛрдИ рднреА рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред рдФрд░ рдпрд╣ рд╕рдм рдПрдХ рдЦреЛрдпрд╛ рдЕрджреНрдпрддрди рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдФрд░ рдПрдХ рдЧрдВрджрд╛, рдЧреИрд░-рджреЛрд╣рд░рд╛рд╡ рдФрд░ рдкреНрд░реЗрдд рдкрдврд╝рдиреЗ рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИред

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдорд╛рдирдХ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд▓реЛрдЧреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рдЕрдзрд┐рдХ рдЬреНрдЮрд╛рдд рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдВ рд╣реИрдВ, рдФрд░ рдПрдХ рдЕрдЬреНрдЮрд╛рдд рд╕рдВрдЦреНрдпрд╛ рдЕрднреА рднреА рдЕрдЬреНрдЮрд╛рдд рд╣реИред

рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд╕рднреА рдЕрд╕рд╛рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдПрдХ рд╕рд╛рде рдЪрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд▓реЗрди-рджреЗрди рдмрдпрд╛рдиреЛрдВ рдХреЗ рд╕рд╣реА рдХреНрд░рдо рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдХреЗрд▓реЗ рдХрд╛рдо рдХрд░рдирд╛, рдЗрди рд▓реЗрдирджреЗрди рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдбреЗрдЯрд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛ред

рд╕рд╛рд░рд╛рдВрд╢ рдкреНрд▓реЗрдЯ


рдЕрдм рдЖрдк рд╕рднреА рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рддрд╛рд▓рд┐рдХрд╛ рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ, рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдЕрдВрддрд┐рдо рдХреЙрд▓рдо рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдорд╛рдирдХ рдореЗрдВ рдирд╣реАрдВ рд╣реИред
рдЦреЛрдП рд╣реБрдП рдмрджрд▓рд╛рд╡рдЧрдВрджрд╛ рдкрдврд╝рдирд╛рдмрд╛рд░-рдмрд╛рд░ рдкрдврд╝рдирд╛рдкреНрд░реЗрдд рдкрдврд╝рдирд╛рдЕрдиреНрдп рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдБ
рдмрд┐рдирд╛ рдкрдврд╝реЗ рд▓рд┐рдЦреЗ-рд╣рд╛рдВрд╣рд╛рдВрд╣рд╛рдВрд╣рд╛рдВ
рдкреНрд░рддрд┐рдмрджреНрдз рдкрдврд╝реЛ--рд╣рд╛рдВрд╣рд╛рдВрд╣рд╛рдВ
рдмрд╛рд░-рдмрд╛рд░ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп---рд╣рд╛рдВрд╣рд╛рдВ
serializable-----

рдЖрдЦрд┐рд░ рдпреЗ рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдБ рдХреНрдпреЛрдВ?


рд╕реВрдЪреАрдмрджреНрдз рдорд╛рдирдХ рдореЗрдВ рдХрдИ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рд╣реА рдХреНрдпреЛрдВ рд╣реИрдВ, рдФрд░ рдпреЗ рдХреНрдпреЛрдВ рд╣реИрдВ?

рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдХрд┐рд╕реА рдХреЛ рднреА рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЕрднреНрдпрд╛рд╕ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рдЧрдпрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рддрдм рд╣рдордиреЗ рдЕрдиреНрдп рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ (рдПрд╕рдХреНрдпреВрдПрд▓ рдорд╛рдирдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднрд╛рд╖рдг: 92)ред

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

рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдирдХ рдХреЗ рдЕрд▓рдЧрд╛рд╡ рдХреЗ рд╕реНрддрд░ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рддрд╛рд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдпрджрд┐ рдХреЛрдИ рд▓реЗрди-рджреЗрди рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрдврд╝рдиреЗ рд╕реЗ рдирд╣реАрдВ, рддреЛ рд╣рдореЗрдВ рд░реАрдб рдЕрдирдХрдорд╛рдЗрдВрдЯреЗрдб рд╕реНрддрд░ рдорд┐рд▓рддрд╛ рд╣реИ: рдЦреЛрдП рд╣реБрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд┐рдирд╛ рдкрдврд╝реЗ рд╣реБрдП рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ рд▓реЗрди-рджреЗрди рдкрдврд╝рдиреЗ рд╕реЗ рдФрд░ рдмрджрд▓рдиреЗ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рд░реАрдб рдХрдорд┐рдЯреЗрдб рд╕реНрддрд░ рдорд┐рд▓рддрд╛ рд╣реИ: рдЖрдк рдмрд┐рдирд╛ рдкрдврд╝реЗ рдбреЗрдЯрд╛ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рд▓рд╛рдЗрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдЕрд▓рдЧ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЧреИрд░-рджреЛрд╣рд░рд╛рдИ рдЧрдИ рд░реАрдбрд┐рдВрдЧ)ред

рдпрджрд┐ рдХреЛрдИ рд▓реЗрди-рджреЗрди рдкрдврд╝рдиреЗ рдФрд░ рдмрджрд▓рдиреЗ рджреЛрдиреЛрдВ рд╕реЗ рдкрдардиреАрдп рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд░реЗрдЦрд╛рдУрдВ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рд╕реНрддрд░ рдорд┐рд▓рддрд╛ рд╣реИ: рдмрд╛рд░-рдмрд╛рд░ рдкрдврд╝рдиреЗ рдкрд░ рд╕рдорд╛рди рдореВрд▓реНрдп рдХрд╛ рдЙрддреНрдкрд╛рджрди рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди Serializable рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рд▓реЙрдХ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЕрднреА рддрдХ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдкреНрд░реЗрдд рдкрдврд╝рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдмрдиреА рд░рд╣рддреА рд╣реИ: рдПрдХ рдЕрдиреНрдп рд▓реЗрдирджреЗрди рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рд╣рдЯрд╛ рдирд╣реАрдВ рд╕рдХрддрд╛) рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреНрд╡реЗрд░реА рдХреА рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд рдЖрддреА рд╣реИ, рдФрд░ рдпрд╣ рдкрдВрдХреНрддрд┐ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рдПрдЧреАред

рдЗрд╕рд▓рд┐рдП, рд╕реАрд░рд┐рдпрд▓ рдХреЗ рд╕реНрддрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рдзрд╛рд░рдг рддрд╛рд▓реЗ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВ - рдЖрдкрдХреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдерд┐рддрд┐рдпрд╛рдВ (рд╡рд┐рдзреЗрдп)ред рдРрд╕реЗ рддрд╛рд▓реЗ рдХреЛ рд╡рд┐рдзреЗрдп рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред рдЙрдиреНрд╣реЗрдВ 1976 рдореЗрдВ рд╡рд╛рдкрд╕ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЙрдирдХреА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рд╕рд╛рдзрд╛рд░рдг рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп рд╕реАрдорд┐рдд рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдзреЗрдпрдХреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдпрд╣ рдХрд┐рд╕реА рднреА рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдРрд╕реЗ рддрд╛рд▓реЗ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЖрдпрд╛ рд╣реИред

PostgreSQL рдЕрд▓рдЧрд╛рд╡ рд╕реНрддрд░


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

рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрд▓рдЧрд╛рд╡ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЧрдВрджреЗ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, PostgreSQL рдореЗрдВ, рдЖрдк рд░реАрдб рдЕрдирдХреНрд╡рд╛рдпрд░реНрдб рд╕реНрддрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд░реАрдб рдХрдорд┐рдЯреЗрдб рдХреА рддрд░рд╣ рд╣реА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЖрдЧреЗ рдкрдврд╝реЗ рдЕрдирдХрдореНрдлрд░реНрдб рд╕реНрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

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

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

рдорд▓реНрдЯреА-рд╡рд░реНрдЬрдирд┐рдВрдЧ рдХреЛ "рд╣реБрдб рдХреЗ рддрд╣рдд" рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЕрдм рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЖрдБрдЦреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреАрди рд╕реНрддрд░реЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦреЗрдВрдЧреЗ (рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк "рдЕрдиреНрдп рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ" рдХреЗ рдкреАрдЫреЗ рдЫрд┐рдкрд╛ рд╣реИ)ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЦрд╛рддреЛрдВ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВред рдПрд▓рд┐рд╕ рдФрд░ рдмреЙрдм рдХреЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ $ 1,000 рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмреЙрдм рдХреЗ рджреЛ рдЦрд╛рддреЗ рдЦреБрд▓реЗ рд╣реИрдВ:

=> CREATE TABLE accounts( id integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, number text UNIQUE, client text, amount numeric ); => INSERT INTO accounts VALUES (1, '1001', 'alice', 1000.00), (2, '2001', 'bob', 100.00), (3, '2002', 'bob', 900.00); 

рдкреНрд░рддрд┐рдмрджреНрдз рдкрдврд╝реЛ


рдЧрдВрджреЗ рдкрдврд╝рдиреЗ рдХрд╛ рдЕрднрд╛рд╡


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

 => BEGIN; => SHOW transaction_isolation; 
  transaction_isolation ----------------------- read committed (1 row) 

рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрддрд░ рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЗрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 => SHOW default_transaction_isolation; 
  default_transaction_isolation ------------------------------- read committed (1 row) 

рдЗрд╕рд▓рд┐рдП, рдПрдХ рдЦреБрд▓реЗ рд▓реЗрдирджреЗрди рдореЗрдВ, рд╣рдо рдЦрд╛рддреЗ рд╕реЗ рдзрди рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрди-рджреЗрди рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦрддрд╛ рд╣реИ:

 => UPDATE accounts SET amount = amount - 200 WHERE id = 1; => SELECT * FROM accounts WHERE client = 'alice'; 
  id | number | client | amount ----+--------+--------+-------- 1 | 1001 | alice | 800.00 (1 row) 

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

рдЙрдкрд░реЛрдХреНрдд рдЖрджреЗрд╢реЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП (рдЬреЛ рдЙрдкрдпреЛрдЧреА рд╣реИ), рдЖрдкрдХреЛ рджреЛ рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдХреЛ рдЦреЛрд▓рдиреЗ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ psql рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдореЗрдВ, рдЖрдк рдПрдХ рд▓реЗрди-рджреЗрди рдХреА рдЖрдЬреНрдЮрд╛рдУрдВ рдХреЛ рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ - рджреВрд╕рд░реЗ рдХреА рдЖрдЬреНрдЮрд╛рдУрдВ рдХреЛред

 | => BEGIN; | => SELECT * FROM accounts WHERE client = 'alice'; 
 | id | number | client | amount | ----+--------+--------+--------- | 1 | 1001 | alice | 1000.00 | (1 row) 

рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдПрдХ рдФрд░ рд▓реЗрди-рджреЗрди рдореЗрдВ рдмрд┐рдирд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рджреЗрдЦреЗ рдЬрд╛рддреЗ - рдЧрдВрджреЗ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ

рдиреЙрди-рд░рд┐рдкреАрдЯ рд░реАрдбрд┐рдВрдЧ


рдЕрдм рдкрд╣рд▓реЗ рд▓реЗрди-рджреЗрди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ, рдФрд░ рджреВрд╕рд░рд╛ рдЙрд╕реА рдЕрдиреБрд░реЛрдз рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВред

 => COMMIT; 

 | => SELECT * FROM accounts WHERE client = 'alice'; 
 | id | number | client | amount | ----+--------+--------+-------- | 1 | 1001 | alice | 800.00 | (1 row) 
 | => COMMIT; 

рдЕрдиреБрд░реЛрдз рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирдпрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ - рдпрд╣ рдЧреИрд░-рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкрдврд╝рдиреЗ рдХреА рд╡рд┐рд╕рдВрдЧрддрд┐ рд╣реИ, рдЬрд┐рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╕реНрддрд░ рдкрд░ рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рддреА рд╣реИред

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

  IF (SELECT amount FROM accounts WHERE id = 1) >= 1000 THEN UPDATE accounts SET amount = amount - 1000 WHERE id = 1; END IF; 

рдЙрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди рдЬрдм рд╕рддреНрдпрд╛рдкрди рдФрд░ рдЕрджреНрдпрддрди рдХреЗ рдмреАрдЪ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдиреНрдп рд▓реЗрдирджреЗрди рдЦрд╛рддреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ "рдЪреЗрдХ" рд╕реЗ рдХреБрдЫ рднреА рди рдмрдЪрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрд╣ рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдХрд┐ рдПрдХ рд▓реЗрди-рджреЗрди рдХреЗ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдиреНрдп рд▓реЗрдирджреЗрди рдХреЗ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдСрдкрд░реЗрдЯрд░ "рд╡реЗрдЬ" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ:

  IF (SELECT amount FROM accounts WHERE id = 1) >= 1000 THEN ----- | UPDATE accounts SET amount = amount - 200 WHERE id = 1; | COMMIT; ----- UPDATE accounts SET amount = amount - 1000 WHERE id = 1; END IF; 

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

рдХреЛрдб рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ? рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЕрд╡рд╕рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд▓рд┐рдП рдЙрдмрд╛рд▓рддреЗ рд╣реИрдВ:

  • рдХреЛрдб рди рд▓рд┐рдЦреЗрдВред
    рдпрд╣ рдХреЛрдИ рдордЬрд╛рдХ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЪреЗрдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдЕрдЦрдВрдбрддрд╛ рдмрд╛рдзрд╛ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ:
    ALTER TABLE accounts ADD CHECK amount >= 0;
    рдЕрдм, рдХреЛрдИ рдЬрд╛рдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ: рдпрд╣ рдХреЗрд╡рд▓ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЕрдЦрдВрдбрддрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЕрдкрд╡рд╛рдж рдХреЛ рд╕рдВрднрд╛рд▓ рд▓реЗрдВред
  • рдПрдХрд▓ SQL рдХрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
    рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╕рдВрдЧрддрддрд╛ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ рдХрд┐ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдПрдХ рдФрд░ рд▓реЗрдирджреЗрди рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рджреГрд╢реНрдпрдорд╛рди рдбреЗрдЯрд╛ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдЕрдЧрд░ рдХреЗрд╡рд▓ рдПрдХ рдСрдкрд░реЗрдЯрд░ рд╣реИ, рддреЛ рдХреЛрдИ рдЕрдВрддрд░рд╛рд▓ рдирд╣реАрдВ рд╣реИрдВред
    PostgreSQL рдореЗрдВ рдПрдХ рдПрдХрд▓ SQL рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд╕рд╛рде рдЬрдЯрд┐рд▓ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЙрдкрдХрд░рдг рд╣реИрдВред рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рдЯреЗрдмрд▓ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди (CTE) рдкрд░ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк INSERT / UPDATE / DELETE рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА INSERT ON CONFLICT рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ "рдЗрдВрд╕рд░реНрдЯ" рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИ, рддреЛ рдПрдХ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ "рд▓реЙрдЬрд┐рдХ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ"ред
  • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрд╛рд▓реЗред
    рдЕрдВрддрд┐рдо рдЙрдкрд╛рдп рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкрдВрдХреНрддрд┐рдпреЛрдВ (SELECT FOR UPDATE), рдпрд╛ рд╕рдВрдкреВрд░реНрдг рддрд╛рд▓рд┐рдХрд╛ (LOCK TABLE) рдкрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд▓реЙрдХ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБ-рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд╛рднреЛрдВ рдХреЛ рдирдХрд╛рд░рддрд╛ рд╣реИ: рдПрдХ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдкрд░рд┐рдЪрд╛рд▓рди рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЕрд╕рдВрдЧрдд рдкрдврд╝рдирд╛


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

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдкрд╣рд▓реЗ рд▓реЗрди-рджреЗрди рдиреЗ рдПрдХ рдмреЙрдм рдЦрд╛рддреЗ рд╕реЗ рджреВрд╕рд░реЗ рдЦрд╛рддреЗ рдореЗрдВ рдзрдирд░рд╛рд╢рд┐ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛:

 => BEGIN; => UPDATE accounts SET amount = amount - 100 WHERE id = 2; 

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

 | => BEGIN; | => SELECT amount FROM accounts WHERE id = 2; 
 | amount | -------- | 100.00 | (1 row) 

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдкрд╣рд▓рд╛ рд▓реЗрдирджреЗрди рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ:

 => UPDATE accounts SET amount = amount + 100 WHERE id = 3; => COMMIT; 

рдФрд░ рджреВрд╕рд░рд╛ рджреВрд╕рд░реЗ рдЦрд╛рддреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдкрдврд╝рддрд╛ рд╣реИ (рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдирдпрд╛ рдореВрд▓реНрдп рджреЗрдЦрддрд╛ рд╣реИ):

 | => SELECT amount FROM accounts WHERE id = 3; 
 | amount | --------- | 1000.00 | (1 row) 
 | => COMMIT; 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рджреВрд╕рд░реЗ рд▓реЗрдирджреЗрди рдореЗрдВ рдХреБрд▓ 1100 received рдкреНрд░рд╛рдкреНрдд рд╣реБрдП, рдЕрд░реНрдерд╛рдд рдЧрд▓рдд рдбреЗрдЯрд╛ред рдпрд╣ рдЕрд╕рдВрдЧрдд рдкрдврд╝рдиреЗ рдХреА рд╡рд┐рд╕рдВрдЧрддрд┐ рд╣реИ ред

Read Committed рдкрд░ рд░рд╣рдХрд░ рдРрд╕реА рд╡рд┐рд╕рдВрдЧрддрд┐ рд╕реЗ рдХреИрд╕реЗ рдмрдЪреЗрдВ? рдмреЗрд╢рдХ, рдПрдХ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:

  SELECT sum(amount) FROM accounts WHERE client = 'bob'; 


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

рдЗрд╕реЗ рджреЗрдЦреЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк pg_sleep рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдСрдкрд░реЗрдЯрд░ рдореЗрдВ рдПрдХ рдХреГрддреНрд░рд┐рдо рд╡рд┐рд▓рдВрдм рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВред рдЗрд╕рдХрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдХрдВрдб рдореЗрдВ рджреЗрд░реА рдХрд╛ рд╕рдордп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

 => SELECT amount, pg_sleep(2) FROM accounts WHERE client = 'bob'; 

рдЬрдм рдпрд╣ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИ, рдПрдХ рдЕрдиреНрдп рд▓реЗрди-рджреЗрди рдореЗрдВ, рд╣рдо рдзрдирд░рд╛рд╢рд┐ рд╡рд╛рдкрд╕ рд▓реЗрддреЗ рд╣реИрдВ:

 | => BEGIN; | => UPDATE accounts SET amount = amount + 100 WHERE id = 2; | => UPDATE accounts SET amount = amount - 100 WHERE id = 3; | => COMMIT; 

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

  amount | pg_sleep ---------+---------- 0.00 | 1000.00 | (2 rows) 

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

 => CREATE FUNCTION get_amount(id integer) RETURNS numeric AS $$ SELECT amount FROM accounts a WHERE a.id = get_amount.id; $$ VOLATILE LANGUAGE sql; 

 => SELECT get_amount(id), pg_sleep(2) FROM accounts WHERE client = 'bob'; 

 | => BEGIN; | => UPDATE accounts SET amount = amount + 100 WHERE id = 2; | => UPDATE accounts SET amount = amount - 100 WHERE id = 3; | => COMMIT; 

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдореЗрдВ рдЧрд▓рдд рдбреЗрдЯрд╛ рдорд┐рд▓рддрд╛ рд╣реИ - 100 get рдЦреЛ рдЬрд╛рддреЗ рд╣реИрдВ:

  get_amount | pg_sleep ------------+---------- 100.00 | 800.00 | (2 rows) 

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

рдЦреЛрдП рд╣реБрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрджрд▓реЗ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдкрдврд╝рдирд╛


рдПрдХ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдПрдХ рдЕрд╕рдВрдЧрдд рдкрдврд╝рдирд╛ - рдХреБрдЫ рд╣рдж рддрдХ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рддрд░реАрдХреЗ рд╕реЗ - рдПрдХ рдЕрджреНрдпрддрди рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЬрдм рдЖрдк рджреЛ рд▓реЗрди-рджреЗрди рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред рдмреЙрдм рдХреЗ рдЕрдм рджреЛ рдЦрд╛рддреЛрдВ рдореЗрдВ 1000 тВ╜ рд╣реИрдВ:

 => SELECT * FROM accounts WHERE client = 'bob'; 
  id | number | client | amount ----+--------+--------+-------- 2 | 2001 | bob | 200.00 3 | 2002 | bob | 800.00 (2 rows) 

рд╣рдо рдПрдХ рд▓реЗрди-рджреЗрди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдмреЙрдм рдХреЗ рд╕рдВрддреБрд▓рди рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ:

 => BEGIN; => UPDATE accounts SET amount = amount - 100 WHERE id = 3; 

рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдПрдХ рдФрд░ рд▓реЗрдирджреЗрди 1000 рдпрд╛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рдмрд░рд╛рдмрд░ рдХреБрд▓ рд╢реЗрд╖ рдХреЗ рд╕рд╛рде рд╕рднреА рдЧреНрд░рд╛рд╣рдХ рдЦрд╛рддреЛрдВ рдкрд░ рдмреНрдпрд╛рдЬ рдЕрд░реНрдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ:

 | => UPDATE accounts SET amount = amount * 1.01 | WHERE client IN ( | SELECT client | FROM accounts | GROUP BY client | HAVING sum(amount) >= 1000 | ); 

рдПрдХ рдЕрджреНрдпрддрди рдХрдерди рдХреЗ рджреЛ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ SELECT рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдкрд╣рд▓реЗ рд▓реЗрди-рджреЗрди рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди рддрдп рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рджреВрд╕рд░рд╛ рд▓реЗрдирджреЗрди рдЗрд╕реЗ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдмреНрдпрд╛рдЬ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдиреЛрдВ рдХреА рдкрд╕рдВрдж рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рддреЛ, рдмреЙрдм рдХреЗ рдЦрд╛рддреЗ рд╣рд╛рд▓рдд рдореЗрдВ рдЖрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдбреЗрдЯ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЙрд╕рдХрд╛ рд╢реЗрд╖ 10 fall рдмрдврд╝ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рджреВрд╕рд░рд╛ рдЪрд░рдг - рдЪрдпрдирд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рджреВрд╕рд░рд╛ рд▓реЗрди-рджреЗрди "рдлреНрд░реАрдЬ" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд▓рд╛рдЗрди рдЖрдИрдбреА = 3 рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╣рд▓реЗ рд▓реЗрдирджреЗрди рд╕реЗ рд▓реЙрдХ рд╣реИред

рдЗрд╕ рдмреАрдЪ, рдкрд╣рд▓рд╛ рд▓реЗрдирджреЗрди рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддрд╛ рд╣реИ:

 => COMMIT; 

рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

 => SELECT * FROM accounts WHERE client = 'bob'; 
  id | number | client | amount ----+--------+--------+---------- 2 | 2001 | bob | 202.0000 3 | 2002 | bob | 707.0000 (2 rows) 

рд╣рд╛рдВ, рдПрдХ рддрд░рдл, UPDATE рдХрдорд╛рдВрдб рдХреЛ рджреВрд╕рд░реЗ рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рди рдореЗрдВ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рдУрд░, рдЗрд╕реЗ рджреВрд╕рд░реЗ рд▓реЗрдирджреЗрди рдореЗрдВ рджрд░реНрдЬ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдирд╣реАрдВ рдЦреЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд▓реЙрдХ рд░рд┐рд▓реАрдЬрд╝ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, UPDATE рдЙрд╕ рдкрдВрдХреНрддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╣ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣ рд░рд╣рд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ!)ред рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реИ рдХрд┐ рдмреЙрдм рдиреЗ 9 тВ╜ рдЕрд░реНрдЬрд┐рдд рдХрд┐рдпрд╛, рдЬреЛ 900 acc рдХреА рд░рд╛рд╢рд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдмреЙрдм рдХреЗ рдкрд╛рд╕ 900 тВ╜ рдереЗ, рддреЛ рдЙрд╕рдХреЗ рдЦрд╛рддреЛрдВ рдХреЛ рдирдореВрдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред

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

рдЪреМрдХрд╕ рдкрд╛рдардХ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрдврд╝реЗ рд╣реБрдП рд╕реНрддрд░ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдХреБрдЫ рдорджрдж рд╕реЗ, рдЖрдк рдПрдХ рдЦреЛрдпрд╛ рд╣реБрдЖ рдЕрдкрдбреЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:

  x := (SELECT amount FROM accounts WHERE id = 1); UPDATE accounts SET amount = x + 100 WHERE id = 1; 

рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рджреЛрд╖ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ: рдпрд╣ рджреЛ рдПрд╕рдХреНрдпреВрдПрд▓ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ x + 100 рдХрд╛ рдореВрд▓реНрдп рдХрд┐рд╕реА рддрд░рд╣ рдЦрд╛рддреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЛрдб рди рд▓рд┐рдЦреЗрдВред

рдмрд╛рд░-рдмрд╛рд░ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп


рдЧреИрд░-рджреЛрд╣рд░рд╛рд╡ рдФрд░ рдкреНрд░реЗрдд рд░реАрдбрд┐рдВрдЧ рдХрд╛ рдЕрднрд╛рд╡


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

 => BEGIN; => UPDATE accounts SET amount = 200.00 WHERE id = 2; => UPDATE accounts SET amount = 800.00 WHERE id = 3; => INSERT INTO accounts VALUES (4, '3001', 'charlie', 100.00); => SELECT * FROM accounts ORDER BY id; 
  id | number | client | amount ----+--------+---------+-------- 1 | 1001 | alice | 800.00 2 | 2001 | bob | 200.00 3 | 2002 | bob | 800.00 4 | 3001 | charlie | 100.00 (4 rows) 

рджреВрд╕рд░реЗ рд╕рддреНрд░ рдореЗрдВ, рд╣рдо рдмрд╛рд░-рдмрд╛рд░ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рд▓реЗрди-рджреЗрди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ BEGIN рдХрдорд╛рдВрдб рдореЗрдВ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ (рдкрд╣рд▓рд╛ рд▓реЗрди-рджреЗрди рдХрд╛ рд╕реНрддрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ)ред

 | => BEGIN ISOLATION LEVEL REPEATABLE READ; | => SELECT * FROM accounts ORDER BY id; 
 | id | number | client | amount | ----+--------+--------+---------- | 1 | 1001 | alice | 800.00 | 2 | 2001 | bob | 202.0000 | 3 | 2002 | bob | 707.0000 | (3 rows) 

рдЕрдм рдкрд╣рд▓рд╛ рд▓реЗрдирджреЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдЙрд╕реА рдЕрдиреБрд░реЛрдз рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред

 => COMMIT; 

 | => SELECT * FROM accounts ORDER BY id; 
 | id | number | client | amount | ----+--------+--------+---------- | 1 | 1001 | alice | 800.00 | 2 | 2001 | bob | 202.0000 | 3 | 2002 | bob | 707.0000 | (3 rows) 
 | => COMMIT; 

рджреВрд╕рд░рд╛ рд▓реЗрди-рджреЗрди рд╢реБрд░реВ рдореЗрдВ рдареАрдХ рдЙрд╕реА рдбреЗрдЯрд╛ рдХреЛ рджреЗрдЦрддрд╛ рд░рд╣рддрд╛ рд╣реИ: рди рддреЛ рдореМрдЬреВрджрд╛ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рди рд╣реА рдирдИ рд▓рд╛рдЗрдиреЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВред

рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдЖрдкрдХреЛ рджреЛрдиреЛрдВ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдмреАрдЪ рдХреБрдЫ рдмрджрд▓рдиреЗ рдХреА рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рдиреА рд╣реЛрдЧреАред

рдЦреЛрдП рд╣реБрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрджрд▓реЗ рдореЗрдВ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рддреНрд░реБрдЯрд┐


рд╣рдордиреЗ рдКрдкрд░ рдХрд╣рд╛ рд╣реИ рдХрд┐ рдЬрдм рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рдХреЛ рдкрдврд╝реЗ рд╣реБрдП рд╕реНрддрд░ рдкрд░ рджреЛ рд▓реЗрди-рджреЗрди рдХреЗ рд╕рд╛рде рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрд╕рдВрдЧрдд рдкрдврд╝рдиреЗ рдХреА рд╡рд┐рд╕рдВрдЧрддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд▓рдВрдмрд┐рдд рд▓реЗрди-рджреЗрди рдмрдВрдж рдкрдВрдХреНрддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рдЗрд╕реЗ рдмрд╛рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рдорд╛рди рд╕рдордп рдкрд░ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реИред

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

 => SELECT * FROM accounts WHERE client = 'bob'; 
  id | number | client | amount ----+--------+--------+-------- 2 | 2001 | bob | 200.00 3 | 2002 | bob | 800.00 (2 rows) 
 => BEGIN; => UPDATE accounts SET amount = amount - 100.00 WHERE id = 3; 

 | => BEGIN ISOLATION LEVEL REPEATABLE READ; | => UPDATE accounts SET amount = amount * 1.01 | WHERE client IN ( | SELECT client | FROM accounts | GROUP BY client | HAVING sum(amount) >= 1000 | ); 

 => COMMIT; 

 | ERROR: could not serialize access due to concurrent update 
 | => ROLLBACK; 

рдбреЗрдЯрд╛ рд╕рдВрдЧрдд рд░рд╣реЗ:

 => SELECT * FROM accounts WHERE client = 'bob'; 
  id | number | client | amount ----+--------+--------+-------- 2 | 2001 | bob | 200.00 3 | 2002 | bob | 700.00 (2 rows) 

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

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

рдЕрд╕рдВрдЧрдд рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐


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

рдЗрди рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рдПрдХ рдЕрд╕рдВрдЧрдд рд░рд┐рдХреЙрд░реНрдб рд╣реИ ред

рдЗрд╕ рд╕рдВрдЧрддрддрд╛ рдирд┐рдпрдо рдХреЛ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рджреЗрдВ: рдпрджрд┐ рдЗрд╕ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╕рднреА рдЦрд╛рддреЛрдВ рдкрд░ рдХреБрд▓ рд░рд╛рд╢рд┐ рдЧреИрд░-рдирдХрд╛рд░рд╛рддреНрдордХ рд░рд╣рддреА рд╣реИ, рддреЛ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдЦрд╛рддреЛрдВ рдкрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рд░рд╛рд╢рд┐ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рддреА рд╣реИ ред

рдкрд╣рд▓рд╛ рд▓реЗрдирджреЗрди рдмреЙрдм рдХреЗ рдЦрд╛рддреЛрдВ рдореЗрдВ рд░рд╛рд╢рд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ: 900 amountред

 => BEGIN ISOLATION LEVEL REPEATABLE READ; => SELECT sum(amount) FROM accounts WHERE client = 'bob'; 
  sum -------- 900.00 (1 row) 

рджреВрд╕рд░рд╛ рд▓реЗрди-рджреЗрди рд╕рдорд╛рди рд░рд╛рд╢рд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

 | => BEGIN ISOLATION LEVEL REPEATABLE READ; | => SELECT sum(amount) FROM accounts WHERE client = 'bob'; 
 | sum | -------- | 900.00 | (1 row) 

рдкрд╣рд▓рд╛ рд▓реЗрди-рджреЗрди рд╕рд╣реА рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдПрдХ рдЦрд╛рддреЗ рдХреА рд░рд╛рд╢рд┐ рдореЗрдВ 600 believes рдХреА рдХрдореА рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

 => UPDATE accounts SET amount = amount - 600.00 WHERE id = 2; 

рдФрд░ рджреВрд╕рд░рд╛ рд▓реЗрдирджреЗрди рдЙрд╕реА рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдЖрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рд╕реНрдХреЛрд░ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИ:

 | => UPDATE accounts SET amount = amount - 600.00 WHERE id = 3; | => COMMIT; 

 => COMMIT; => SELECT * FROM accounts WHERE client = 'bob'; 
  id | number | client | amount ----+--------+--------+--------- 2 | 2001 | bob | -400.00 3 | 2002 | bob | 100.00 (2 rows) 

рд╣рдо рдмреЙрдм рдХреЗ рд╕рдВрддреБрд▓рди рдХреЛ рдорд╛рдЗрдирд╕ рдореЗрдВ рд▓рд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдирджреЗрди рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдкрдврд╝реЗрдВ- рдХреЗрд╡рд▓ рдЕрдиреЛрдорд▓реА


рдпрд╣ рджреЛрд╣рд░рд╛рдиреЗ рдпреЛрдЧреНрдп рдкрдврд╝реЗрдВ рд╕реНрддрд░ рдкрд░ рд╕рдВрднрд╡ рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХрд╛ рджреВрд╕рд░рд╛ рдФрд░ рдЕрдВрддрд┐рдо рд╣реИред рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рддреАрди рд▓реЗрдирджреЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд┐рдирдореЗрдВ рд╕реЗ рджреЛ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рддреАрд╕рд░рд╛ - рдХреЗрд╡рд▓ рдкрдврд╝реЗрдВред

рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рдмреЙрдм рдХреЗ рдЦрд╛рддреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

 => UPDATE accounts SET amount = 900.00 WHERE id = 2; => SELECT * FROM accounts WHERE client = 'bob'; 
  id | number | client | amount ----+--------+--------+-------- 3 | 2002 | bob | 100.00 2 | 2001 | bob | 900.00 (2 rows) 

рдкрд╣рд▓рд╛ рд▓реЗрди-рджреЗрди рд╕рднреА рдЦрд╛рддреЛрдВ рдореЗрдВ рдзрди рдХреА рд░рд╛рд╢рд┐ рдкрд░ рдмреЙрдм рдХреЗ рдмреНрдпрд╛рдЬ рдХрд╛ рднреБрдЧрддрд╛рди рдХрд░рддрд╛ рд╣реИред рдмреНрдпрд╛рдЬ рдЙрдирдХреЗ рдЦрд╛рддреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдЬрдорд╛ рд╣реЛрддрд╛ рд╣реИ:

 => BEGIN ISOLATION LEVEL REPEATABLE READ; -- 1 => UPDATE accounts SET amount = amount + ( SELECT sum(amount) FROM accounts WHERE client = 'bob' ) * 0.01 WHERE id = 2; 

рдлрд┐рд░ рдПрдХ рдЕрдиреНрдп рд▓реЗрди-рджреЗрди рдмреЙрдм рдХреЗ рджреВрд╕рд░реЗ рдЦрд╛рддреЗ рд╕реЗ рдкреИрд╕реЗ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ:

 | => BEGIN ISOLATION LEVEL REPEATABLE READ; -- 2 | => UPDATE accounts SET amount = amount - 100.00 WHERE id = 3; | => COMMIT; 

рдпрджрд┐ рдЗрд╕ рд╕рдордп рдкрд╣рд▓рд╛ рд▓реЗрди-рджреЗрди рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИ, рддреЛ рдХреЛрдИ рд╡рд┐рд╕рдВрдЧрддрд┐ рдирд╣реАрдВ рд╣реЛрдЧреА: рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓рд╛ рд▓реЗрдирджреЗрди рдкрд╣рд▓реЗ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдлрд┐рд░ рджреВрд╕рд░рд╛ (рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рд▓реЗрдирджреЗрди рдиреЗ рдЗрд╕ рдЦрд╛рддреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдИрдбреА рдЖрдИрдбреА = 3 рдХреА рд╕реНрдерд┐рддрд┐ рджреЗрдЦреА рдереАред рджреВрд╕рд░реА рд▓реЗрди-рджреЗрди рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд)ред

рд▓реЗрдХрд┐рди рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЗрд╕ рд╕рдордп рддреАрд╕рд░рд╛ (рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП) рд▓реЗрдирджреЗрди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рджреЛ рд▓реЗрдирджреЗрди рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдЦрд╛рддреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ:

 | => BEGIN ISOLATION LEVEL REPEATABLE READ; -- 3 | => SELECT * FROM accounts WHERE client = 'alice'; 
 | id | number | client | amount | ----+--------+--------+-------- | 1 | 1001 | alice | 800.00 | (1 row) 

рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдкрд╣рд▓рд╛ рд▓реЗрдирджреЗрди рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ:

 => COMMIT; 

рддреАрд╕рд░рд╛ рд▓реЗрди-рджреЗрди рдЕрдм рдХрд┐рд╕ рд░рд╛рдЬреНрдп рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП?

 | SELECT * FROM accounts WHERE client = 'bob'; 

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рддреАрд╕рд░рд╛ рд▓реЗрдирджреЗрди рджреВрд╕рд░реЗ рд▓реЗрдирджреЗрди (рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдкреНрд░рддрд┐рдмрджреНрдз рдерд╛) рдореЗрдВ рдмрджрд▓рд╛рд╡ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдирд╣реАрдВ (рдЬреЛ рдЕрднреА рддрдХ рдкреНрд░рддрд┐рдмрджреНрдз рдирд╣реАрдВ рд╣реИ)ред рджреВрд╕рд░реА рдУрд░, рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдКрдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ рдХрд┐ рджреВрд╕рд░реЗ рд▓реЗрдирджреЗрди рдХреЛ рдкрд╣рд▓реЗ рдХреЗ рдмрд╛рдж рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рддреАрд╕рд░рд╛ рд▓реЗрди-рджреЗрди рдЬреЛ рднреА рджреЗрдЦрддрд╛ рд╣реИ, рд╡рд╣ рдЕрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ - рдпрд╣ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓реЗрдирджреЗрди рдХреА рд╡рд┐рд╕рдВрдЧрддрд┐ рд╣реИред рд▓реЗрдХрд┐рди рджреЛрд╣рд░рд╛рдиреЗ рдпреЛрдЧреНрдп рдкрдврд╝реЗрдВ рд╕реНрддрд░ рдкрд░, рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ:

 | id | number | client | amount | ----+--------+--------+-------- | 2 | 2001 | bob | 900.00 | 3 | 2002 | bob | 0.00 | (2 rows) 
 | => COMMIT; 

serializable


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

рдЕрд╕рдВрдЧрдд рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐


рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрд╕рдВрдЧрдд рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреА рд╡рд┐рд╕рдВрдЧрддрд┐ рдХреЗ рд╕рд╛рде рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ:

 => BEGIN ISOLATION LEVEL SERIALIZABLE; => SELECT sum(amount) FROM accounts WHERE client = 'bob'; 
  sum ---------- 910.0000 (1 row) 

 | => BEGIN ISOLATION LEVEL SERIALIZABLE; | => SELECT sum(amount) FROM accounts WHERE client = 'bob'; 
 | sum | ---------- | 910.0000 | (1 row) 

 => UPDATE accounts SET amount = amount - 600.00 WHERE id = 2; 

 | => UPDATE accounts SET amount = amount - 600.00 WHERE id = 3; | => COMMIT; 

 => COMMIT; 
 ERROR: could not serialize access due to read/write dependencies among transactions DETAIL: Reason code: Canceled on identification as a pivot, during commit attempt. HINT: The transaction might succeed if retried. 

рд░рд┐рдкреАрдЯреЗрдмрд▓ рд░реАрдб рд▓реЗрд╡рд▓ рдХреА рддрд░рд╣ рд╣реА, рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрдмрд▓ рдЖрдЗрд╕реЛрд▓реЗрд╢рди рд▓реЗрд╡рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рди рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдПрдХ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдПрд░рд░ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛, рдЬреЛ рдХрд┐ рдПрд░рд░ рдореИрд╕реЗрдЬ рдореЗрдВ рднреА рд╣рдореЗрдВ рдмрддрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

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

рдкрдврд╝реЗрдВ- рдХреЗрд╡рд▓ рдЕрдиреЛрдорд▓реА


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

 => UPDATE accounts SET amount = 900.00 WHERE id = 2; => UPDATE accounts SET amount = 100.00 WHERE id = 3; => SELECT * FROM accounts WHERE client = 'bob' ORDER BY id; 
  id | number | client | amount ----+--------+--------+-------- 2 | 2001 | bob | 900.00 3 | 2002 | bob | 100.00 (2 rows) 

 => BEGIN ISOLATION LEVEL SERIALIZABLE; -- 1 => UPDATE accounts SET amount = amount + ( SELECT sum(amount) FROM accounts WHERE client = 'bob' ) * 0.01 WHERE id = 2; 

 | => BEGIN ISOLATION LEVEL SERIALIZABLE; -- 2 | => UPDATE accounts SET amount = amount - 100.00 WHERE id = 3; | => COMMIT; 

рддреАрд╕рд░рд╛ рд▓реЗрди-рджреЗрди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рдкрд╛рдардХ (рдХреЗрд╡рд▓ рдкрдврд╝реЗрдВ) рдФрд░ рдЖрд╕реНрдердЧрд┐рдд (DEFERRABLE) рджреНрд╡рд╛рд░рд╛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 | => BEGIN ISOLATION LEVEL SERIALIZABLE READ ONLY DEFERRABLE; -- 3 | => SELECT * FROM accounts WHERE client = 'alice'; 

рдЬрдм рдЖрдк рдХрд┐рд╕реА рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓реЗрдирджреЗрди рдЕрд╡рд░реБрджреНрдз рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ рдЗрд╕рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдПрдХ рд╡рд┐рд╕рдВрдЧрддрд┐ рдХреЛ рдЬрдиреНрдо рджреЗрдЧрд╛ред

 => COMMIT; 

рдФрд░ рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рд▓реЗрдирджреЗрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рддреАрд╕рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ:

 | id | number | client | amount | ----+--------+--------+-------- | 1 | 1001 | alice | 800.00 | (1 row) 
 | => SELECT * FROM accounts WHERE client = 'bob'; 
 | id | number | client | amount | ----+--------+--------+---------- | 2 | 2001 | bob | 910.0000 | 3 | 2002 | bob | 0.00 | (2 rows) 
 | => COMMIT; 

рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдиреЛрдЯ: рдпрджрд┐ рд╕реАрд░рд┐рдпрд▓ рдпреЛрдЧреНрдп рдЕрд▓рдЧрд╛рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрд╡реЗрджрди рдореЗрдВ рд╕рднреА рд▓реЗрдирджреЗрди рдЗрд╕ рд╕реНрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк Serializable рдХреЗ рд╕рд╛рде Read Committed (рдпрд╛ repeatable Read) рдХреЛ рдорд┐рдХреНрд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдпрд╣реА рд╣реИ, рдЖрдк рдХреБрдЫ рдорд┐рд╢реНрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддрдм рд╕реАрд░рд┐рдпрд▓ рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рдмрд┐рдирд╛ рдПрдХ рджреЛрд╣рд░рд╛рдиреЗ рдпреЛрдЧреНрдп рдкрдврд╝реЗрдВ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдВрдЧреЗредрдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ, рд╣рдо рдмрд╛рдж рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬрдм рд╣рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред

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

  ALTER SYSTEM SET default_transaction_isolation = 'serializable'; 

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

рдореБрдЭреЗ рдХрд┐рд╕ рд╕реНрддрд░ рдХреЗ рдЗрдиреНрд╕реБрд▓реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?


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

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

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

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

рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛рдП ред

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


All Articles