рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕: тАЛтАЛрдмреНрд▓реЛрдЯ, pg_repack рдЖрдгрд┐ рд╕реНрдердЧрд┐рдд рдорд░реНрдпрд╛рджрд╛

рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕: тАЛтАЛрдмреНрд▓реЛрдЯ, pg_repack рдЖрдгрд┐ рд╕реНрдердЧрд┐рдд рдорд░реНрдпрд╛рджрд╛

рдЯреЗрдмрд▓реНрд╕ рдЖрдгрд┐ рдЗрдВрдбреЗрдХреНрд╕реЗрд╕рд╡рд░ рдмреНрд▓реЛрдЯрдЪрд╛ рдкреНрд░рднрд╛рд╡ рд╡реНрдпрд╛рдкрдХрдкрдгреЗ рдЬреНрдЮрд╛рдд рдЖрд╣реЗ рдЖрдгрд┐ рдХреЗрд╡рд│ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕рдордзреНрдпреЗрдЪ рдирд╛рд╣реА. рд╡реНрд╣реЕрдХреНрдпреВрдо рдлреБрд▓ рдХрд┐рдВрд╡рд╛ рдХреНрд▓рд╕реНрдЯрд░ рд╕рд╛рд░рдЦреНрдпрд╛ рдмреЙрдХреНрд╕рдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ рд╣рд╛рддрд╛рд│рдгреНрдпрд╛рдЪреЗ рдорд╛рд░реНрдЧ рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рддреЗ рдСрдкрд░реЗрд╢рди рджрд░рдореНрдпрд╛рди рдЯреЗрдмрд▓ рд▓реЙрдХ рдХрд░рддрд╛рдд рдЖрдгрд┐ рдореНрд╣рдгреВрди рдиреЗрд╣рдореА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реАрдд.

рд▓реЗрдЦрд╛рдд рдмреНрд▓реЛрдЯ рдХрд╕рд╛ рд╣реЛрддреЛ, рддреБрдореНрд╣реА рддреНрдпрд╛рдЪрд╛ рдХрд╕рд╛ рд╕рд╛рдордирд╛ рдХрд░реВ рд╢рдХрддрд╛, рд▓рд╛рдВрдмрдгреАрд╡рд░ рдЯрд╛рдХрд▓реЗрд▓реНрдпрд╛ рдорд░реНрдпрд╛рджрд╛рдВрдмрджреНрджрд▓ рдЖрдгрд┐ pg_repack рдПрдХреНрд╕реНрдЯреЗрдВрд╢рдирдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рдд рдпреЗрдгрд╛рд▒реНрдпрд╛ рд╕рдорд╕реНрдпрд╛рдВрдмрджреНрджрд▓ рдереЛрдбрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдЕрд╕реЗрд▓.

рдпрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╣рд╛ рд▓реЗрдЦ рд▓рд┐рд╣рд┐рд▓рд╛ рдЖрд╣реЗ рдорд╛рдЭреЗ рднрд╛рд╖рдг PgConf.Russia 2020 рдпреЗрдереЗ.

рд╕реВрдЬ рдХрд╛ рдпреЗрддреЗ?

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

рдЕрд░реНрдерд╛рдд, рдпрд╛ рд╕рд░реНрд╡ рдЖрд╡реГрддреНрддреНрдпрд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ рдореЗрдорд░реА рдкреГрд╖реНрдард╛рд╕рд╣ рдкреГрд╖реНрдард╛рдиреБрд╕рд╛рд░ рдХрд╛рд░реНрдп рдХрд░рддреЗ рдЖрдгрд┐ рдкреГрд╖реНрда рдореНрд╣рдгрдЬреЗ рдбрд┐рд╕реНрдХрд╡рд░реВрди рд╡рд╛рдЪрддрд╛ рдХрд┐рдВрд╡рд╛ рд▓рд┐рдЦрд┐рдд рдбреЗрдЯрд╛рдЪреА рдХрд┐рдорд╛рди рд░рдХреНрдХрдо рдЕрд╕рддреЗ. рд╣реЗ рдХрд╕реЗ рдШрдбрддреЗ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд▓рд╣рд╛рди рдЙрджрд╛рд╣рд░рдг рдкрд╛рд╣реВ.

рд╕рдордЬрд╛ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдПрдХ рдЯреЗрдмрд▓ рдЖрд╣реЗ рдЬреНрдпрд╛рдордзреНрдпреЗ рдЖрдореНрд╣реА рдЕрдиреЗрдХ рд░реЗрдХреЙрд░реНрдб рдЬреЛрдбрд▓реНрдпрд╛ рдЖрд╣реЗрдд. рдирд╡реАрди рдбреЗрдЯрд╛ рдлрд╛рдЗрд▓рдЪреНрдпрд╛ рдкрд╣рд┐рд▓реНрдпрд╛ рдкрд╛рдирд╛рд╡рд░ рджрд┐рд╕реВ рд▓рд╛рдЧрд▓рд╛ рдЖрд╣реЗ рдЬреЗрдереЗ рдЯреЗрдмрд▓ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдЖрд╣реЗ. рдпрд╛ рдкрдВрдХреНрддреАрдВрдЪреНрдпрд╛ рдереЗрдЯ рдЖрд╡реГрддреНрддреНрдпрд╛ рдЖрд╣реЗрдд рдЬреНрдпрд╛ рдХрдорд┐рдЯрдирдВрддрд░ рдЗрддрд░ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдВрд╕рд╛рдареА рдЙрдкрд▓рдмреНрдз рдЕрд╕рддрд╛рдд (рд╕рд╛рдзреЗрдкрдгрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░реВ рдХреА рдЕрд▓рдЧрд╛рд╡ рдкрд╛рддрд│реА рд╡рд╛рдЪрдиреАрдп рдЖрд╣реЗ).

рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕: тАЛтАЛрдмреНрд▓реЛрдЯ, pg_repack рдЖрдгрд┐ рд╕реНрдердЧрд┐рдд рдорд░реНрдпрд╛рджрд╛

рддреНрдпрд╛рдирдВрддрд░ рдЖрдореНрд╣реА рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯреА рдЕрджреНрдпрддрдирд┐рдд рдХреЗрд▓реА, рдЬреНрдпрд╛рдореБрд│реЗ рдЬреБрдиреА рдЖрд╡реГрддреНрддреА рдпрд╛рдкреБрдвреЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╛рд╣реА рдореНрд╣рдгреВрди рдЪрд┐рдиреНрд╣рд╛рдВрдХрд┐рдд рдХреЗрд▓реА.

рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕: тАЛтАЛрдмреНрд▓реЛрдЯ, pg_repack рдЖрдгрд┐ рд╕реНрдердЧрд┐рдд рдорд░реНрдпрд╛рджрд╛

рдЯрдкреНрдкреНрдпрд╛рдЯрдкреНрдкреНрдпрд╛рдиреЗ, рдкрдВрдХреНрддреАрдЪреНрдпрд╛ рдЖрд╡реГрддреНрддреНрдпрд╛ рдЕрджреНрдпрддрдирд┐рдд рдХрд░рдгреЗ рдЖрдгрд┐ рд╣рдЯрд╡рдгреЗ, рдЖрдореНрд╣реА рдПрдХрд╛ рдкреГрд╖реНрдард╛рд╕рд╣ рд╕рдорд╛рдкреНрдд рдХреЗрд▓реЗ рдЬреНрдпрд╛рдордзреНрдпреЗ рдЕрдВрджрд╛рдЬреЗ рдЕрд░реНрдзрд╛ рдбреЗрдЯрд╛ "рдХрдЪрд░рд╛" рдЖрд╣реЗ. рд╣рд╛ рдбреЗрдЯрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░рд╛рд╕рд╛рдареА рджрд┐рд╕рдд рдирд╛рд╣реА.

рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕: тАЛтАЛрдмреНрд▓реЛрдЯ, pg_repack рдЖрдгрд┐ рд╕реНрдердЧрд┐рдд рдорд░реНрдпрд╛рджрд╛

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

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

рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕: тАЛтАЛрдмреНрд▓реЛрдЯ, pg_repack рдЖрдгрд┐ рд╕реНрдердЧрд┐рдд рдорд░реНрдпрд╛рджрд╛

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

рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕: тАЛтАЛрдмреНрд▓реЛрдЯ, pg_repack рдЖрдгрд┐ рд╕реНрдердЧрд┐рдд рдорд░реНрдпрд╛рджрд╛

рдЬреЗрд╡реНрд╣рд╛ рдЕрд╢рд╛ рд░рд┐рдХрд╛рдореНрдпрд╛ рдХрд┐рдВрд╡рд╛ рдЕрддреНрдпрдВрдд рд╡рд┐рд░рд│ рдкрд╛рдирд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдореЛрдареА рд╣реЛрддреЗ, рдЬреНрдпрд╛рд▓рд╛ рдмреНрд▓реЛрдЯ рдореНрд╣рдгрддрд╛рдд, рддреЗрд╡реНрд╣рд╛ рддреНрдпрд╛рдЪрд╛ рдкрд░рд┐рдгрд╛рдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрд╡рд░ рд╣реЛрдК рд▓рд╛рдЧрддреЛ.

рд╡рд░ рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реА рдкреНрд░рддреНрдпреЗрдХ рдЧреЛрд╖реНрдЯ рдЯреЗрдмрд▓рдордзреНрдпреЗ рдмреНрд▓реЛрдЯ рд╣реЛрдгреНрдпрд╛рдЪреЗ рдпрд╛рдВрддреНрд░рд┐рдХреА рдЖрд╣реЗ. рдЗрдВрдбреЗрдХреНрд╕рдордзреНрдпреЗ рд╣реЗ рддреНрдпрд╛рдЪ рдкреНрд░рдХрд╛рд░реЗ рдШрдбрддреЗ.

рдорд▓рд╛ рд╕реВрдЬ рдЖрд╣реЗ рдХрд╛?

