рдЕрд▓реАрдХрдбреЗрдЪ рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рдорд╛рдирдХ рдкрд╛рдХрдХреГрддреА рдХрд╢рд╛ рд╡рд╛рдкрд░рд╛рдпрдЪреНрдпрд╛ рддреЗ рд╕рд╛рдВрдЧрд┐рддрд▓реЗ. PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕рдордзреВрди. рдЖрдЬ рдЖрдкрдг рдХрд╕реЗ рдпрд╛рдмрджреНрджрд▓ рдмреЛрд▓реВ рддреБрдореНрд╣реА рд░реЗрдХреЙрд░реНрдбрд┐рдВрдЧ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдо рдмрдирд╡реВ рд╢рдХрддрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ рдХреЛрдгрддреЗрд╣реА "рдЯреНрд╡рд┐рд╕реНрдЯ" рди рд╡рд╛рдкрд░рддрд╛ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ - рдлрдХреНрдд рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдЖрдпреЛрдЬрд┐рдд рдХрд░реВрди.

#рез. рд╡рд┐рднрд╛рдЧрдгреА
рддреЗ рдХрд╕реЗ рдЖрдгрд┐ рдХрд╛ рдЖрдпреЛрдЬрд┐рдд рдХрд░рдгреЗ рдпреЛрдЧреНрдп рдЖрд╣реЗ рдпрд╛рдмрджреНрджрд▓ рдПрдХ рд▓реЗрдЦ рдЖрдзреАрдЪ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЖрд╣реЗ, рдкрд░рдВрддреБ рдпреЗрдереЗ рдЖрдкрдг рдЖрдкрд▓реНрдпрд╛ рдЪреМрдХрдЯреАрдд рдХрд╛рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрди рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкрджреНрдзрддреАрдмрджреНрджрд▓ рдмреЛрд▓реВ .
"рдЧреЗрд▓реНрдпрд╛ рдХрд╛рд│рд╛рддреАрд▓ рдЧреЛрд╖реНрдЯреА..."
рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛, рдХреЛрдгрддреНрдпрд╛рд╣реА MVP рдкреНрд░рдорд╛рдгреЗ, рдЖрдордЪрд╛ рдкреНрд░рдХрд▓реНрдк рдЕрдЧрджреА рд╣рд▓рдХреНрдпрд╛ рднрд╛рд░рд╛рдЦрд╛рд▓реА рд╕реБрд░реВ рдЭрд╛рд▓рд╛ - рджреЗрдЦрд░реЗрдЦ рдлрдХреНрдд рдПрдХ рдбрдЭрди рд╕рд░реНрд╡рд╛рдд рдЧрдВрднреАрд░ рд╕рд░реНрд╡реНрд╣рд░рд╕рд╛рдареА рдХреЗрд▓реА рдЬрд╛рдд рд╣реЛрддреА, рд╕рд░реНрд╡ рдЯреЗрдмрд▓реНрд╕ рддреБрд▓рдиреЗрдиреЗ рдХреЙрдореНрдкреЕрдХреНрдЯ рд╣реЛрддреЗ... рдкрдг рд╡реЗрд│ рдЧреЗрд▓рд╛, рджреЗрдЦрд░реЗрдЦ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╣реЛрд╕реНрдЯрдЪреА рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рдврдд рдЧреЗрд▓реА рдЖрдгрд┐ рдкреБрдиреНрд╣рд╛ рдПрдХрджрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рддреНрдпрд╛рдкреИрдХреА рдПрдХрд╛рд╕рд╣ рдХрд╛рд╣реАрддрд░реА рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛. рез.рел рдЯреАрдмреА рдЖрдХрд╛рд░рд╛рдЪреЗ рдЯреЗрдмрд▓реНрд╕, рдЖрдореНрд╣рд╛рд▓рд╛ рдЬрд╛рдгрд╡рд▓реЗ рдХреА рдЕрд╕реЗ рдЬрдЧрдгреЗ рд╢рдХреНрдп рдЕрд╕рд▓реЗ рддрд░реА рддреЗ рдЦреВрдк рдЧреИрд░рд╕реЛрдпреАрдЪреЗ рд╣реЛрддреЗ.
рддреЗ рдЬрд╡рд│рдЬрд╡рд│ рдкреМрд░рд╛рдгрд┐рдХ рдХрд╛рд│ рд╣реЛрддреЗ, рдЖрдгрд┐ PostgreSQL 9.x рдЪреНрдпрд╛ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдЖрд╡реГрддреНрддреНрдпрд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛрддреНрдпрд╛, рдореНрд╣рдгреВрди рд╕рд░реНрд╡ рд╡рд┐рднрд╛рдЬрдиреЗ "рдореЕрдиреНрдпреБрдЕрд▓реА" рдХрд░рд╛рд╡реА рд▓рд╛рдЧрдд рд╣реЛрддреА - рдорд╛рдзреНрдпрдорд╛рддреВрди рдЯреЗрдмрд▓ рдЗрдирд╣реЗрд░рд┐рдЯрдиреНрд╕ рдЖрдгрд┐ рдЯреНрд░рд┐рдЧрд░реНрд╕ рдбрд╛рдпрдиреЕрдорд┐рдХрд╕рд╣ рд░рд╛рдЙрдЯрд┐рдВрдЧ EXECUTE.

рдкрд░рд┐рдгрд╛рдореА рдЙрдкрд╛рдп рд╕рд░реНрд╡ рдЯреЗрдмрд▓рдордзреНрдпреЗ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд░рдгреНрдпрд╛рдЗрддрдХрд╛ рд╕рд╛рд░реНрд╡рддреНрд░рд┐рдХ рдард░рд▓рд╛:
- рдПрдХ рд░рд┐рдХрд╛рдорд╛ "рд╢реАрд░реНрд╖рд▓реЗрдЦ" рдореВрд│ рд╕рд╛рд░рдгреА рдШреЛрд╖рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓реА, рдЬреНрдпрд╛рдордзреНрдпреЗ рд╕рд░реНрд╡ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рд╣реЛрддреЗ рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЖрдгрд┐ рдЯреНрд░рд┐рдЧрд░реНрд╕.
- рдХреНрд▓рд╛рдпрдВрдЯрдЪреНрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рддреВрди, рдиреЛрдВрдж "рд░реВрдЯ" рдЯреЗрдмрд▓рдордзреНрдпреЗ рдХреЗрд▓реА рдЧреЗрд▓реА рдЖрдгрд┐ рдЕрдВрддрд░реНрдЧрддрд░рд┐рддреНрдпрд╛ рд░рд╛рдЙрдЯрд┐рдВрдЧ рдЯреНрд░рд┐рдЧрд░
BEFORE INSERTрд░реЗрдХреЙрд░реНрдб "рднреМрддрд┐рдХрджреГрд╖реНрдЯреНрдпрд╛" рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рднрд╛рдЧрд╛рдд рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рд╣реЛрддрд╛. рдЬрд░ рд╡рд┐рднрд╛рдЧ рдЖрдзреАрдЪ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдирд╕реЗрд▓, рддрд░ рдЖрдореНрд╣рд╛рд▓рд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдЖрдврд│рд▓рд╛ рдЖрдгрд┐... - тАж рд╡рд╛рдкрд░реВрди рдореВрд│ рд╕рд╛рд░рдгреАрдЪреНрдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ. рдЖрд╡рд╢реНрдпрдХ рддрд╛рд░рдЦреЗрд╡рд░ рдорд░реНрдпрд╛рджрд╛ рдЕрд╕рд▓реЗрд▓рд╛ рд╡рд┐рднрд╛рдЧрдЬреЗрдгреЗрдХрд░реВрди рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛рдирд╛, рд╡рд╛рдЪрди рдлрдХреНрдд рддреНрдпрд╛рддрдЪ рдХреЗрд▓реЗ рдЬрд╛рдИрд▓.
рдкреАрдЬреАрезреж: рдкрд╣рд┐рд▓рд╛ рдкреНрд░рдпрддреНрди
рдкрд░рдВрддреБ рдЗрдирд╣реЗрд░рд┐рдЯрдиреНрд╕рджреНрд╡рд╛рд░реЗ рд╡рд┐рднрд╛рдЬрди рдХрд░рдгреЗ рдРрддрд┐рд╣рд╛рд╕рд┐рдХрджреГрд╖реНрдЯреНрдпрд╛ рд╕рдХреНрд░рд┐рдп рд▓реЗрдЦрди рд░рд╣рджрд╛рд░реА рдХрд┐рдВрд╡рд╛ рдореЛрдареНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдиреЗ рд╡рдВрд╢рдЬ рд╡рд┐рднрд╛рдЬрдиреЗ рд╣рд╛рддрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рдХрдореА рдпреЛрдЧреНрдп рд░рд╛рд╣рд┐рд▓реЗ рдЖрд╣реЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдПрдЦрд╛рджреНрдпрд╛рд▓рд╛ рдЖрдард╡рдд рдЕрд╕реЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рднрд╛рдЬрди рдирд┐рд╡рдбрдгреНрдпрд╛рд╕рд╛рдареА рдЕрд▓реНрдЧреЛрд░рд┐рдердордордзреНрдпреЗ рд╡рд░реНрдЧреАрдп рдЬрдЯрд┐рд▓рддрд╛, рдЬреЗ резрежреж+ рд╡рд┐рднрд╛рдЧрд╛рдВрд╕рд╣ рдХрд╛рдо рдХрд░рддреЗ, рддреЗ рдХрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдорд╛рд╣рд┐рддреА рдЖрд╣реЗ...
рдкреАрдЬреАрезреж рдордзреНрдпреЗ, рд╕рдорд░реНрдерди рд▓рд╛рдЧреВ рдХрд░реВрди рд╣реА рдкрд░рд┐рд╕реНрдерд┐рддреА рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдЕрдиреБрдХреВрд▓ рдХреЗрд▓реА рдЧреЗрд▓реА . рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рд╕реНрдЯреЛрд░реЗрдЬ рд╕реНрдерд▓рд╛рдВрддрд░рд┐рдд рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рд▓рдЧреЗрдЪ рддреЗ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛, рдкрдг...
рдореЕрдиреНрдпреБрдЕрд▓рдордзреВрди рдЦреЛрджрдХрд╛рдо рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА, рдпрд╛ рдЖрд╡реГрддреНрддреАрддреАрд▓ рдореВрд│ рд╡рд┐рднрд╛рдЬрди рдХреЗрд▓реЗрд▓реЗ рдЯреЗрдмрд▓:
- рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╡рд░реНрдгрдирд╛рдВрдирд╛ рд╕рдорд░реНрдерди рджреЗрдд рдирд╛рд╣реА.
- рддреЗ рдЯреНрд░рд┐рдЧрд░реНрд╕рдирд╛ рд╕рдорд░реНрдерди рджреЗрдд рдирд╛рд╣реА.
- рдХреЛрдгрд╛рдЪрд╛рд╣реА "рд╡рдВрд╢рдЬ" рдЕрд╕реВ рд╢рдХрдд рдирд╛рд╣реА.
- рд╕рдорд░реНрдерди рдХрд░реВ рдирдХрд╛
INSERT ... ON CONFLICT - рдЖрдкреЛрдЖрдк рд╡рд┐рднрд╛рдЧ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА.
рдХрдкрд╛рд│рд╛рд╡рд░ рд░реЗрдХрдиреЗ рдЬреЛрд░рджрд╛рд░ рдкреНрд░рд╣рд╛рд░ рдХреЗрд▓реНрдпрд╛рдореБрд│реЗ, рдЖрдореНрд╣рд╛рд▓рд╛ рдЬрд╛рдгрд╡рд▓реЗ рдХреА рдЕрд░реНрдЬрд╛рдд рдмрджрд▓ рдХреЗрд▓реНрдпрд╛рд╢рд┐рд╡рд╛рдп рдЖрдореНрд╣реА рдЬрдЧреВ рд╢рдХрдд рдирд╛рд╣реА рдЖрдгрд┐ рдЖрдореНрд╣реА рдкреБрдвреАрд▓ рд╕рдВрд╢реЛрдзрди рд╕рд╣рд╛ рдорд╣рд┐рдиреНрдпрд╛рдВрд╕рд╛рдареА рдкреБрдвреЗ рдврдХрд▓рд▓реЗ.
рдкреАрдЬреАрезреж: рджреБрд╕рд░реА рд╕рдВрдзреА
рдореНрд╣рдгреВрди, рдЖрдореНрд╣реА рдПрдХрд╛рдорд╛рдЧреВрди рдПрдХ рдЙрджреНрднрд╡рд▓реЗрд▓реНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╕реЛрдбрд╡рдгреНрдпрд╛рд╕ рд╕реБрд░реБрд╡рд╛рдд рдХреЗрд▓реА:
- рдХрд╛рд░рдг рдЯреНрд░рд┐рдЧрд░реНрд╕ рдЖрдгрд┐
ON CONFLICTрдЖрдореНрд╣рд╛рд▓рд╛ рдЕрдЬреВрдирд╣реА рдХрд╛рд╣реА рдард┐рдХрд╛рдгреА рддреНрдпрд╛рдВрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рдЖрдврд│рд▓реЗ, рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рддреНрдпрд╛рдВрдирд╛ рд╕реЛрдбрд╡рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдордзрд▓рд╛ рдЯрдкреНрдкрд╛ рдЖрдЦрд▓рд╛. рдкреНрд░реЙрдХреНрд╕реА рдЯреЗрдмрд▓. - "рдорд╛рд░реНрдЧ" рдкрд╛рд╕реВрди рдореБрдХреНрддрддрд╛ рдорд┐рд│рд╛рд▓реА рдЯреНрд░рд┐рдЧрд░реНрд╕рдордзреНрдпреЗ - рдореНрд╣рдгрдЬреЗрдЪ, рдкрд╛рд╕реВрди
EXECUTE. - рддреНрдпрд╛рдВрдиреА рддреЗ рд╡реЗрдЧрд│реЗ рдХрд╛рдврд▓реЗ. рд╕рд░реНрд╡ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХрд╛рдВрд╕рд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЯреЗрдмрд▓рдЬреЗрдгреЗрдХрд░реВрди рддреЗ рдкреНрд░реЙрдХреНрд╕реА рдЯреЗрдмрд▓рд╡рд░рд╣реА рдЙрдкрд╕реНрдерд┐рдд рдирд╕рддреАрд▓.