рддреБрдореНрд╣рд╛рд▓рд╛ рд╕реВрдЬ рдЖрд╣реЗ рдХреА рдирд╛рд╣реА рд╣реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреЗ рдЕрдиреЗрдХ рдорд╛рд░реНрдЧ рдЖрд╣реЗрдд. рдкрд╣рд┐рд▓реА рдХрд▓реНрдкрдирд╛ рдореНрд╣рдгрдЬреЗ рдЕрдВрддрд░реНрдЧрдд рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ рдЖрдХрдбреЗрд╡рд╛рд░реА рд╡рд╛рдкрд░рдгреЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рдЯреЗрдмрд▓рдордзреАрд▓ рдкрдВрдХреНрддреАрдВрдЪреА рд╕рдВрдЦреНрдпрд╛, "рд▓рд╛рдЗрд╡реНрд╣" рдкрдВрдХреНрддреАрдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдЗ. рдмрджреНрджрд▓ рдЕрдВрджрд╛рдЬреЗ рдорд╛рд╣рд┐рддреА рдЕрд╕рддреЗ. рддреБрдореНрд╣рд╛рд▓рд╛ рдЗрдВрдЯрд░рдиреЗрдЯрд╡рд░ рддрдпрд╛рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдЪреЗ рдмрд░реЗрдЪ рднрд┐рдиреНрдирддрд╛ рдЖрдврд│реВ рд╢рдХрддрд╛рдд. рдЖрдореНрд╣реА рдЖрдзрд╛рд░ рдореНрд╣рдгреВрди рдШреЗрддрд▓рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ PostgreSQL рддрдЬреНрдЮрд╛рдВрдХрдбреВрди, рдЬреЗ рдЯреЛрд╕реНрдЯ рдЖрдгрд┐ рдмреНрд▓реЛрдЯ рдмреАрдЯреНрд░реА рдЗрдВрдбреЗрдХреНрд╕рд╕рд╣ рдмреНрд▓реЛрдЯ рдЯреЗрдмрд▓реНрд╕рдЪреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реВ рд╢рдХрддрд╛рдд. рдЖрдордЪреНрдпрд╛ рдЕрдиреБрднрд╡рд╛рдд, рддреНрдпрд╛рдЪреА рддреНрд░реБрдЯреА 10-20% рдЖрд╣реЗ.

рджреБрд╕рд░рд╛ рдорд╛рд░реНрдЧ рдореНрд╣рдгрдЬреЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд╛рдкрд░рдгреЗ pgstattuple, рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдкреГрд╖реНрдард╛рдВрдЪреНрдпрд╛ рдЖрдд рдкрд╛рд╣рдгреНрдпрд╛рдЪреА рдЖрдгрд┐ рдЕрдВрджрд╛рдЬреЗ рдЖрдгрд┐ рдЕрдЪреВрдХ рдмреНрд▓реЛрдЯ рдореВрд▓реНрдп рджреЛрдиреНрд╣реА рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ. рдкрд░рдВрддреБ рджреБрд╕рд▒реНрдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рдВрдкреВрд░реНрдг рдЯреЗрдмрд▓ рд╕реНрдХреЕрди рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓.

рдЖрдореНрд╣реА рдПрдХ рд▓рд╣рд╛рди рдмреНрд▓реЛрдЯ рдореВрд▓реНрдп рдорд╛рдирддреЛ, 20% рдкрд░реНрдпрдВрдд, рд╕реНрд╡реАрдХрд╛рд░реНрдп. рд╕рд╛рдареА рдлрд┐рд▓рдлреЕрдХреНрдЯрд░рдЪреЗ рдПрдирд╛рд▓реЙрдЧ рдорд╛рдирд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рдЯреЗрдмрд▓ ╨╕ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ. 50% рдЖрдгрд┐ рддреНрдпрд╛рд╡рд░реАрд▓, рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛ рд╕реБрд░реВ рд╣реЛрдК рд╢рдХрддрд╛рдд.

рдмреНрд▓реЛрдЯрдЪрд╛ рд╕рд╛рдордирд╛ рдХрд░рдгреНрдпрд╛рдЪреЗ рдорд╛рд░реНрдЧ

рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕рдХрдбреЗ рдмреЙрдХреНрд╕рдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ рдмреНрд▓реЛрдЯ рд╣рд╛рддрд╛рд│рдгреНрдпрд╛рдЪреЗ рдЕрдиреЗрдХ рдорд╛рд░реНрдЧ рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рддреЗ рдиреЗрд╣рдореАрдЪ рдкреНрд░рддреНрдпреЗрдХрд╛рд╕рд╛рдареА рдпреЛрдЧреНрдп рдирд╕рддрд╛рдд.

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

AUTOVACUUM рдЯреЗрдмрд▓реНрд╕ рд╕реЛрдмрдд рдареЗрд╡реВ рд╢рдХрдд рдирд╛рд╣реА рдпрд╛рдЪреЗ рдЖрдгрдЦреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░рдг рдореНрд╣рдгрдЬреЗ рддреЗрдереЗ рджреАрд░реНрдШрдХрд╛рд│ рдЪрд╛рд▓рдгрд╛рд░реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдЖрд╣реЗрдд рдЬреЗ рддреНрдпрд╛рд╕ рддреНрдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдВрд╕рд╛рдареА рдЙрдкрд▓рдмреНрдз рдЕрд╕рд▓реЗрд▓рд╛ рдбреЗрдЯрд╛ рд╕рд╛рдл рдХрд░рдгреНрдпрд╛рдкрд╛рд╕реВрди рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддрд╛рдд. рдпреЗрдереЗ рд╢рд┐рдлрд╛рд░рд╕ рджреЗрдЦреАрд▓ рд╕реНрдкрд╖реНрдЯ рдЖрд╣реЗ - "рд▓рдЯрдХрдд" рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдВрдкрд╛рд╕реВрди рдореБрдХреНрдд рд╡реНрд╣рд╛ рдЖрдгрд┐ рд╕рдХреНрд░рд┐рдп рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдВрдЪрд╛ рд╡реЗрд│ рдХрдореА рдХрд░рд╛. рдкрд░рдВрддреБ рдЬрд░ рддреБрдордЪреНрдпрд╛ рдЕрд░реНрдЬрд╛рд╡рд░реАрд▓ рднрд╛рд░ OLAP рдЖрдгрд┐ OLTP рдЪрд╛ рд╕рдВрдХрд░реАрдд рдЕрд╕реЗрд▓, рддрд░ рддреБрдордЪреНрдпрд╛рдХрдбреЗ рдПрдХрд╛рдЪ рд╡реЗрд│реА рдЕрдиреЗрдХ рд╡рд╛рд░рдВрд╡рд╛рд░ рдЕрджреНрдпрддрдиреЗ рдЖрдгрд┐ рд▓рд╣рд╛рди рдХреНрд╡реЗрд░реА, рддрд╕реЗрдЪ рджреАрд░реНрдШрдХрд╛рд▓реАрди рдСрдкрд░реЗрд╢рдиреНрд╕ рдЕрд╕реВ рд╢рдХрддрд╛рдд - рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЕрд╣рд╡рд╛рд▓ рддрдпрд╛рд░ рдХрд░рдгреЗ. рдЕрд╢рд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд, рднрд╛рд░ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рддрд│рд╛рдВрд╡рд░ рдкрд╕рд░рд╡рд┐рдгреНрдпрд╛рдмрджреНрджрд▓ рд╡рд┐рдЪрд╛рд░ рдХрд░рдгреЗ рдпреЛрдЧреНрдп рдЖрд╣реЗ, рдЬреЗ рддреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХрд╛рд▓рд╛ рдЕрдзрд┐рдХ рдмрд╛рд░реАрдХ-рдЯреНрдпреВрдирд┐рдВрдЧ рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрдИрд▓.

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

рдЕрд╢рд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рдХрд╛рдп рдХрд░рд╛рд╡реЗ рдЬреЗрдереЗ рдЖрдкрдг рдСрдЯреЛрд╡реНрд╣реЕрдХреНрдпреБрдо рд╕реЗрдЯ рдХреЗрд▓реЗ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдлреБрдЧрдгреЗ рд╕реБрд░реВрдЪ рдЖрд╣реЗ.

рд╕рдВрдШ рд╡реНрд╣реЕрдХреНрдпреВрдо рдкреВрд░реНрдг рдЯреЗрдмрд▓реНрд╕ рдЖрдгрд┐ рдЗрдВрдбреЗрдХреНрд╕реЗрд╕рдЪреА рд╕рд╛рдордЧреНрд░реА рдкреБрдиреНрд╣рд╛ рддрдпрд╛рд░ рдХрд░рддреЗ рдЖрдгрд┐ рддреНрдпрд╛рдд рдлрдХреНрдд рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдареЗрд╡рддреЛ. рдмреНрд▓реЛрдЯ рджреВрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреЗ рдЙрддреНрддрдо рдкреНрд░рдХрд╛рд░реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ, рдкрд░рдВрддреБ рддреНрдпрд╛рдЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрджрд░рдореНрдпрд╛рди рдЯреЗрдмрд▓рд╡рд░реАрд▓ рдПрдХ рдЕрдирдиреНрдп рд▓реЙрдХ рдХреЕрдкреНрдЪрд░ рдХреЗрд▓реЗ рдЬрд╛рддреЗ (AccessExclusiveLock), рдЬреЗ рдпрд╛ рдЯреЗрдмрд▓рд╡рд░ рдХреНрд╡реЗрд░реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрдгрд╛рд░ рдирд╛рд╣реА, рдЕрдЧрджреА рдирд┐рд╡рдбрддреЗ. рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рддреБрдордЪреА рд╕реЗрд╡рд╛ рдХрд┐рдВрд╡рд╛ рддреНрдпрд╛рдЪрд╛ рдХрд╛рд╣реА рднрд╛рдЧ рдХрд╛рд╣реА рдХрд╛рд│ рдерд╛рдВрдмрд╡рддрд╛ рдпреЗрдд рдЕрд╕реЗрд▓ (рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрдгрд┐ рддреБрдордЪреНрдпрд╛ рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░рдЪреНрдпрд╛ рдЖрдХрд╛рд░рд╛рдиреБрд╕рд╛рд░ рджрд╣рд╛ рдорд┐рдирд┐рдЯрд╛рдВрдкрд╛рд╕реВрди рддреЗ рдХрд┐рддреНрдпреЗрдХ рддрд╛рд╕рд╛рдВрдкрд░реНрдпрдВрдд), рддрд░ рд╣рд╛ рдкрд░реНрдпрд╛рдп рд╕рд░реНрд╡реЛрддреНрддрдо рдЖрд╣реЗ. рджреБрд░реНрджреИрд╡рд╛рдиреЗ, рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдирд┐рдпреЛрдЬрд┐рдд рджреЗрдЦрднрд╛рд▓ рджрд░рдореНрдпрд╛рди рд╡реНрд╣реЕрдХреНрдпреВрдо рдлреБрд▓ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА рд╡реЗрд│ рдирд╛рд╣реА, рддреНрдпрд╛рдореБрд│реЗ рд╣реА рдкрджреНрдзрдд рдЖрдордЪреНрдпрд╛рд╕рд╛рдареА рдпреЛрдЧреНрдп рдирд╛рд╣реА.

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

рд╕рдВрдШ REINDEX рдорд╛рдЧреАрд▓ рджреЛрди рдкреНрд░рдорд╛рдгреЗрдЪ, рдкрд░рдВрддреБ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд┐рдВрд╡рд╛ рд╕рд╛рд░рдгреАрдЪреНрдпрд╛ рд╕рд░реНрд╡ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдкреБрдиреНрд╣рд╛ рддрдпрд╛рд░ рдХрд░рддрд╛рдд. рд▓реЙрдХ рдХрд┐рдВрдЪрд┐рдд рдХрдордХреБрд╡рдд рдЖрд╣реЗрдд: рдЯреЗрдмрд▓рд╡рд░реАрд▓ ShareLock (рдлреЗрд░рдлрд╛рд░ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддреЗ, рдкрд░рдВрддреБ рдирд┐рд╡рдб рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ) рдЖрдгрд┐ рдкреБрдиреНрд╣рд╛ рддрдпрд╛рд░ рд╣реЛрдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХрд╛рд╡рд░реАрд▓ AccessExclusiveLock (рдпрд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдХреНрд╡реЗрд░реА рдЕрд╡рд░реЛрдзрд┐рдд рдХрд░рддреЗ). рддрдерд╛рдкрд┐, рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕рдЪреНрдпрд╛ 12 рд╡реНрдпрд╛ рдЖрд╡реГрддреНрддреАрдордзреНрдпреЗ рдПрдХ рдкреЕрд░рд╛рдореАрдЯрд░ рджрд┐рд╕рд▓рд╛ рдПрдХрд╛рдЪ рд╡реЗрд│реА, рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рдорд╡рд░реНрддреА рдЬреЛрдбрдгреЗ, рдмрджрд▓ рдХрд░рдгреЗ рдХрд┐рдВрд╡рд╛ рд░реЗрдХреЙрд░реНрдб рд╣рдЯрд╡рдгреЗ рдЕрд╡рд░реЛрдзрд┐рдд рди рдХрд░рддрд╛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдкреБрдиреНрд╣рд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ.

Postgres рдЪреНрдпрд╛ рдкреВрд░реНрд╡реАрдЪреНрдпрд╛ рдЖрд╡реГрддреНрддреНрдпрд╛рдВрдордзреНрдпреЗ, рддреБрдореНрд╣реА рд╡рд╛рдкрд░реВрди REINDEX рд╕рд╛рд░рдЦрд╛рдЪ рдкрд░рд┐рдгрд╛рдо рдорд┐рд│рд╡реВ рд╢рдХрддрд╛ рдПрдХрд╛рдЪрд╡реЗрд│реА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рддрдпрд╛рд░ рдХрд░рд╛. рд╣реЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрдареЛрд░ рд▓реЙрдХрд┐рдВрдЧрд╢рд┐рд╡рд╛рдп рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ (ShareUpdateExclusiveLock, рдЬреЗ рд╕рдорд╛рдВрддрд░ рдкреНрд░рд╢реНрдирд╛рдВрдордзреНрдпреЗ рд╡реНрдпрддреНрдпрдп рдЖрдгрдд рдирд╛рд╣реА), рдирдВрддрд░ рдЬреБрдирд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдирд╡реАрдирд╕рд╣ рдмрджрд▓рд╛ рдЖрдгрд┐ рдЬреБрдирд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╣рдЯрд╡рд╛. рд╣реЗ рддреБрдореНрд╣рд╛рд▓рд╛ рддреБрдордЪреНрдпрд╛ рдЕрд░реНрдЬрд╛рдордзреНрдпреЗ рд╣рд╕реНрддрдХреНрд╖реЗрдк рди рдХрд░рддрд╛ рдЗрдВрдбреЗрдХреНрд╕ рдмреНрд▓реЛрдЯ рджреВрд░ рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ. рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдХреА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХрд╛рдВрдЪреА рдкреБрдирд░реНрдмрд╛рдВрдзрдгреА рдХрд░рддрд╛рдирд╛ рдбрд┐рд╕реНрдХ рд╕рдмрд╕рд┐рд╕реНрдЯрдорд╡рд░ рдЕрддрд┐рд░рд┐рдХреНрдд рднрд╛рд░ рдЕрд╕реЗрд▓.

рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ, рдЬрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХрд╛рдВрд╕рд╛рдареА тАЬрдорд╛рд╢реАрд╡рд░тАЭ рдмреНрд▓реЛрдЯ рджреВрд░ рдХрд░рдгреНрдпрд╛рдЪреЗ рдорд╛рд░реНрдЧ рдЕрд╕рддреАрд▓ рддрд░ рдЯреЗрдмрд▓рд╕рд╛рдареА рдХрд╛рд╣реАрд╣реА рдирд╛рд╣реА. рдпреЗрдереЗ рд╡рд┐рд╡рд┐рдз рдмрд╛рд╣реНрдп рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛рд░реНрдпрд╛рдд рдпреЗрддрд╛рдд: pg_repack (рдкреВрд░реНрд╡реА pg_reorg), pgcompact, pgcompacttable рдЖрдгрд┐ рдЗрддрд░. рдпрд╛ рд▓реЗрдЦрд╛рдд, рдореА рддреНрдпрд╛рдВрдЪреА рддреБрд▓рдирд╛ рдХрд░рдгрд╛рд░ рдирд╛рд╣реА рдЖрдгрд┐ рдлрдХреНрдд pg_repack рдмрджреНрджрд▓ рдмреЛрд▓реЗрди, рдЬреЗ рдХрд╛рд╣реА рдмрджрд▓ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдЖрдореНрд╣реА рд╕реНрд╡рддрдГ рд╡рд╛рдкрд░рддреЛ.

pg_repack рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ

рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕: тАЛтАЛрдмреНрд▓реЛрдЯ, pg_repack рдЖрдгрд┐ рд╕реНрдердЧрд┐рдд рдорд░реНрдпрд╛рджрд╛
рд╕рдордЬрд╛ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдкреВрд░реНрдгрдкрдгреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рд╛рд░рдгреА рдЖрд╣реЗ - рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ, рдирд┐рд░реНрдмрдВрдз рдЖрдгрд┐ рджреБрд░реНрджреИрд╡рд╛рдиреЗ, рдмреНрд▓реЛрдЯрд╕рд╣. pg_repack рдЪреА рдкрд╣рд┐рд▓реА рдкрд╛рдпрд░реА рдореНрд╣рдгрдЬреЗ рдЪрд╛рд▓реВ рдЕрд╕рддрд╛рдирд╛ рд╕рд░реНрд╡ рдмрджрд▓рд╛рдВрдмрджреНрджрд▓ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд▓реЙрдЧ рдЯреЗрдмрд▓ рддрдпрд╛рд░ рдХрд░рдгреЗ. рдЯреНрд░рд┐рдЧрд░ рдкреНрд░рддреНрдпреЗрдХ рдШрд╛рд▓рд╛, рдЕрдкрдбреЗрдЯ рдЖрдгрд┐ рд╣рдЯрд╡рдгреНрдпрд╛рд╕рд╛рдареА рдпрд╛ рдмрджрд▓рд╛рдВрдЪреА рдкреНрд░рддрд┐рдХреГрддреА рддрдпрд╛рд░ рдХрд░реЗрд▓. рдордЧ рдПрдХ рд╕рд╛рд░рдгреА рддрдпрд╛рд░ рдХреЗрд▓реА рдЬрд╛рддреЗ, рдореВрд│ рд╕рдВрд░рдЪрдиреЗрдкреНрд░рдорд╛рдгреЗрдЪ, рдкрд░рдВрддреБ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЖрдгрд┐ рдирд┐рд░реНрдмрдВрдзрд╛рдВрд╢рд┐рд╡рд╛рдп, рдЬреЗрдгреЗрдХрд░реВрди рдбреЗрдЯрд╛ рдШрд╛рд▓рдгреНрдпрд╛рдЪреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдордВрдж рд╣реЛрдК рдирдпреЗ.

рдкреБрдвреЗ, pg_repack рдЬреБрдиреНрдпрд╛ рд╕рд╛рд░рдгреАрддреВрди рдирд╡реАрди рд╕рд╛рд░рдгреАрд╡рд░ рдбреЗрдЯрд╛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ, рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рд╕рд░реНрд╡ рдЕрд╕рдВрдмрджреНрдз рдкрдВрдХреНрддреА рдлрд┐рд▓реНрдЯрд░ рдХрд░рддреЗ рдЖрдгрд┐ рдирдВрддрд░ рдирд╡реАрди рд╕рд╛рд░рдгреАрд╕рд╛рдареА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рддрдпрд╛рд░ рдХрд░рддреЗ. рдпрд╛ рд╕рд░реНрд╡ рдСрдкрд░реЗрд╢рдиреНрд╕рдЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрджрд░рдореНрдпрд╛рди, рд▓реЙрдЧ рдЯреЗрдмрд▓рдордзреНрдпреЗ рдмрджрд▓ рдЬрдорд╛ рд╣реЛрддрд╛рдд.

рдкреБрдвреАрд▓ рдкрд╛рдпрд░реА рдореНрд╣рдгрдЬреЗ рдмрджрд▓ рдирд╡реАрди рд╕рд╛рд░рдгреАрдордзреНрдпреЗ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдгреЗ. рд╕реНрдерд▓рд╛рдВрддрд░ рдЕрдиреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддреНрдпрд╛рдВрдордзреНрдпреЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рдЖрдгрд┐ рд▓реЙрдЧ рдЯреЗрдмрд▓рдордзреНрдпреЗ 20 рдкреЗрдХреНрд╖рд╛ рдХрдореА рдиреЛрдВрджреА рд╢рд┐рд▓реНрд▓рдХ рдЕрд╕рддрд╛рдирд╛, pg_repack рдПрдХ рдордЬрдмреВрдд рд▓реЙрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ, рдирд╡реАрдирддрдо рдбреЗрдЯрд╛ рд╕реНрдерд▓рд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рдЖрдгрд┐ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ рд╕рд┐рд╕реНрдЯрдо рдЯреЗрдмрд▓рдордзреАрд▓ рдЬреБрдиреНрдпрд╛ рдЯреЗрдмрд▓рд▓рд╛ рдирд╡реАрдирд╕рд╣ рдмрджрд▓рддреЗ. рд╣рд╛ рдПрдХрдореЗрд╡ рдЖрдгрд┐ рдЕрддрд┐рд╢рдп рд▓рд╣рд╛рди рд╡реЗрд│ рдЖрд╣реЗ рдЬреЗрд╡реНрд╣рд╛ рдЖрдкрдг рдЯреЗрдмрд▓рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдирд╕рд╛рд▓. рдпрд╛рдирдВрддрд░, рдЬреБрдиреЗ рдЯреЗрдмрд▓ рдЖрдгрд┐ рд▓реЙрдЧ рдЕрд╕рд▓реЗрд▓реЗ рдЯреЗрдмрд▓ рд╣рдЯрд╡рд▓реЗ рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдордордзреНрдпреЗ рдЬрд╛рдЧрд╛ рдореЛрдХрд│реА рдХреЗрд▓реА рдЬрд╛рддреЗ. рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд░реНрдг рдЭрд╛рд▓реА рдЖрд╣реЗ.

рд╕рд┐рджреНрдзрд╛рдВрддрд╛рдордзреНрдпреЗ рд╕рд░реНрд╡ рдХрд╛рд╣реА рдЫрд╛рди рджрд┐рд╕рддреЗ, рдкрд░рдВрддреБ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдд рдХрд╛рдп рд╣реЛрддреЗ? рдЖрдореНрд╣реА pg_repack рдЪреА рд▓реЛрдб рди рдХрд░рддрд╛ рдЖрдгрд┐ рд▓реЛрдбрдЦрд╛рд▓реА рдЪрд╛рдЪрдгреА рдХреЗрд▓реА рдЖрдгрд┐ рдЕрдХрд╛рд▓реА рдерд╛рдВрдмрдгреНрдпрд╛рдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд (рджреБрд╕рд▒реНрдпрд╛ рд╢рдмреНрджрд╛рдд, Ctrl+C рд╡рд╛рдкрд░реВрди) рддреНрдпрд╛рдЪреЗ рдСрдкрд░реЗрд╢рди рддрдкрд╛рд╕рд▓реЗ. рд╕рд░реНрд╡ рдЪрд╛рдЪрдгреНрдпрд╛ рдкреЙрдЭрд┐рдЯрд┐рд╡реНрд╣ рдЖрд▓реНрдпрд╛.

рдЖрдореНрд╣реА рдлреВрдб рд╕реНрдЯреЛрдЕрд░рдордзреНрдпреЗ рдЧреЗрд▓реЛ - рдЖрдгрд┐ рдирдВрддрд░ рд╕рд░реНрд╡рдХрд╛рд╣реА рдЖрдордЪреНрдпрд╛ рдЕрдкреЗрдХреНрд╖реЗрдкреНрд░рдорд╛рдгреЗ рдЭрд╛рд▓реЗ рдирд╛рд╣реА.

рдкреНрд░рдердо рдкреЕрдирдХреЗрдХ рд╡рд┐рдХреНрд░реАрд╡рд░ рдЖрд╣реЗ

рдкрд╣рд┐рд▓реНрдпрд╛ рдХреНрд▓рд╕реНрдЯрд░рд╡рд░ рдЖрдореНрд╣рд╛рд▓рд╛ рдЕрдирдиреНрдп рдкреНрд░рддрд┐рдмрдВрдзрд╛рдЪреНрдпрд╛ рдЙрд▓реНрд▓рдВрдШрдирд╛рдмрджреНрджрд▓ рддреНрд░реБрдЯреА рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реА:

$ ./pg_repack -t tablename -o id
INFO: repacking table "tablename"
ERROR: query failed: 
    ERROR: duplicate key value violates unique constraint "index_16508"
DETAIL:  Key (id, index)=(100500, 42) already exists.

рдпрд╛ рдорд░реНрдпрд╛рджреЗрдд рд╕реНрд╡рдпрдВ-рд╡реНрдпреБрддреНрдкрдиреНрди рдирд╛рд╡ index_16508 рд╣реЛрддреЗ - рддреЗ pg_repack рджреНрд╡рд╛рд░реЗ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рд╣реЛрддреЗ. рддреНрдпрд╛рдЪреНрдпрд╛ рд░рдЪрдирд╛рдордзреНрдпреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЧреБрдгрдзрд░реНрдорд╛рдВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд, рдЖрдореНрд╣реА рддреНрдпрд╛рдЪреНрдпрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд "рдЖрдордЪреА" рдорд░реНрдпрд╛рджрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреЗрд▓реА. рд╕рдорд╕реНрдпрд╛ рдЕрд╢реА рдЭрд╛рд▓реА рдХреА рд╣реА рдкреВрд░реНрдгрдкрдгреЗ рд╕рд╛рдорд╛рдиреНрдп рдорд░реНрдпрд╛рджрд╛ рдирд╛рд╣реА, рдкрд░рдВрддреБ рдПрдХ рд╕реНрдердЧрд┐рдд (рд╕реНрдердЧрд┐рдд рдорд░реНрдпрд╛рджрд╛), рдореНрд╣рдгрдЬреЗ рддреНрдпрд╛рдЪреА рдкрдбрддрд╛рд│рдгреА sql рдХрдорд╛рдВрдбрдкреЗрдХреНрд╖рд╛ рдирдВрддрд░ рдХреЗрд▓реА рдЬрд╛рддреЗ, рдЬреНрдпрд╛рдореБрд│реЗ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рд╣реЛрддрд╛рдд.

рд╕реНрдердЧрд┐рдд рдорд░реНрдпрд╛рджрд╛: рддреНрдпрд╛рдВрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдЖрд╣реЗ рдЖрдгрд┐ рддреЗ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд

рд╕реНрдердЧрд┐рдд рдирд┐рд░реНрдмрдВрдзрд╛рдВрдмрджреНрджрд▓ рдереЛрдбрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд.
рдЪрд▓рд╛ рдПрдХ рд╕рд╛рдзреЗ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрдК рдпрд╛: рдЖрдордЪреНрдпрд╛рдХрдбреЗ рджреЛрди рдЧреБрдгрдзрд░реНрдорд╛рдВрд╕рд╣ рдХрд╛рд░рдЪреЗ рдЯреЗрдмрд▓-рд╕рдВрджрд░реНрдн рдкреБрд╕реНрддрдХ рдЖрд╣реЗ - рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрддреАрд▓ рдХрд╛рд░рдЪреЗ рдирд╛рд╡ рдЖрдгрд┐ рдХреНрд░рдо.
рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕: тАЛтАЛрдмреНрд▓реЛрдЯ, pg_repack рдЖрдгрд┐ рд╕реНрдердЧрд┐рдд рдорд░реНрдпрд╛рджрд╛

create table cars
(
  name text constraint pk_cars primary key,
  ord integer not null constraint uk_cars unique
);



рд╕рдордЬрд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдкрд╣рд┐рд▓реА рдЖрдгрд┐ рджреБрд╕рд░реА рдХрд╛рд░ рд╕реНрд╡реЕрдк рдХрд░рд╛рдпрдЪреА рдЖрд╣реЗ. рд╕рд░рд│ рдЙрдкрд╛рдп рдореНрд╣рдгрдЬреЗ рдкрд╣рд┐рд▓реЗ рдореВрд▓реНрдп рджреБрд╕-рдпрд╛рд╡рд░ рдЖрдгрд┐ рджреБрд╕рд░реЗ рдкреНрд░рдердо рдореВрд▓реНрдпрд╛рд╡рд░ рдЕрджреНрдпрддрдирд┐рдд рдХрд░рдгреЗ:

begin;
  update cars set ord = 2 where name = 'audi';
  update cars set ord = 1 where name = 'bmw';
commit;

рдкрд░рдВрддреБ рдЬреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣реА рд╣рд╛ рдХреЛрдб рдЪрд╛рд▓рд╡рддреЛ, рддреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣реА рдорд░реНрдпрд╛рджрд╛ рдЙрд▓реНрд▓рдВрдШрдирд╛рдЪреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЛ рдХрд╛рд░рдг рдЯреЗрдмрд▓рдордзреАрд▓ рдореВрд▓реНрдпрд╛рдВрдЪрд╛ рдХреНрд░рдо рдЕрджреНрд╡рд┐рддреАрдп рдЖрд╣реЗ:

[23305] ERROR: duplicate key value violates unique constraint тАЬuk_carsтАЭ
Detail: Key (ord)=(2) already exists.

рдореА рддреЗ рд╡реЗрдЧрд│реНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ рдХрд╕реЗ рдХрд░реВ рд╢рдХрддреЛ? рдкрд░реНрдпрд╛рдп рдПрдХ: рдЯреЗрдмрд▓рдордзреНрдпреЗ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдирд╕рдгреНрдпрд╛рдЪреА рд╣рдореА рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдСрд░реНрдбрд░рдордзреНрдпреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдореВрд▓реНрдп рдмрджрд▓рд╛, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде тАЬ-1тАЭ. рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧрдордзреНрдпреЗ, рдпрд╛рд▓рд╛ "рджреЛрди рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдЪреНрдпрд╛ рд╡реНрд╣реЕрд▓реНрдпреВрдЬрдЪреА рддрд┐рд╕рд░реАрджреНрд╡рд╛рд░реЗ рджреЗрд╡рд╛рдгрдШреЗрд╡рд╛рдг рдХрд░рдгреЗ" рдЕрд╕реЗ рдореНрд╣рдгрддрд╛рдд. рдпрд╛ рдкрджреНрдзрддреАрдЪрд╛ рдПрдХрдорд╛рддреНрд░ рджреЛрд╖ рдореНрд╣рдгрдЬреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрджреНрдпрддрди.

рдкрд░реНрдпрд╛рдп рджреЛрди: рдкреВрд░реНрдгрд╛рдВрдХрд╛рдВрдРрд╡рдЬреА рдСрд░реНрдбрд░ рдореВрд▓реНрдпрд╛рд╕рд╛рдареА рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЯреЗрдмрд▓рдЪреА рдкреБрдирд░реНрд░рдЪрдирд╛ рдХрд░рд╛. рдирдВрддрд░, рдореВрд▓реНрдп 1 рд╡рд░реВрди рдЕрджреНрдпрддрдирд┐рдд рдХрд░рддрд╛рдирд╛, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, 2.5 рд╡рд░, рдкрд╣рд┐рд▓реА рдПрдВрдЯреНрд░реА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рджреБрд╕рд░реНтАНрдпрд╛ рдЖрдгрд┐ рддрд┐рд╕рд░реНтАНрдпрд╛ рджрд░рдореНрдпрд╛рди "рд╕реНрдЯрдБрдб" рд╣реЛрдИрд▓. рд╣реЗ рд╕рдорд╛рдзрд╛рди рдХрд╛рд░реНрдп рдХрд░рддреЗ, рдкрд░рдВрддреБ рджреЛрди рдорд░реНрдпрд╛рджрд╛ рдЖрд╣реЗрдд. рдкреНрд░рдердо, рдЗрдВрдЯрд░рдлреЗрд╕рдордзреНрдпреЗ рдореВрд▓реНрдп рдХреБрдареЗрддрд░реА рд╡рд╛рдкрд░рд▓реЗ рдЕрд╕рд▓реНрдпрд╛рд╕ рддреЗ рдЖрдкрд▓реНрдпрд╛рд╕рд╛рдареА рдХрд╛рд░реНрдп рдХрд░рдгрд╛рд░ рдирд╛рд╣реА. рджреБрд╕рд░реЗ, рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░рд╛рдЪреНрдпрд╛ рдЕрдЪреВрдХрддреЗрд╡рд░ рдЕрд╡рд▓рдВрдмреВрди, рд╕рд░реНрд╡ рдиреЛрдВрджреАрдВрдЪреНрдпрд╛ рдореВрд▓реНрдпрд╛рдВрдЪреА рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА рддреБрдордЪреНрдпрд╛рдХрдбреЗ рдорд░реНрдпрд╛рджрд┐рдд рд╕рдВрдЦреНрдпреЗрдд рд╕рдВрднрд╛рд╡реНрдп рдЗрдиреНрд╕рд░реНрдЯреНрд╕ рдЕрд╕рддреАрд▓.

рдкрд░реНрдпрд╛рдп рддреАрди: рдорд░реНрдпрд╛рджрд╛ рдкреБрдвреЗ рдврдХрд▓рдгреЗ рдЬреЗрдгреЗрдХрд░реВрди рддреЗ рдХреЗрд╡рд│ рдХрдорд┐рдЯрдЪреНрдпрд╛ рд╡реЗрд│реА рддрдкрд╛рд╕рд▓реЗ рдЬрд╛рдИрд▓:

create table cars
(
  name text constraint pk_cars primary key,
  ord integer not null constraint uk_cars unique deferrable initially deferred
);

рдЖрдордЪреНрдпрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рдирдВрддреАрдЪреЗ рддрд░реНрдХ рд╣реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рдХреА рд╡рдЪрдирдмрджреНрдзрддреЗрдЪреНрдпрд╛ рд╡реЗрд│реА рд╕рд░реНрд╡ рдореВрд▓реНрдпреЗ рдЕрджреНрд╡рд┐рддреАрдп рдЖрд╣реЗрдд, рддреЗ рдпрд╢рд╕реНрд╡реА рд╣реЛрдИрд▓.

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

рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдкреНрд░рддрд┐рдмрдВрдзрд╛рдЪреНрдпрд╛ рдкреНрд░рдХрд╛рд░рд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди, рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕рдордзреНрдпреЗ рддреЗ рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА рдЧреНрд░реЕрдиреНрдпреБрд▓реЕрд░рд┐рдЯреАрдЪреЗ рддреАрди рд╕реНрддрд░ рдЕрд╕рддрд╛рдд: рдкрдВрдХреНрддреА, рд╡реНрдпрд╡рд╣рд╛рд░ рдЖрдгрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддреА рдкрд╛рддрд│реА.
рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕: тАЛтАЛрдмреНрд▓реЛрдЯ, pg_repack рдЖрдгрд┐ рд╕реНрдердЧрд┐рдд рдорд░реНрдпрд╛рджрд╛
рд╕реНрддреНрд░реЛрдд: begriffs

CHECK рдЖрдгрд┐ NOT NULL рдиреЗрд╣рдореА рдкрдВрдХреНрддреА рд╕реНрддрд░рд╛рд╡рд░ рддрдкрд╛рд╕рд▓реЗ рдЬрд╛рддрд╛рдд; рдЗрддрд░ рдкреНрд░рддрд┐рдмрдВрдзрд╛рдВрд╕рд╛рдареА, рдЬрд╕реЗ рдХреА рдЯреЗрдмрд▓рд╡рд░реВрди рдкрд╛рд╣рд┐рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ, рднрд┐рдиреНрди рдкрд░реНрдпрд╛рдп рдЖрд╣реЗрдд. рдЖрдкрдг рдЕрдзрд┐рдХ рд╡рд╛рдЪреВ рд╢рдХрддрд╛ рдпреЗрдереЗ.

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

pg_repack рдЪреА рд╕реБрдзрд╛рд░рдгрд╛

рдЖрдореНрд╣реА рдкреБрдвреЗ рдврдХрд▓рд▓реЗрд▓реНрдпрд╛ рдорд░реНрдпрд╛рджрд╛ рдХрд╛рдп рдЖрд╣реЗрдд рддреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдЖрд╣реЗ, рдкрд░рдВрддреБ рддреЗ рдЖрдордЪреНрдпрд╛ рд╕рдорд╕реНрдпреЗрд╢реА рдХрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗрдд? рдЖрдзреА рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗрд▓реА рддреНрд░реБрдЯреА рд▓рдХреНрд╖рд╛рдд рдареЗрд╡реВрдпрд╛:

$ ./pg_repack -t tablename -o id
INFO: repacking table "tablename"
ERROR: query failed: 
    ERROR: duplicate key value violates unique constraint "index_16508"
DETAIL:  Key (id, index)=(100500, 42) already exists.

рдЬреЗрд╡реНрд╣рд╛ рд▓реЙрдЧ рдЯреЗрдмрд▓рд╡рд░реВрди рдирд╡реАрди рдЯреЗрдмрд▓рд╡рд░ рдбреЗрдЯрд╛ рдХреЙрдкреА рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рддреЗрд╡реНрд╣рд╛ рдЕрд╕реЗ рд╣реЛрддреЗ. рд╣реЗ рд╡рд┐рдЪрд┐рддреНрд░ рджрд┐рд╕рддреЗ рдХрд╛рд░рдг... рд▓реЙрдЧ рдЯреЗрдмрд▓рдордзреАрд▓ рдбреЗрдЯрд╛ рд╕реНрддреНрд░реЛрдд рдЯреЗрдмрд▓рдордзреАрд▓ рдбреЗрдЯрд╛рд╕рд╣ рд╡рдЪрдирдмрджреНрдз рдЖрд╣реЗ. рдЬрд░ рддреЗ рдореВрд│ рддрдХреНрддреНрдпрд╛рддреАрд▓ рдорд░реНрдпрд╛рджрд╛ рдкреВрд░реНрдг рдХрд░рдд рдЕрд╕рддреАрд▓, рддрд░ рдирд╡реАрди рдЯреЗрдмрд▓рдордзреНрдпреЗ рддреЗ рддреНрдпрд╛рдЪ рдорд░реНрдпрд╛рджрд╛рдВрдЪреЗ рдЙрд▓реНрд▓рдВрдШрди рдХрд╕реЗ рдХрд░реВ рд╢рдХрддрд╛рдд?

рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА, рд╕рдорд╕реНрдпреЗрдЪреЗ рдореВрд│ pg_repack рдЪреНрдпрд╛ рдорд╛рдЧреАрд▓ рдЪрд░рдгрд╛рдд рдЖрд╣реЗ, рдЬреЗ рдХреЗрд╡рд│ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рддрдпрд╛рд░ рдХрд░рддреЗ, рдкрд░рдВрддреБ рдорд░реНрдпрд╛рджрд╛ рдирд╛рд╣реАрдд: рдЬреБрдиреНрдпрд╛ рдЯреЗрдмрд▓рдордзреНрдпреЗ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдорд░реНрдпрд╛рджрд╛ рд╣реЛрддреА рдЖрдгрд┐ рддреНрдпрд╛рдРрд╡рдЬреА рдирд╡реАрдирдиреЗ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рддрдпрд╛рд░ рдХреЗрд▓реА.

рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕: тАЛтАЛрдмреНрд▓реЛрдЯ, pg_repack рдЖрдгрд┐ рд╕реНрдердЧрд┐рдд рдорд░реНрдпрд╛рджрд╛

рдпреЗрдереЗ рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрдгреЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ рдХреА рдЬрд░ рдорд░реНрдпрд╛рджрд╛ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╕реЗрд▓ рдЖрдгрд┐ рдкреБрдвреЗ рдврдХрд▓рд▓реА рдирд╕реЗрд▓, рддрд░ рддреНрдпрд╛рдРрд╡рдЬреА рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓рд╛ рдЕрджреНрд╡рд┐рддреАрдп рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдпрд╛ рдирд┐рд░реНрдмрдВрдзрд╛рдЪреНрдпрд╛ рд╕рдорддреБрд▓реНрдп рдЖрд╣реЗ, рдХрд╛рд░рдг рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕рдордзреАрд▓ рдЕрджреНрд╡рд┐рддреАрдп рдорд░реНрдпрд╛рджрд╛ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рддрдпрд╛рд░ рдХрд░реВрди рд▓рд╛рдЧреВ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд. рдкрд░рдВрддреБ рд╡рд┐рд▓рдВрдмрд┐рдд рдорд░реНрдпрд╛рджрд╛рдВрдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рд╡рд░реНрддрди рд╕рдорд╛рди рдирд╕рддреЗ, рдХрд╛рд░рдг рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреБрдвреЗ рдврдХрд▓рд▓рд╛ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА рдЖрдгрд┐ sql рдХрдорд╛рдВрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╣реЛрддрд╛рдирд╛ рдиреЗрд╣рдореА рддрдкрд╛рд╕рд▓рд╛ рдЬрд╛рддреЛ.

рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ, рд╕рдорд╕реНрдпреЗрдЪреЗ рд╕рд╛рд░ рдЪреЗрдХрдЪреНрдпрд╛ "рд╡рд┐рд▓рдВрдм" рдордзреНрдпреЗ рдЖрд╣реЗ: рдореВрд│ рдЯреЗрдмрд▓рдордзреНрдпреЗ рддреЗ рдХрдорд┐рдЯрдЪреНрдпрд╛ рд╡реЗрд│реА рд╣реЛрддреЗ рдЖрдгрд┐ рдирд╡реАрди рдЯреЗрдмрд▓рдордзреНрдпреЗ sql рдХрдорд╛рдВрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╣реЛрддреЗ рддреЗрд╡реНрд╣рд╛. рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЖрдореНрд╣рд╛рд▓рд╛ рдЦрд╛рддреНрд░реА рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдХреА рджреЛрдиреНрд╣реА рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ рддрдкрд╛рд╕рдгреНрдпрд╛ рд╕рд╛рд░рдЦреНрдпрд╛рдЪ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд: рдПрдХрддрд░ рдиреЗрд╣рдореА рд╡рд┐рд▓рдВрдм рд╣реЛрддреЛ рдХрд┐рдВрд╡рд╛ рдиреЗрд╣рдореА рд▓рдЧреЗрдЪ.

рдордЧ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдХреЛрдгрддреНрдпрд╛ рдХрд▓реНрдкрдирд╛ рд╣реЛрддреНрдпрд╛?

рдбрд┐рдлрд░реНрдб рдкреНрд░рдорд╛рдгреЗрдЪ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рддрдпрд╛рд░ рдХрд░рд╛

рджреЛрдиреНрд╣реА рддрдкрд╛рд╕рдгреНрдпрд╛ рддрд╛рддреНрдХрд╛рд│ рдореЛрдбрдордзреНрдпреЗ рдХрд░рдгреЗ рд╣реА рдкрд╣рд┐рд▓реА рдХрд▓реНрдкрдирд╛ рдЖрд╣реЗ. рд╣реЗ рдЕрдиреЗрдХ рдЪреБрдХреАрдЪреЗ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдирд┐рд░реНрдмрдВрдз рдирд┐рд░реНрдорд╛рдг рдХрд░реВ рд╢рдХрддрд╛рдд, рдкрд░рдВрддреБ рддреНрдпрд╛рдкреИрдХреА рдХрд╛рд╣реА рдЕрд╕рд▓реНрдпрд╛рд╕, рдпрд╛рдЪрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдЪреНрдпрд╛ рдХрд╛рд░реНрдпрд╛рд╡рд░ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдК рдирдпреЗ, рдХрд╛рд░рдг рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рдЕрд╕реЗ рд╕рдВрдШрд░реНрд╖ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рд╕реНрдерд┐рддреА рдЖрд╣реЗ. рддреЗ рдЙрджреНрднрд╡рддрд╛рдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЬреЗрд╡реНрд╣рд╛ рджреЛрди рд╡рд╛рдкрд░рдХрд░реНрддреЗ рдПрдХрд╛рдЪ рд╡реЗрд│реА рдПрдХрдЪ рд╡рд┐рдЬреЗрдЯ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛рдд рдЖрдгрд┐ рджреБрд╕рд░реНтАНрдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рдХреНрд▓рд╛рдпрдВрдЯрд▓рд╛ рдкреНрд░рдердо рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рджреНрд╡рд╛рд░реЗ рд╕рдВрдкрд╛рджрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд┐рдЬреЗрдЯ рдЖрдзреАрдЪ рдЕрд╡рд░реЛрдзрд┐рдд рдХреЗрд▓реЗрд▓реА рдорд╛рд╣рд┐рддреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕ рд╡реЗрд│ рдирд╕рддреЛ. рдЕрд╢рд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд, рд╕рд░реНрд╡реНрд╣рд░ рджреБрд╕рд▒реНрдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд▓рд╛ рдирдХрд╛рд░ рджреЗрддреЛ рдЖрдгрд┐ рддреНрдпрд╛рдЪрд╛ рдХреНрд▓рд╛рдпрдВрдЯ рдмрджрд▓ рдорд╛рдЧреЗ рдШреЗрддреЛ рдЖрдгрд┐ рд╡рд┐рдЬреЗрдЯ рдмреНрд▓реЙрдХ рдХрд░рддреЛ. рдереЛрдбреНрдпрд╛ рд╡реЗрд│рд╛рдиреЗ, рдЬреЗрд╡реНрд╣рд╛ рдкрд╣рд┐рд▓рд╛ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд╕рдВрдкрд╛рджрди рдкреВрд░реНрдг рдХрд░реЗрд▓, рддреЗрд╡реНрд╣рд╛ рджреБрд╕рд▒реНрдпрд╛рд▓рд╛ рдорд╛рд╣рд┐рддреА рдорд┐рд│реЗрд▓ рдХреА рд╡рд┐рдЬреЗрдЯ рдпрд╛рдкреБрдвреЗ рдЕрд╡рд░реЛрдзрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдгрд╛рд░ рдирд╛рд╣реА рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдХреГрддреАрдЪреА рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЕрд╕реЗрд▓.

рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕: тАЛтАЛрдмреНрд▓реЛрдЯ, pg_repack рдЖрдгрд┐ рд╕реНрдердЧрд┐рдд рдорд░реНрдпрд╛рджрд╛

рдЪреЗрдХ рдиреЗрд╣рдореА рдиреЙрди-рдбрд┐рдлрд░реНрдб рдореЛрдбрдордзреНрдпреЗ рдЕрд╕рддрд╛рдд рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдореВрд│ рдбрд┐рдлрд░реНрдб рдХрдВрд╕реНрдЯреНрд░реЗрдВрдЯ рдкреНрд░рдорд╛рдгреЗрдЪ рдПрдХ рдирд╡реАрди рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рддрдпрд╛рд░ рдХреЗрд▓реА рдЖрд╣реЗ:

CREATE UNIQUE INDEX CONCURRENTLY uk_tablename__immediate ON tablename (id, index);
-- run pg_repack
DROP INDEX CONCURRENTLY uk_tablename__immediate;

рдЪрд╛рдЪрдгреА рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд, рдЖрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рдХрд╛рд╣реА рдЕрдкреЗрдХреНрд╖рд┐рдд рддреНрд░реБрдЯреА рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реНрдпрд╛. рдпрд╢! рдЖрдореНрд╣реА рдЙрддреНрдкрд╛рджрдирд╛рд╡рд░ рдкреБрдиреНрд╣рд╛ pg_repack рдЪрд╛рд▓рд╡рд▓реЗ рдЖрдгрд┐ рдПрдХрд╛ рддрд╛рд╕рд╛рдЪреНрдпрд╛ рдХрд╛рдорд╛рдд рдкрд╣рд┐рд▓реНрдпрд╛ рдХреНрд▓рд╕реНрдЯрд░рд╡рд░ 5 рддреНрд░реБрдЯреА рдЖрд▓реНрдпрд╛. рд╣рд╛ рдПрдХ рд╕реНрд╡реАрдХрд╛рд░рд╛рд░реНрд╣ рдирд┐рдХрд╛рд▓ рдЖрд╣реЗ. рддрдерд╛рдкрд┐, рдЖрдзреАрдЪ рджреБрд╕рд▒реНрдпрд╛ рдХреНрд▓рд╕реНрдЯрд░рд╡рд░ рддреНрд░реБрдЯреАрдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рд▓рдХреНрд╖рдгреАрдп рд╡рд╛рдврд▓реА рдЖрд╣реЗ рдЖрдгрд┐ рдЖрдореНрд╣рд╛рд▓рд╛ pg_repack рдерд╛рдВрдмрд╡рд╛рд╡реЗ рд▓рд╛рдЧрд▓реЗ.

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

рдХрд▓реНрдкрдирд╛ рдХрд╛рдореА рдЖрд▓реА рдирд╛рд╣реА. рддреНрдпрд╛ рд╡реЗрд│реА, рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдгрдЦреА рджреЛрди рдЙрдкрд╛рдп рджрд┐рд╕рд▓реЗ: рд╕реНрдердЧрд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЕрдбрдЪрдгреА рджреВрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдордЪрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдкреБрдиреНрд╣рд╛ рд▓рд┐рд╣рд╛ рдХрд┐рдВрд╡рд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕реЛрдмрдд рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА pg_repack рд▓рд╛ тАЬрд╢рд┐рдХрд╡рд╛тАЭ. рдЖрдореНрд╣реА рджреБрд╕рд░рд╛ рдирд┐рд╡рдбрд▓рд╛.

рдирд╡реАрди рд╕рд╛рд░рдгреАрдордзреАрд▓ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдореВрд│ рд╕рд╛рд░рдгреАрдЪреНрдпрд╛ рд╕реНрдердЧрд┐рдд рдорд░реНрдпрд╛рджрд╛рдВрд╕рд╣ рдкреБрдирд░реНрд╕реНрдерд┐рдд рдХрд░рд╛

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

рдЖрдордЪреНрдпрд╛ рдмрджрд▓рд╛рдВрдЪреА рдЪрд╛рдЪрдгреА рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдПрдХ рд╕рд╛рдзреА рдЪрд╛рдЪрдгреА рд▓рд┐рд╣рд┐рд▓реА:

  • рдПрдХ рд╕реНрдердЧрд┐рдд рдорд░реНрдпрд╛рджрд╛ рдЖрдгрд┐ рдПрдХ рд░реЗрдХреЙрд░реНрдб рдЕрд╕рд▓реЗрд▓реА рдЯреЗрдмрд▓;
  • рд╡рд┐рджреНрдпрдорд╛рди рд░реЗрдХреЙрд░реНрдбрд╢реА рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд▓реВрдкрдордзреНрдпреЗ рдбреЗрдЯрд╛ рдШрд╛рд▓рд╛;
  • рдЕрдкрдбреЗрдЯ рдХрд░рд╛ - рдбреЗрдЯрд╛ рдпрд╛рдкреБрдвреЗ рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕ рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА;
  • рдмрджрд▓ рдХрд░рд╛.

create table test_table
(
  id serial,
  val int,
  constraint uk_test_table__val unique (val) deferrable initially deferred 
);

INSERT INTO test_table (val) VALUES (0);
FOR i IN 1..10000 LOOP
  BEGIN
    INSERT INTO test_table VALUES (0) RETURNING id INTO v_id;
    UPDATE test_table set val = i where id = v_id;
    COMMIT;
  END;
END LOOP;

pg_repack рдЪреА рдореВрд│ рдЖрд╡реГрддреНрддреА рдиреЗрд╣рдореА рдкрд╣рд┐рд▓реНрдпрд╛ рдЗрдиреНрд╕рд░реНрдЯрд╡рд░ рдХреНрд░реЕрд╢ рд╣реЛрддреЗ, рд╕реБрдзрд╛рд░рд┐рдд рдЖрд╡реГрддреНрддреА рддреНрд░реБрдЯреАрдВрд╢рд┐рд╡рд╛рдп рдХрд╛рд░реНрдп рдХрд░рддреЗ. рдорд╕реНрдд.

рдЖрдореНрд╣реА рдкреНрд░реЙрдбрдХреНрд╢рдирд╡рд░ рдЬрд╛рддреЛ рдЖрдгрд┐ рд▓реЙрдЧ рдЯреЗрдмрд▓рд╡рд░реВрди рдбреЗрдЯрд╛ рдХреЙрдкреА рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рддреНрдпрд╛рдЪ рдЯрдкреНрдкреНрдпрд╛рд╡рд░ рдкреБрдиреНрд╣рд╛ рдПрдХ рддреНрд░реБрдЯреА рдпреЗрддреЗ:

$ ./pg_repack -t tablename -o id
INFO: repacking table "tablename"
ERROR: query failed: 
    ERROR: duplicate key value violates unique constraint "index_16508"
DETAIL:  Key (id, index)=(100500, 42) already exists.

рдХреНрд▓рд╛рд╕рд┐рдХ рдкрд░рд┐рд╕реНрдерд┐рддреА: рд╕рд░реНрд╡ рдХрд╛рд╣реА рдЪрд╛рдЪрдгреА рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд рдХрд╛рд░реНрдп рдХрд░рддреЗ, рдкрд░рдВрддреБ рдЙрддреНрдкрд╛рджрдирд╛рдд рдирд╛рд╣реА?!

APPLY_COUNT рдЖрдгрд┐ рджреЛрди рдмреЕрдЪрдЪреЗ рдЬрдВрдХреНрд╢рди

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

for (;;)
{
num = apply_log(connection, table, APPLY_COUNT);

if (num > MIN_TUPLES_BEFORE_SWITCH)
     continue;  /* there might be still some tuples, repeat. */
...
}

рдЕрдбрдЪрдг рдЕрд╢реА рдЖрд╣реЗ рдХреА рдореВрд│ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рддреАрд▓ рдбреЗрдЯрд╛, рдЬреНрдпрд╛рдордзреНрдпреЗ рдЕрдиреЗрдХ рдСрдкрд░реЗрд╢рдиреНрд╕ рд╕рдВрднрд╛рд╡реНрдпрдкрдгреЗ рдкреНрд░рддрд┐рдмрдВрдзрд╛рдЪреЗ рдЙрд▓реНрд▓рдВрдШрди рдХрд░реВ рд╢рдХрддрд╛рдд, рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓реНрдпрд╛рд╡рд░, рджреЛрди рдмреЕрдЪрдЪреНрдпрд╛ рдЬрдВрдХреНрд╢рдирд╡рд░ рд╕рдорд╛рдкреНрдд рд╣реЛрдК рд╢рдХрддрд╛рдд - рдЕрд░реНрдзреНрдпрд╛ рдХрдорд╛рдВрдб рдкрд╣рд┐рд▓реНрдпрд╛ рдмреЕрдЪрдордзреНрдпреЗ рдХрдорд┐рдЯ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддреАрд▓, рдЖрдгрд┐ рдЙрд░реНрд╡рд░рд┐рдд рдЕрд░реНрдзреНрдпрд╛ рджреБрд╕рд▒реНрдпрд╛ рдордзреНрдпреЗ. рдЖрдгрд┐ рдпреЗрдереЗ, рдЖрдкрд▓реНрдпрд╛ рдирд╢рд┐рдмрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди: рдЬрд░ рд╕рдВрдШрд╛рдВрдиреА рдкрд╣рд┐рд▓реНрдпрд╛ рдмреЕрдЪрдордзреНрдпреЗ рдХрд╛рд╣реАрд╣реА рдЙрд▓реНрд▓рдВрдШрди рдХреЗрд▓реЗ рдирд╛рд╣реА рддрд░ рд╕рд░реНрд╡ рдХрд╛рд╣реА рдареАрдХ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЬрд░ рддреЗ рдХреЗрд▓реЗ рддрд░ рдПрдХ рддреНрд░реБрдЯреА рдЙрджреНрднрд╡рддреЗ.

APPLY_COUNT рд╣реЗ 1000 рд░реЗрдХреЙрд░реНрдбрдЪреНрдпрд╛ рдмрд░реЛрдмрд░реАрдЪреЗ рдЖрд╣реЗ, рдЬреЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рддреЗ рдХреА рдЖрдордЪреНрдпрд╛ рдЪрд╛рдЪрдгреНрдпрд╛ рдХрд╛ рдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реНрдпрд╛ - рддреНрдпрд╛рдВрдиреА "рдмреЕрдЪ рдЬрдВрдХреНрд╢рди" рдЪреА рдХреЗрд╕ рдХрд╡реНрд╣рд░ рдХреЗрд▓реА рдирд╛рд╣реА. рдЖрдореНрд╣реА рджреЛрди рдХрдорд╛рдВрдб рд╡рд╛рдкрд░рд▓реНрдпрд╛ - рдШрд╛рд▓рд╛ рдЖрдгрд┐ рдЕрдкрдбреЗрдЯ рдХрд░рд╛, рддреНрдпрд╛рдореБрд│реЗ рджреЛрди рдХрдорд╛рдВрдбрдЪреЗ 500 рд╡реНрдпрд╡рд╣рд╛рд░ рдиреЗрд╣рдореА рдПрдХрд╛ рдмреЕрдЪрдордзреНрдпреЗ рдареЗрд╡рд▓реЗрд▓реЗ рд╣реЛрддреЗ рдЖрдгрд┐ рдЖрдореНрд╣рд╛рд▓рд╛ рдХреЛрдгрддреАрд╣реА рд╕рдорд╕реНрдпрд╛ рдЖрд▓реА рдирд╛рд╣реА. рджреБрд╕рд░реЗ рдЕрджреНрдпрддрди рдЬреЛрдбрд▓реНрдпрд╛рдирдВрддрд░, рдЖрдордЪреНрдпрд╛ рд╕рдВрдкрд╛рджрдирд╛рдиреЗ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рдерд╛рдВрдмрд╡рд▓реЗ:

FOR i IN 1..10000 LOOP
  BEGIN
    INSERT INTO test_table VALUES (1) RETURNING id INTO v_id;
    UPDATE test_table set val = i where id = v_id;
    UPDATE test_table set val = i where id = v_id; -- one more update
    COMMIT;
  END;
END LOOP;

рддрд░, рдкреБрдвреАрд▓ рдХрд╛рд░реНрдп рд╣реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреЗ рдЖрд╣реЗ рдХреА рдореВрд│ рд╕рд╛рд░рдгреАрддреАрд▓ рдбреЗрдЯрд╛, рдЬреЛ рдПрдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдд рдмрджрд▓рд▓рд╛ рд╣реЛрддрд╛, рддреЛ рдирд╡реАрди рд╕рд╛рд░рдгреАрдордзреНрдпреЗ рджреЗрдЦреАрд▓ рдПрдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдд рд╕рдВрдкрддреЛ.

рдмреЕрдЪрд┐рдВрдЧ рдкрд╛рд╕реВрди рдирдХрд╛рд░

рдЖрдгрд┐ рдкреБрдиреНрд╣рд╛ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рджреЛрди рдЙрдкрд╛рдп рд╣реЛрддреЗ. рдкреНрд░рдердо: рдмреЕрдЪреЗрд╕рдордзреНрдпреЗ рд╡рд┐рднрд╛рдЬрди рдХрд░рдгреЗ рдкреВрд░реНрдгрдкрдгреЗ рд╕реЛрдбреВрди рджреНрдпрд╛ рдЖрдгрд┐ рдПрдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдд рдбреЗрдЯрд╛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░реВрдпрд╛. рдпрд╛ рд╕реЛрд▓реНрдпреВрд╢рдирдЪрд╛ рдлрд╛рдпрджрд╛ рдореНрд╣рдгрдЬреЗ рддреНрдпрд╛рдЪреА рд╕рд╛рдзреЗрдкрдгрд╛ - рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдмрджрд▓ рдХрдореАрддрдХрдореА рд╣реЛрддреЗ (рддрд╕реЗ, рдЬреБрдиреНрдпрд╛ рдЖрд╡реГрддреНрддреНрдпрд╛рдВрдордзреНрдпреЗ pg_reorg рд╕рд╛рд░рдЦреЗрдЪ рдХрд╛рд░реНрдп рдХрд░рддреЗ). рдкрд░рдВрддреБ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЖрд╣реЗ - рдЖрдореНрд╣реА рдПрдХ рджреАрд░реНрдШрдХрд╛рд│ рдЪрд╛рд▓рдгрд╛рд░рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рддрдпрд╛рд░ рдХрд░реАрдд рдЖрд╣реЛрдд рдЖрдгрд┐ рд╣реЗ, рдкреВрд░реНрд╡реА рдореНрд╣рдЯрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдирд╡реАрди рдмреНрд▓реЛрдЯрдЪреНрдпрд╛ рдЙрджрдпрд╛рд╕ рдзреЛрдХрд╛ рдЖрд╣реЗ.

рджреБрд╕рд░рд╛ рдЙрдкрд╛рдп рдЕрдзрд┐рдХ рдХреНрд▓рд┐рд╖реНрдЯ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдХрджрд╛рдЪрд┐рдд рдЕрдзрд┐рдХ рдпреЛрдЧреНрдп рдЖрд╣реЗ: рдЯреЗрдмрд▓рдордзреНрдпреЗ рдбреЗрдЯрд╛ рдЬреЛрдбрдгрд╛рд▒реНрдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдЪреНрдпрд╛ рдЕрднрд┐рдЬреНрдЮрд╛рдкрдХрд╛рд╕рд╣ рд▓реЙрдЧ рдЯреЗрдмрд▓рдордзреНрдпреЗ рдПрдХ рд╕реНрддрдВрдн рддрдпрд╛рд░ рдХрд░рд╛. рддреНрдпрд╛рдирдВрддрд░, рдЬреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣реА рдбреЗрдЯрд╛ рдХреЙрдкреА рдХрд░рддреЛ, рддреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣реА рддреЗ рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдиреБрд╕рд╛рд░ рдЧрдЯрдмрджреНрдз рдХрд░реВ рд╢рдХрддреЛ рдЖрдгрд┐ рд╕рдВрдмрдВрдзрд┐рдд рдмрджрд▓ рдПрдХрддреНрд░ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗрдд рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░реВ рд╢рдХрддреЛ. рдмреЕрдЪ рдЕрдиреЗрдХ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдВрдордзреВрди (рдХрд┐рдВрд╡рд╛ рдПрдХ рдореЛрдард╛) рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓ рдЖрдгрд┐ рдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдВрдордзреНрдпреЗ рдХрд┐рддреА рдбреЗрдЯрд╛ рдмрджрд▓рд▓рд╛ рдЖрд╣реЗ рддреНрдпрд╛рдиреБрд╕рд╛рд░ рддреНрдпрд╛рдЪрд╛ рдЖрдХрд╛рд░ рдмрджрд▓реВ рд╢рдХреЗрд▓. рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрдгреЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ рдХреА рд╡рд┐рд╡рд┐рдз рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдВрдордзреАрд▓ рдбреЗрдЯрд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдорд╛рдиреЗ рд▓реЙрдЧ рдЯреЗрдмрд▓рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдд рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рддреЗ рдпрд╛рдкреБрдвреЗ рдЕрдиреБрдХреНрд░рдорд╛рдиреЗ рд╡рд╛рдЪрдгреЗ рд╢рдХреНрдп рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА, рдЬрд╕реЗ рддреЗ рдкреВрд░реНрд╡реА рд╣реЛрддреЗ. tx_id рджреНрд╡рд╛рд░реЗ рдлрд┐рд▓реНрдЯрд░рд┐рдВрдЧрд╕рд╣ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдирдВрддреАрд╕рд╛рдареА seqscan рдЦреВрдк рдорд╣рд╛рдЧ рдЖрд╣реЗ, рдПрдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдкрд░рдВрддреБ рддреЗ рдЕрджреНрдпрддрдирд┐рдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдУрд╡реНрд╣рд░рд╣реЗрдбрдореБрд│реЗ рдкрджреНрдзрдд рджреЗрдЦреАрд▓ рдХрдореА рдХрд░реЗрд▓. рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдиреЗрд╣рдореАрдкреНрд░рдорд╛рдгреЗ, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдХрд╛рд╣реАрддрд░реА рддреНрдпрд╛рдЧ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рдореНрд╣рдгреВрди, рдЖрдореНрд╣реА рдкрд╣рд┐рд▓реНрдпрд╛ рдкрд░реНрдпрд╛рдпрд╛рд╕рд╣ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдгреНрдпрд╛рдЪреЗ рдард░рд╡рд┐рд▓реЗ, рдХрд╛рд░рдг рддреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ. рдкреНрд░рдердо, рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддреЗ рдХреА рджреАрд░реНрдШ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рдЕрд╕реЗрд▓. рдЬреБрдиреНрдпрд╛ рд╕рд╛рд░рдгреАрд╡рд░реВрди рдирд╡реАрди рдбреЗрдЯрд╛рдЪреЗ рдореБрдЦреНрдп рд╣рд╕реНрддрд╛рдВрддрд░рдг рджреЗрдЦреАрд▓ рдПрдХрд╛ рджреАрд░реНрдШ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдд рд╣реЛрдд рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдкреНрд░рд╢реНрдирд╛рдЪреЗ рд░реВрдкрд╛рдВрддрд░ "рд╣рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рддреА рд╡рд╛рдврд╡рд╛рдпрдЪрд╛?" рдкрд╣рд┐рд▓реНрдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдЪрд╛ рдХрд╛рд▓рд╛рд╡рдзреА рдореБрдЦреНрдпрддрдГ рдЯреЗрдмрд▓рдЪреНрдпрд╛ рдЖрдХрд╛рд░рд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЛ. рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░ рджрд░рдореНрдпрд╛рди рдЯреЗрдмрд▓рдордзреНрдпреЗ рдХрд┐рддреА рдмрджрд▓ рдЬрдорд╛ рд╣реЛрддрд╛рдд рдпрд╛рд╡рд░ рдирд╡реАрдирдЪрд╛ рдХрд╛рд▓рд╛рд╡рдзреА рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЛ, рдЙрджрд╛. рд▓реЛрдбрдЪреНрдпрд╛ рддреАрд╡реНрд░рддреЗрд╡рд░. pg_repack рд░рди рдХрдореАрдд рдХрдореА рд╕реЗрд╡рд╛ рднрд╛рд░рд╛рдЪреНрдпрд╛ рдХрд╛рд│рд╛рдд рдШрдбрд▓реЗ, рдЖрдгрд┐ рдмрджрд▓рд╛рдВрдЪреЗ рдкреНрд░рдорд╛рдг рд╕рд╛рд░рдгреАрдЪреНрдпрд╛ рдореВрд│ рдЖрдХрд╛рд░рд╛рдЪреНрдпрд╛ рддреБрд▓рдиреЗрдд рдХрдореА рдкреНрд░рдорд╛рдгрд╛рдд рд╣реЛрддреЗ. рдЖрдореНрд╣реА рдард░рд╡рд▓реЗ рдХреА рдЖрдореНрд╣реА рдирд╡реАрди рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдЪреНрдпрд╛ рд╡реЗрд│реЗрдХрдбреЗ рджреБрд░реНрд▓рдХреНрд╖ рдХрд░реВ рд╢рдХрддреЛ (рддреБрд▓рдиреЗрд╕рд╛рдареА, рд╕рд░рд╛рд╕рд░реА 1 рддрд╛рд╕ рдЖрдгрд┐ 2-3 рдорд┐рдирд┐рдЯреЗ).

рдкреНрд░рдпреЛрдЧ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реЛрддреЗ. рдЙрддреНрдкрд╛рджрдирд╛рд╡рд░рд╣реА рд▓рд╛рдБрдЪ рдХрд░рд╛. рд╕реНрдкрд╖реНрдЯрддреЗрд╕рд╛рдареА, рдЪрд╛рд▓рд╡рд┐рд▓реНрдпрд╛рдирдВрддрд░ рдбреЗрдЯрд╛рдмреЗрд╕рдкреИрдХреА рдПрдХрд╛рдЪреНрдпрд╛ рдЖрдХрд╛рд░рд╛рдЪреЗ рдЪрд┐рддреНрд░ рдпреЗрдереЗ рдЖрд╣реЗ:

рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕: тАЛтАЛрдмреНрд▓реЛрдЯ, pg_repack рдЖрдгрд┐ рд╕реНрдердЧрд┐рдд рдорд░реНрдпрд╛рджрд╛

рдЖрдореНрд╣реА рдпрд╛ рд╕реЛрд▓реНрдпреВрд╢рдирд╡рд░ рдкреВрд░реНрдгрдкрдгреЗ рд╕рдорд╛рдзрд╛рдиреА рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдЖрдореНрд╣реА рджреБрд╕рд░рд╛ рдЙрдкрд╛рдп рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛ рдирд╛рд╣реА, рдкрд░рдВрддреБ рдЖрдореНрд╣реА рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдХрд╛рд╕рдХрд╛рдВрд╢реА рдЪрд░реНрдЪрд╛ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рд╢рдХреНрдпрддреЗрдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рдд рдЖрд╣реЛрдд. рдЖрдордЪреА рд╡рд░реНрддрдорд╛рди рдкреБрдирд░рд╛рд╡реГрддреНрддреА, рджреБрд░реНрджреИрд╡рд╛рдиреЗ, рдЕрджреНрдпрд╛рдк рдкреНрд░рдХрд╛рд╢рдирд╛рд╕рд╛рдареА рддрдпрд╛рд░ рдирд╛рд╣реА, рдХрд╛рд░рдг рдЖрдореНрд╣реА рдХреЗрд╡рд│ рдЕрдирдиреНрдп рд╕реНрдердЧрд┐рдд рдирд┐рд░реНрдмрдВрдзрд╛рдВрд╕рд╣ рд╕рдорд╕реНрдпреЗрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХреЗрд▓реЗ рдЖрд╣реЗ рдЖрдгрд┐ рдкреВрд░реНрдг рдкреЕрдЪрд╕рд╛рдареА рдЗрддрд░ рдкреНрд░рдХрд╛рд░рд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди рдкреНрд░рджрд╛рди рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рднрд╡рд┐рд╖реНрдпрд╛рдд рдЖрдореНрд╣реА рд╣реЗ рдХрд░реВ рд╢рдХреВ рдЕрд╢реА рдЖрд╢рд╛ рдЖрд╣реЗ.

рдХрджрд╛рдЪрд┐рдд рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рд╢реНрди рдкрдбрд▓рд╛ рдЕрд╕реЗрд▓, рдЖрдореНрд╣реА pg_repack рдЪреНрдпрд╛ рдмрджрд▓рд╛рд╕рд╣ рдпрд╛ рдХрдереЗрдд рдХрд╛ рд╕рд╛рдореАрд▓ рдЭрд╛рд▓реЛ рдЖрдгрд┐ рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рддреНрдпрд╛рдЪреЗ рдЕреЕрдирд╛рд▓реЙрдЧреНрд╕ рдХрд╛ рд╡рд╛рдкрд░рд▓реЗ рдирд╛рд╣реАрдд? рдХрд╛рд╣реА рдХреНрд╖рдгреА рдЖрдореНрд╣реА рдпрд╛рдмрджреНрджрд▓ рд╡рд┐рдЪрд╛рд░ рдХреЗрд▓рд╛, рдкрд░рдВрддреБ рдпрд╛рдЖрдзреА рддреЗ рдЯреЗрдмрд▓рд╡рд░ рд╡рд┐рд▓рдВрдмрд┐рдд рдорд░реНрдпрд╛рджрд╛рдВрд╢рд┐рд╡рд╛рдп рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЕрдиреБрднрд╡рд╛рдиреЗ рдЖрдореНрд╣рд╛рд▓рд╛ рд╕рдорд╕реНрдпреЗрдЪреЗ рд╕рд╛рд░ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рдЪрд╛ рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреНрдпрд╛рд╕ рдкреНрд░рд╡реГрддреНрдд рдХреЗрд▓реЗ. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЗрддрд░ рдЙрдкрд╛рдпрд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдЪрд╛рдЪрдгреНрдпрд╛ рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рджреЗрдЦреАрд▓ рд╡реЗрд│ рд▓рд╛рдЧрддреЛ, рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рдард░рд╡рд▓реЗ рдХреА рдЖрдореНрд╣реА рдкреНрд░рдердо рддреНрдпрд╛рддреАрд▓ рд╕рдорд╕реНрдпрд╛ рд╕реЛрдбрд╡рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ рдЖрдгрд┐ рдЬрд░ рдЖрдореНрд╣рд╛рд▓рд╛ рд╣реЗ рд╕рдордЬрд▓реЗ рдХреА рдЖрдореНрд╣реА рд╣реЗ рд╡рд╛рдЬрд╡реА рд╡реЗрд│реЗрдд рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА, рддрд░ рдЖрдореНрд╣реА рдЕреЕрдирд╛рд▓реЙрдЧреНрд╕ рдкрд╛рд╣рдгреНрдпрд╛рд╕ рд╕реБрд░рд╡рд╛рдд рдХрд░реВ. .

рдирд┐рд╖реНрдХрд░реНрд╖

рдЖрдордЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдЕрдиреБрднрд╡рд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрдореНрд╣реА рдХрд╛рдп рд╢рд┐рдлрд╛рд░рд╕ рдХрд░реВ рд╢рдХрддреЛ:

  1. рддреБрдордЪреНрдпрд╛ рдмреНрд▓реЛрдЯрдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рд╛. рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдбреЗрдЯрд╛рдЪреНрдпрд╛ рдЖрдзрд╛рд░реЗ, рдСрдЯреЛрд╡реНрд╣реЕрдХреНрдпреВрдо рдХрд┐рддреА рдЪрд╛рдВрдЧрд▓реЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗ рдЖрд╣реЗ рд╣реЗ рддреБрдореНрд╣реА рд╕рдордЬреВ рд╢рдХрддрд╛.
  2. рд╕реНрд╡реАрдХреГрдд рд╕реНрддрд░рд╛рд╡рд░ рдмреНрд▓реЛрдЯ рдареЗрд╡рдгреНрдпрд╛рд╕рд╛рдареА рдСрдЯреЛрд╡реНрд╣реЕрдХреНрдпреБрдо рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рд╛.
  3. рдЬрд░ рдмреНрд▓реЛрдЯ рдЕрдЬреВрдирд╣реА рд╡рд╛рдврдд рдЕрд╕реЗрд▓ рдЖрдгрд┐ рдЖрдкрдг рдмреЙрдХреНрд╕рдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░реАрд▓ рд╕рд╛рдзрдирд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рддреНрдпрд╛рд╡рд░ рдорд╛рдд рдХрд░реВ рд╢рдХрдд рдирд╕рд╛рд▓, рддрд░ рдмрд╛рд╣реНрдп рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕ рдШрд╛рдмрд░реВ рдирдХрд╛. рдореБрдЦреНрдп рдЧреЛрд╖реНрдЯ рдореНрд╣рдгрдЬреЗ рд╕рд░реНрд╡рдХрд╛рд╣реА рдЪрд╛рдВрдЧрд▓реЗ рддрдкрд╛рд╕рдгреЗ.
  4. рдЖрдкрд▓реНрдпрд╛ рдЧрд░рдЬреЗрдиреБрд╕рд╛рд░ рдмрд╛рд╣реНрдп рдЙрдкрд╛рдп рд╕реБрдзрд╛рд░рдгреНрдпрд╛рд╕ рдШрд╛рдмрд░реВ рдирдХрд╛ - рдХрд╛рд╣реАрд╡реЗрд│рд╛ рд╣реЗ рдЖрдкрд▓рд╛ рд╕реНрд╡рддрдГрдЪрд╛ рдХреЛрдб рдмрджрд▓рдгреНрдпрд╛рдкреЗрдХреНрд╖рд╛ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рдЖрдгрд┐ рдЕрдЧрджреА рд╕реЛрдкреЗ рдЕрд╕реВ рд╢рдХрддреЗ.

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