рд╢реЗрд╡рдЯреА, рдпрд╛ рд╕рд░реНрд╡рд╛рдирдВрддрд░, рдореБрдЦреНрдп рдЯреЗрдмрд▓рдЪреЗ рдореВрд│ рд╡рд┐рднрд╛рдЬрди рдЭрд╛рд▓реЗ. рдирд╡реАрди рд╡рд┐рднрд╛рдЬрди рддрдпрд╛рд░ рдХрд░рдгреЗ рд╣реА рдЕрдЬреВрдирд╣реА рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдЪреА рдЬрдмрд╛рдмрджрд╛рд░реА рдЖрд╣реЗ.
рдЖрдореНрд╣реА рд╢рдмреНрджрдХреЛрд╢ рдкрд╛рд╣рд┐рд▓реЗ.
рдХреЛрдгрддреНрдпрд╛рд╣реА рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рдкреНрд░рдгрд╛рд▓реАрдкреНрд░рдорд╛рдгреЗ, рдЖрдордЪреНрдпрд╛рдХрдбреЗ рджреЗрдЦреАрд▓ рд╣реЛрддреЗ "рддрдереНрдпреЗ" рдЖрдгрд┐ "рд╡рд┐рднрд╛рдЧ" (рд╢рдмреНрджрдХреЛрд╢). рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рддрддреНрд╕рдо рд╕реНрд▓реЛ рдХреНрд╡реЗрд░реАрдЬ рдХрд┐рдВрд╡рд╛ рдХреНрд╡реЗрд░реАрдЪрд╛рдЪ рдордЬрдХреВрд░.
рдЖрдордЪреЗ "рддрдереНрдпреЗ" рдмрд▒реНрдпрд╛рдЪ рдХрд╛рд│рд╛рдкрд╛рд╕реВрди рджрд┐рд╡рд╕рд╛рдиреБрд░реВрдк рд╡рд┐рднрд╛рдЧрд▓реЗ рдЧреЗрд▓реЗ рд╣реЛрддреЗ, рддреНрдпрд╛рдореБрд│реЗ рдЖрдореНрд╣реА рдЬреБрдиреЗ рд╡рд┐рднрд╛рдЧ рд╕рд╣рдЬрдкрдгреЗ рд╣рдЯрд╡реВ рд╢рдХрдд рд╣реЛрддреЛ, рддреЗ рдорд╛рд░реНрдЧрд╛рдд рди рдпреЗрддрд╛ (рд╢реЗрд╡рдЯреА, рддреЗ рдиреЛрдВрджреА рд╣реЛрддреЗ!). рдкрдг рд╢рдмреНрджрдХреЛрд╢рд╛рдВрдордзреНрдпреЗ рдереЛрдбреА рд╕рдорд╕реНрдпрд╛ рд╣реЛрддреА...
рдореА рдЕрд╕реЗ рдореНрд╣рдгрдгрд╛рд░ рдирд╛рд╣реА рдХреА рддреНрдпрд╛рдкреИрдХреА рдмрд░реЗрдЪ рд╣реЛрддреЗ, рдкрдг рдЕрдВрджрд╛рдЬреЗ резрежреж рдЯреАрдмреА "рддрдереНрдпреЗ" рдореБрд│реЗ реи.рел рдЯреАрдмреА рд╢рдмреНрджрдХреЛрд╢ рддрдпрд╛рд░ рдЭрд╛рд▓рд╛.рдЕрд╢рд╛ рдЯреЗрдмрд▓рдордзреВрди рддреБрдореНрд╣реА рдХрд╛рд╣реАрд╣реА рд╕реЛрдпреАрд╕реНрдХрд░рдкрдгреЗ рд╣рдЯрд╡реВ рд╢рдХрдд рдирд╛рд╣реА, рддреБрдореНрд╣реА рддреЗ рдпреЛрдЧреНрдп рд╡реЗрд│реЗрдд рдХреЙрдореНрдкреНрд░реЗрд╕ рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА рдЖрдгрд┐ рддреНрдпрд╛рд╡рд░ рд▓рд┐рд╣рд┐рдгреЗ рд╣рд│реВрд╣рд│реВ рдордВрдж рд╣реЛрдд рдЧреЗрд▓реЗ.
рддреЗ рдПрдХрд╛ рд╢рдмреНрджрдХреЛрд╢рд╛рд╕рд╛рд░рдЦреЗ рд╡рд╛рдЯрддреЗ... рддреНрдпрд╛рддреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдВрдж рдПрдХрджрд╛рдЪ рд╕рд╛рджрд░ рдХреЗрд▓реА рдкрд╛рд╣рд┐рдЬреЗ... рдЖрдгрд┐ рддреЗ рдмрд░реЛрдмрд░ рдЖрд╣реЗ, рдкрдг!.. рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдХреЛрдгреАрд╣реА рд░реЛрдЦрдд рдирд╛рд╣реА рдкреНрд░рддреНрдпреЗрдХ рджрд┐рд╡рд╕рд╛рд╕рд╛рдареА рд╡реЗрдЧрд│рд╛ рд╢рдмреНрджрдХреЛрд╢! рд╣реЛ, рдпрд╛рдореБрд│реЗ рдХрд╛рд╣реА рдкреНрд░рдорд╛рдгрд╛рдд рдЕрддрд┐рд░рд┐рдХреНрддрддрд╛ рдпреЗрддреЗ, рдкрд░рдВрддреБ рддреЗ рдЕрдиреБрдорддреА рджреЗрддреЗ:
- рдЬрд▓рдж рд▓рд┐рд╣рд╛/рд╡рд╛рдЪрд╛ рд▓рд╣рд╛рди рд╡рд┐рднрд╛рдЧрд╛рдЪреНрдпрд╛ рдЖрдХрд╛рд░рд╛рдореБрд│реЗ
- рдХрдореА рдореЗрдорд░реА рд╡рд╛рдкрд░рд╛ рдЕрдзрд┐рдХ рдХреЙрдореНрдкреЕрдХреНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд╕рд╣ рдХрд╛рдо рдХрд░реВрди
- рдХрдореА рдбреЗрдЯрд╛ рд╕рд╛рдард╡рд╛ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдЧреЛрд╖реНрдЯреА рд▓рд╡рдХрд░ рдХрд╛рдвреВрди рдЯрд╛рдХрдгреНрдпрд╛рдЪреНрдпрд╛ рдХреНрд╖рдорддреЗрдореБрд│реЗ
рдЙрдкрд╛рдпрдпреЛрдЬрдирд╛рдВрдЪреНрдпрд╛ рд╕рдВрдкреВрд░реНрдг рд╢реНрд░реЗрдгреАрдЪрд╛ рдкрд░рд┐рдгрд╛рдо рдореНрд╣рдгреВрди CPU рд▓реЛрдб ~рейреж% рдиреЗ рдХрдореА рдЭрд╛рд▓рд╛, рдбрд┐рд╕реНрдХ рд▓реЛрдб ~релреж% рдиреЗ рдХрдореА рдЭрд╛рд▓рд╛.:

рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рдЖрдореНрд╣реА рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдЕрдЧрджреА рддреЗрдЪ рд▓рд┐рд╣рд┐рдд рд░рд╛рд╣рд┐рд▓реЛ, рдлрдХреНрдд рдХрдореА рд▓реЛрдбрд╕рд╣.
#реи. рдбреЗрдЯрд╛рдмреЗрд╕ рдЙрддреНрдХреНрд░рд╛рдВрддреА рдЖрдгрд┐ рдкреБрдирд░реНрдШрдЯрдХреАрдХрд░рдг
рддрд░, рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдЬреЗ рдЖрд╣реЗ рддреНрдпрд╛рд╡рд░ рдЖрдореНрд╣реА рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ рджрд┐рд╡рд╕рд╛рд╕рд╛рдареА рдПрдХ рд╡рд┐рднрд╛рдЧ рдЖрд╣реЗ. рдбреЗрдЯрд╛рд╕рд╣. рдЦрд░рдВ рддрд░, CHECK (dt = '2018-10-12'::date) тАФ рдЖрдгрд┐ рд░реЗрдХреЙрд░реНрдб рдПрдХрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рднрд╛рдЧрд╛рдд рдпреЗрдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд╡рд┐рднрд╛рдЬрди рдХреА рдЖрдгрд┐ рдПрдХ рдЕрдЯ рдЖрд╣реЗ.
рдЖрдордЪреНрдпрд╛ рд╕реЗрд╡реЗрддреАрд▓ рд╕рд░реНрд╡ рдЕрд╣рд╡рд╛рд▓ рдПрдХрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд╛рд░рдЦреЗрд╕рд╛рдареА рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ "рд╡рд┐рднрд╛рдЬрди рдирд╕рд▓реЗрд▓реНрдпрд╛ рдХрд╛рд│рд╛рдкрд╛рд╕реВрди" рд╕рдорд╛рди рдЖрд╣реЗрдд. (рд╕рд░реНрд╡реНрд╣рд░, рддрд╛рд░реАрдЦ, рдпреЛрдЬрдирд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ), (рд╕рд░реНрд╡реНрд╣рд░, рддрд╛рд░реАрдЦ, рдкреНрд▓реЕрди рдиреЛрдб), (рддрд╛рд░реАрдЦ, рддреНрд░реБрдЯреА рд╡рд░реНрдЧ, рд╕рд░реНрд╡реНрд╣рд░)...
рдкрдг рдЖрддрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рднрд╛рдЧрд╛рдд рд▓реЛрдХ рд░рд╛рд╣рддрд╛рдд. рддреБрдордЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдкреНрд░рддреА рдкреНрд░рддреНрдпреЗрдХ рдЕрд╕рд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ... рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рднрд╛рдЧрд╛рдд рддрд╛рд░реАрдЦ рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдЖрд╣реЗ.тАж рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА рдЖрддрд╛ рдЖрдкрдг рдЕрд╢рд╛ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХрд╛рдд рдЖрд╣реЛрдд рдЖрдкрдг рдлрдХреНрдд рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рддреЛ. рдПрдХ рдЕрд╕реЗ рдХреНрд╖реЗрддреНрд░ рдореНрд╣рдгреВрди, рдЬреЗ рддреНрдпрд╛рдЪрд╛ рдЖрдХрд╛рд░ рдЖрдгрд┐ рд╢реЛрдз рд╡реЗрд│ рджреЛрдиреНрд╣реА рд╡рд╛рдврд╡рддреЗ, рдкрд░рдВрддреБ рдХреЛрдгрддреЗрд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрдд рдирд╛рд╣реА. рдЖрдкрдг рд╕реНрд╡рддрдГрд▓рд╛ рдПрдХ рдзреЛрдХрд╛ рдкрддреНрдХрд░рд▓рд╛ рдЖрд╣реЗ, рдЕрд░реЗрд░реЗ...

рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рдирдЪреА рджрд┐рд╢рд╛ рд╕реНрдкрд╖реНрдЯ рдЖрд╣реЗ - рдлрдХреНрдд рд╕рд░реНрд╡ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХрд╛рдВрдордзреВрди рддрд╛рд░реАрдЦ рдлреАрд▓реНрдб рдХрд╛рдвреВрди рдЯрд╛рдХрд╛. рд╡рд┐рднрд╛рдЬрд┐рдд рдЯреЗрдмрд▓рд╛рдВрд╡рд░. рдЖрдордЪреНрдпрд╛ рдЦрдВрдбрд╛рдВрд╕рд╣, рдлрд╛рдпрджрд╛ рд╕реБрдорд╛рд░реЗ рдЖрд╣реЗ рез рдЯреАрдмреА/рдЖрдард╡рдбрд╛!
рдЖрддрд╛ рдЖрдкрдг рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрдКрдпрд╛ рдХреА рд╣реЗ рдЯреЗрд░рд╛рдмрд╛рдЗрдЯ рдЕрдЬреВрдирд╣реА рдХрд╕реЗ рддрд░реА рд▓рд┐рд╣рд╛рдпрдЪреЗ рд╣реЛрддреЗ. рдореНрд╣рдгрдЬреЗрдЪ, рдЖрдкрдг рджреЗрдЦреАрд▓ рдбрд┐рд╕реНрдХ рдЖрддрд╛ рдХрдореА рд▓реЛрдб рдЭрд╛рд▓реА рдкрд╛рд╣рд┐рдЬреЗ.рд╣реЗ рдЪрд┐рддреНрд░ рдПрдХрд╛ рдЖрдард╡рдбреНрдпрд╛рдд рдЖрдореНрд╣реА рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕реНрд╡рдЪреНрдЫрддреЗрдЪреЗ рдкрд░рд┐рдгрд╛рдо рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рджрд░реНрд╢рд╡рддреЗ:

#рей. рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд рднрд╛рд░ рдкрд╕рд░рд╡рд╛
рд╡реНрдпрд╕реНрдд рдкреНрд░рдгрд╛рд▓реАрдВрдордзреАрд▓ рдПрдХ рдореЛрдареА рд╕рдорд╕реНрдпрд╛ рдореНрд╣рдгрдЬреЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди рдХрд╛рд╣реА рд╢рд╕реНрддреНрд░рдХреНрд░рд┐рдпрд╛рдВрдирд╛ рддреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╕рддреЗ. рдХрдзреАрдХрдзреА рддреЗ "рдЖрдкрд▓реНрдпрд╛ рд▓рдХреНрд╖рд╛рдд рди рдЖрд▓реНрдпрд╛рдиреЗ" рдЕрд╕рддреЗ, рдХрдзреАрдХрдзреА рддреЗ "рдлрдХреНрдд рд╕реЛрдкреЗ" рдЕрд╕рддреЗ, рдкрд░рдВрддреБ рд▓рд╡рдХрд░рдЪ рдХрд┐рдВрд╡рд╛ рдирдВрддрд░ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рддреЗ рдХрд╛рдвреВрди рдЯрд╛рдХрд╛рд╡реЗрдЪ рд▓рд╛рдЧрддреЗ.
рдЪрд▓рд╛ рдорд╛рдЧреАрд▓ рдЪрд┐рддреНрд░рд╛рд╡рд░ рдЭреВрдо рдЗрди рдХрд░реВрдпрд╛ рдЖрдгрд┐ рдкрд╛рд╣реВрдпрд╛ рдХреА рдЖрдкрд▓реНрдпрд╛рдХрдбреЗ рдПрдХ рдбрд┐рд╕реНрдХ рдЖрд╣реЗ. рджреБрд╣реЗрд░реА рдореЛрдареЗрдкрдгрд╛ рдЕрд╕рд▓реЗрд▓реЗ "рдкрдВрдк" рд▓реЛрдбрдЦрд╛рд▓реА рд╕рдореАрдк рд╡рд╛рдЪрдирд╛рдВрдордзреНрдпреЗ, рдЬреЗ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ "рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдпрджреГрд╖реНрдЯреНрдпрд╛" рдЗрддрдХреНрдпрд╛ рдСрдкрд░реЗрд╢рдиреНрд╕рд╕рд╣ рдШрдбреВ рдирдпреЗ:

рд╣реЗ рд╕рд╛рдзреНрдп рдХрд░рдгреЗ рдЦреВрдк рд╕реЛрдкреЗ рдЖрд╣реЗ. рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдЖрдзреАрдЪ рдПрдХ рджреЗрдЦрд░реЗрдЦ рдкреНрд░рдгрд╛рд▓реА рд╣реЛрддреА. рдЬрд╡рд│рдЬрд╡рд│ резрежрежреж рд╕рд░реНрд╡реНрд╣рд░, рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рд╡реЗрдЧрд│реНрдпрд╛ рд▓реЙрдЬрд┐рдХрд▓ рдереНрд░реЗрдбрджреНрд╡рд╛рд░реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдбреЗрдЯрд╛рдмреЗрд╕рд▓рд╛ рдкрд╛рдард╡рдгреНрдпрд╛рд╕рд╛рдареА рдЬрдорд╛ рдХреЗрд▓реЗрд▓реА рдорд╛рд╣рд┐рддреА рдПрдХрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╛рд░рдВрд╡рд╛рд░рддреЗрд╡рд░ рдбрдВрдк рдХрд░рддреЛ, рдЕрдВрджрд╛рдЬреЗ рдпрд╛рдкреНрд░рдорд╛рдгреЗ:
setInterval(sendToDB, interval)рдпреЗрдереЗ рд╕рдорд╕реНрдпрд╛ рдиреЗрдордХреА рд╣реА рдЖрд╣реЗ рдХреА рд╕рд░реНрд╡ рдкреНрд░рд╡рд╛рд╣ рдПрдХрд╛рдЪ рд╡реЗрд│реА рд╕реБрд░реВ рд╣реЛрддрд╛рдд., рдореНрд╣рдгреВрди рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдкрд╛рдард╡рдгреНрдпрд╛рдЪреНрдпрд╛ рд╡реЗрд│рд╛ рдЬрд╡рд│рдЬрд╡рд│ рдиреЗрд╣рдореАрдЪ "рдореБрджреНрджреНрдпрд╛рд╢реА рдЬреБрд│рддрд╛рдд." рдЕрд░реЗрд░реЗ #реи...
рд╕реБрджреИрд╡рд╛рдиреЗ, рд╣реЗ рджреБрд░реБрд╕реНрдд рдХрд░рдгреЗ рдЦреВрдк рд╕реЛрдкреЗ рдЖрд╣реЗ, "рдпрд╛рджреГрдЪреНрдЫрд┐рдХ" рд╕реНрдХреЕрдЯрд░рд┐рдВрдЧ рдЬреЛрдбрдд рдЖрд╣реЗ рд╡реЗрд│реЗрдиреБрд╕рд╛рд░:
setInterval(sendToDB, interval * (1 + 0.1 * (Math.random() - 0.5)))#рек. рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЬреЗ рд╣рд╡реЗ рдЖрд╣реЗ рддреЗ рдЖрдкрдг рд╕рд╛рдард╡рддреЛ.
рдЙрдЪреНрдЪ рднрд╛рд░рд╛рдЪреА рддрд┐рд╕рд░реА рдкрд╛рд░рдВрдкрд╛рд░рд┐рдХ рд╕рдорд╕реНрдпрд╛ рдЖрд╣реЗ рдХреЕрд╢реЗ рдирд╛рд╣реА рддреЛ рдХреБрдареЗ рдЖрд╣реЗ? рдХрд░реВ рд╢рдХрд▓реЛ рдЕрд╕рдгреЗ.
рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрдореНрд╣реА рдкреНрд▓реЕрди рдиреЛрдбреНрд╕рдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдгреЗ рд╢рдХреНрдп рдХреЗрд▓реЗ (рд╣реЗ рд╕рд░реНрд╡ Seq Scan on users), рдкрдг рд▓рдЧреЗрдЪ рд╡рд╛рдЯрд▓реЗ рдХреА рддреЗ рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рд╕рд╛рд░рдЦреЗрдЪ рдЖрд╣реЗрдд - рддреЗ рд╡рд┐рд╕рд░рд▓реЗ.
рдирд╛рд╣реА, рдЕрд░реНрдерд╛рддрдЪ, рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдкреБрдиреНрд╣рд╛ рдХрд╛рд╣реАрд╣реА рд▓рд┐рд╣рд┐рд▓реЗ рдЬрд╛рдд рдирд╛рд╣реА, рд╣реЗ рдЯреНрд░рд┐рдЧрд░рдиреЗ рдХрд╛рдкрд▓реЗ рдЬрд╛рддреЗ. INSERT ... ON CONFLICT DO NOTHINGрдкрдг рд╣рд╛ рдбреЗрдЯрд╛ рдЕрдЬреВрдирд╣реА рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдкреЛрд╣реЛрдЪрддреЛ, рдЖрдгрд┐ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рджреЗрдЦреАрд▓. рд╕рдВрдШрд░реНрд╖ рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдЪрди рдорд▓рд╛ рддреЗ рдХрд░рд╛рд╡реЗрдЪ рд▓рд╛рдЧреЗрд▓. рдЕрд░реЗрд░реЗ #рей...
рдХреЕрд╢рд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА/рдирдВрддрд░ рдбреЗрдЯрд╛рдмреЗрд╕рд▓рд╛ рдкрд╛рдард╡рд▓реЗрд▓реНрдпрд╛ рд░реЗрдХреЙрд░реНрдбрдЪреНрдпрд╛ рд╕рдВрдЦреНрдпреЗрддреАрд▓ рдлрд░рдХ рд╕реНрдкрд╖реНрдЯ рдЖрд╣реЗ:

рдЖрдгрд┐ рд╕реНрдЯреЛрд░реЗрдЬрд╡рд░реАрд▓ рднрд╛рд░ рдХрдореА рд╣реЛрдгреНрдпрд╛рдорд╛рдЧреАрд▓ рд╣реЗ рдЖрд╣реЗ:

рдПрдХреВрдг
"рдЯреЗрд░рд╛рдмрд╛рдЗрдЯреНрд╕ рдкреНрд░рддрд┐ рджрд┐рд╡рд╕" тАЛтАЛрдлрдХреНрдд рднрдпрд╛рдирдХ рд╡рд╛рдЯрддреЗ. рдЬрд░ рддреБрдореНрд╣реА рд╕рд░реНрд╡рдХрд╛рд╣реА рдмрд░реЛрдмрд░ рдХреЗрд▓реЗ рддрд░ рддреЗ рдлрдХреНрдд реи^рекреж рдмрд╛рдЗрдЯреНрд╕ / реоремрекрежреж рд╕реЗрдХрдВрдж = ~резреи.релMB/рд╕реЗрдХрдВрдж, рдЬреЗ рдбреЗрд╕реНрдХрдЯреЙрдк IDE рд╕реНрдХреНрд░реВ рджреЗрдЦреАрд▓ рдзрд░реВ рд╢рдХрддрд╛рдд. ЁЯЩВ
рдкрдг рдЧрдВрднреАрд░рдкрдгреЗ, рджрд┐рд╡рд╕рд╛ рджрд╣рд╛рдкрдЯ рднрд╛рд░ "рддрд┐рд░рдкреЗ" рдЕрд╕рддрд╛рдирд╛рд╣реА, рддреБрдореНрд╣реА рдЖрдзреБрдирд┐рдХ SSD рдЪреНрдпрд╛ рдХреНрд╖рдорддрд╛рдВрдордзреНрдпреЗ рд╕рд╣рдЬрдкрдгреЗ рдмрд╕реВ рд╢рдХрддрд╛.

рд╕реНрддреНрд░реЛрдд: www.habr.com
