рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕: тАЛтАЛрдмреНрд▓реЛрдЯ, pg_repack рд░ рд╕реНрдердЧрд┐рдд рдЕрд╡рд░реЛрдзрд╣рд░реВ

рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕: тАЛтАЛрдмреНрд▓реЛрдЯ, pg_repack рд░ рд╕реНрдердЧрд┐рдд рдЕрд╡рд░реЛрдзрд╣рд░реВ

рддрд╛рд▓рд┐рдХрд╛ рд░ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рд╣рд░реВрдорд╛ рдмреНрд▓реЛрдЯрдХреЛ рдкреНрд░рднрд╛рд╡ рд╡реНрдпрд╛рдкрдХ рд░реВрдкрдорд╛ рдЬреНрдЮрд╛рдд рдЫ рд░ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕рдорд╛ рдорд╛рддреНрд░ рд╣реЛрдЗрдиред VACUUM FULL рд╡рд╛ CLUSTER рдЬрд╕реНрддрд╛ рдмрд╛рдХрд╕ рдмрд╛рд╣рд┐рд░ рдпрд╕рд▓рд╛рдИ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд░реНрдиреЗ рддрд░рд┐рдХрд╛рд╣рд░реВ рдЫрдиреН, рддрд░ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рд╕рдЮреНрдЪрд╛рд▓рдирдХреЛ рдХреНрд░рдордорд╛ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рд▓рдХ рдЧрд░реНрдЫрдиреН рд░ рддреНрдпрд╕реИрд▓реЗ рд╕рдзреИрдВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрдиред

рд▓реЗрдЦрдорд╛ рдмреНрд▓реЛрдЯ рдХрд╕рд░реА рд╣реБрдиреНрдЫ, рддрдкрд╛рдЗрдБ рдпрд╕рд▓рд╛рдИ рдХрд╕рд░реА рд▓рдбреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рд╕реНрдердЧрд┐рдд рдЕрд╡рд░реЛрдзрд╣рд░реВ рд░ pg_repack рд╡рд┐рд╕реНрддрд╛рд░рдХреЛ рдкреНрд░рдпреЛрдЧрдорд╛ рдЙрдиреАрд╣рд░реВрд▓реЗ рд▓реНрдпрд╛рдЙрдиреЗ рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдереЛрд░реИ рд╕рд┐рджреНрдзрд╛рдиреНрдд рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред

рдХреЛ рдЖрдзрд╛рд░рдорд╛ рдпреЛ рд▓реЗрдЦ рд▓реЗрдЦрд┐рдПрдХреЛ рд╣реЛ рдореЗрд░реЛ рдмреЛрд▓реА PgConf.Russia 2020 рдорд╛ред

рдмреНрд▓реЛрдЯ рдХрд┐рди рд╣реБрдиреНрдЫ?

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

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

рдорд╛рдиреМрдВ рд╣рд╛рдореАрд╕рдБрдЧ рдПрдЙрдЯрд╛ рддрд╛рд▓рд┐рдХрд╛ рдЫ рдЬрд╕рдорд╛ рд╣рд╛рдореАрд▓реЗ рдзреЗрд░реИ рд░реЗрдХрд░реНрдбрд╣рд░реВ рдердкреЗрдХрд╛ рдЫреМрдВред рдирдпрд╛рдБ рдбрд╛рдЯрд╛ рдлрд╛рдЗрд▓рдХреЛ рдкрд╣рд┐рд▓реЛ рдкреГрд╖реНрдардорд╛ рджреЗрдЦрд╛ рдкрд░реЗрдХреЛ рдЫ рдЬрд╣рд╛рдБ рддрд╛рд▓рд┐рдХрд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдПрдХреЛ рдЫред рдпреА рдкрдЩреНрдХреНрддрд┐рд╣рд░реВрдХрд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВ рд╣реБрдиреН рдЬреБрди рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдкрдЫрд┐ рдЕрдиреНрдп рд▓реЗрдирджреЗрдирд╣рд░реВрдорд╛ рдЙрдкрд▓рдмреНрдз рдЫрдиреН (рд╕рд░рд▓рддрд╛рдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рдЕрд▓рдЧрд╛рд╡ рд╕реНрддрд░ рдкрдвреНрди рдкреНрд░рддрд┐рдмрджреНрдз рдЫ рднрдиреЗрд░ рдорд╛рдиреНрдиреЗрдЫреМрдВ)ред

рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕: тАЛтАЛрдмреНрд▓реЛрдЯ, pg_repack рд░ рд╕реНрдердЧрд┐рдд рдЕрд╡рд░реЛрдзрд╣рд░реВ

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

рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕: тАЛтАЛрдмреНрд▓реЛрдЯ, pg_repack рд░ рд╕реНрдердЧрд┐рдд рдЕрд╡рд░реЛрдзрд╣рд░реВ

рдЪрд░рдг-рджрд░-рдЪрд░рдг, рдкрдЩреНрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрджреИ рд░ рдореЗрдЯрд╛рдЙрдБрджреИ, рд╣рд╛рдореАрд▓реЗ рдПрдЙрдЯрд╛ рдкреГрд╖реНрдардХреЛ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдЧрд░реНрдпреМрдВ рдЬрд╕рдорд╛ рд▓рдЧрднрдЧ рдЖрдзрд╛ рдбрд╛рдЯрд╛ "рдлреЛрд╣реЛрд░" рд╣реЛред рдпреЛ рдбрд╛рдЯрд╛ рдХреБрдиреИ рдкрдирд┐ рд▓реЗрдирджреЗрди рджреЗрдЦрд┐рдиреЗ рдЫреИрдиред

рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕: тАЛтАЛрдмреНрд▓реЛрдЯ, pg_repack рд░ рд╕реНрдердЧрд┐рдд рдЕрд╡рд░реЛрдзрд╣рд░реВ

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

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

рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕: тАЛтАЛрдмреНрд▓реЛрдЯ, pg_repack рд░ рд╕реНрдердЧрд┐рдд рдЕрд╡рд░реЛрдзрд╣рд░реВ

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

рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕: тАЛтАЛрдмреНрд▓реЛрдЯ, pg_repack рд░ рд╕реНрдердЧрд┐рдд рдЕрд╡рд░реЛрдзрд╣рд░реВ

рдЬрдм рддреНрдпрд╕реНрддрд╛ рдЦрд╛рд▓реА рд╡рд╛ рдЕрддреНрдпрдзрд┐рдХ рд╡рд┐рд░рд▓ рдкреГрд╖реНрдард╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдареВрд▓реЛ рд╣реБрдиреНрдЫ, рдЬрд╕рд▓рд╛рдИ рдмреНрд▓реЛрдЯ рднрдирд┐рдиреНрдЫ, рдпрд╕рд▓реЗ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрдирд▓рд╛рдИ рдЕрд╕рд░ рдЧрд░реНрди рдерд╛рд▓реНрдЫред

рдорд╛рдерд┐ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рд╕рдмреИ рдХреБрд░рд╛ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВрдорд╛ рдмреНрд▓реЛрдЯрдХреЛ рдШрдЯрдирд╛рдХреЛ рдореЗрдХрд╛рдирд┐рдХреНрд╕ рд╣реЛред рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рд╣рд░реВрдорд╛ рдпреЛ рдзреЗрд░реИ рдЙрд╕реНрддреИ рддрд░рд┐рдХрд╛рдорд╛ рд╣реБрдиреНрдЫред

рдХреЗ рдо рдмреНрд▓реЛрдЯ рдЫ?

рдпрджрд┐ рддрдкрд╛рдЗрдБ рдмреНрд▓реЛрдЯ рдЫ рднрдиреЗ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрди рдзреЗрд░реИ рддрд░рд┐рдХрд╛рд╣рд░реВ рдЫрдиреНред рдкрд╣рд┐рд▓реЛрдХреЛ рд╡рд┐рдЪрд╛рд░ рднрдиреЗрдХреЛ рдЖрдиреНрддрд░рд┐рдХ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕ рддрдереНрдпрд╛рдЩреНрдХрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рд╣реЛ, рдЬрд╕рдорд╛ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВрдорд╛ рдкрдЩреНрдХреНрддрд┐рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛, "рдкреНрд░рддреНрдпрдХреНрд╖" рдкрдЩреНрдХреНрддрд┐рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛, рдЗрддреНрдпрд╛рджрд┐ рдмрд╛рд░реЗ рдЕрдиреБрдорд╛рдирд┐рдд рдЬрд╛рдирдХрд╛рд░реА рд╕рдорд╛рд╡реЗрд╢ рдЫред рддрдкрд╛рдИрдВрд▓реЗ рдЗрдиреНрдЯрд░рдиреЗрдЯрдорд╛ рддрдпрд╛рд░-рдирд┐рд░реНрдорд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВрдХреЛ рдзреЗрд░реИ рднрд┐рдиреНрдирддрд╛рд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рд╣рд╛рдореАрд▓реЗ рдЖрдзрд╛рд░рдХреЛ рд░реВрдкрдорд╛ рд▓рд┐рдПрдХрд╛ рдЫреМрдВ рд▓рд┐рдкрд┐ PostgreSQL рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрд╣рд░реВрдмрд╛рдЯ, рдЬрд╕рд▓реЗ рдЯреЛрд╕реНрдЯ рд░ рдмреНрд▓реЛрдЯ btree рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рд╣рд░реВрдХреЛ рд╕рд╛рдердорд╛ рдмреНрд▓реЛрдЯ рдЯреЗрдмрд▓рд╣рд░реВрдХреЛ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдЧрд░реНрди рд╕рдХреНрдЫред рд╣рд╛рдореНрд░реЛ рдЕрдиреБрднрд╡ рдорд╛, рдпрд╕рдХреЛ рддреНрд░реБрдЯрд┐ 10-20% рдЫред

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

рд╣рд╛рдореА рдПрдХ рд╕рд╛рдиреЛ рдмреНрд▓реЛрдЯ рдорд╛рди рдорд╛рдиреНрджрдЫреМрдВ, 20% рд╕рдореНрдо, рд╕реНрд╡реАрдХрд╛рд░реНрдпред рдпрд╕рд▓рд╛рдИ рдлрд┐рд▓рдлреНрдпрд╛рдХреНрдЯрд░рдХреЛ рдПрдирд╛рд▓рдЧрдХреЛ рд░реВрдкрдорд╛ рдорд╛рдиреНрди рд╕рдХрд┐рдиреНрдЫ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ ╨╕ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рд╣рд░реВред 50% рд░ рдорд╛рдерд┐, рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕реБрд░реБ рд╣реБрди рд╕рдХреНрдЫред

рдмреНрд▓реЛрдЯ рд▓рдбреНрдиреЗ рддрд░рд┐рдХрд╛рд╣рд░реВ

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

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

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

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

рддрдкрд╛рдИрдВрд▓реЗ AUTOVACUUM рд╕реЗрдЯрдЕрдк рдЧрд░реНрдиреБрднрдПрдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдХреЗ рдЧрд░реНрдиреЗ, рддрд░ рдмреНрд▓реЛрдЯ рдмрдвреНрди рдЬрд╛рд░реА рдЫред

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

рдЯреЛрд▓реА рдХреНрд▓рд╕реНрдЯрд░ VACUUM FULL рдХреЛ рд░реВрдкрдорд╛ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВрдХреЛ рд╕рд╛рдордЧреНрд░реАрд╣рд░реВ рдкреБрди: рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджрдЫ, рддрд░ рддрдкрд╛рдЗрдБрд▓рд╛рдИ рдПрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ рдЬреБрди рдЕрдиреБрд╕рд╛рд░ рдбрд╛рдЯрд╛ рднреМрддрд┐рдХ рд░реВрдкрдорд╛ рдбрд┐рд╕реНрдХрдорд╛ рдЕрд░реНрдбрд░ рдЧрд░рд┐рдиреЗрдЫ (рддрд░ рднрд╡рд┐рд╖реНрдпрдорд╛ рдирдпрд╛рдБ рдкрдЩреНрдХреНрддрд┐рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЕрд░реНрдбрд░ рдЧреНрдпрд╛рд░реЗрдиреНрдЯреА рдЫреИрди)ред рдХреЗрд╣рд┐ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рд╣рд░реВрдорд╛, рдпреЛ рдзреЗрд░реИ рдкреНрд░рд╢реНрдирд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд░рд╛рдореНрд░реЛ рдЕрдиреБрдХреВрд▓рди рд╣реЛ - рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рджреНрд╡рд╛рд░рд╛ рдзреЗрд░реИ рд░реЗрдХрд░реНрдбрд╣рд░реВ рдкрдвреНрдирдХреЛ рд╕рд╛рдеред рдЖрджреЗрд╢рдХреЛ рдмреЗрдлрд╛рдЗрджрд╛ VACUUM FULL рдХреЛ рдЬрд╕реНрддреИ рд╣реЛ - рдпрд╕рд▓реЗ рд╕рдЮреНрдЪрд╛рд▓рдирдХреЛ рдХреНрд░рдордорд╛ рддрд╛рд▓рд┐рдХрд╛ рд▓рдХ рдЧрд░реНрджрдЫред

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

Postgres рдХреЛ рдЕрдШрд┐рд▓реНрд▓реЛ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрдорд╛, рддрдкрд╛рдЗрдБ REINDEX CONCURRENTLY рдкреНрд░рдпреЛрдЧ рдЧрд░реА рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдПрдХреИрд╕рд╛рде рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдпрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдХрдбрд╛ рд▓рдХ рдирдЧрд░реА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ (ShareUpdateExclusiveLock, рдЬрд╕рд▓реЗ рд╕рдорд╛рдирд╛рдиреНрддрд░ рдкреНрд░рд╢реНрдирд╣рд░реВрдорд╛ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдЧрд░реНрджреИрди), рддреНрдпрд╕рдкрдЫрд┐ рдкреБрд░рд╛рдиреЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рд▓рд╛рдИ рдирдпрд╛рдБрд╕рдБрдЧ рдмрджрд▓реНрдиреБрд╣реЛрд╕реН рд░ рдкреБрд░рд╛рдиреЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдореЗрдЯрд╛рдЙрдиреБрд╣реЛрд╕реНред рдпрд╕рд▓реЗ рддрдкрд╛рдЗрдБрд▓рд╛рдИ рддрдкрд╛рдЗрдБрдХреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдорд╛ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирдЧрд░реА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдмреНрд▓реЛрдЯ рд╣рдЯрд╛рдЙрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдпреЛ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрди рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ рдХрд┐ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдкреБрди: рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджрд╛ рдбрд┐рд╕реНрдХ рдЙрдкрдкреНрд░рдгрд╛рд▓реАрдорд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рднрд╛рд░ рд╣реБрдиреЗрдЫред

рдпрд╕реИрд▓реЗ, рдпрджрд┐ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ "рдлреНрд▓рд╛рдЗрдорд╛" рдмреНрд▓реЛрдЯ рд╣рдЯрд╛рдЙрдиреЗ рддрд░рд┐рдХрд╛рд╣рд░реВ рдЫрдиреН рднрдиреЗ, рддреНрдпрд╣рд╛рдБ рдЯреЗрдмрд▓рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдХреБрдиреИ рдкрдирд┐ рдЫреИрдиред рдпреЛ рдЬрд╣рд╛рдБ рд╡рд┐рднрд┐рдиреНрди рдмрд╛рд╣реНрдп рд╡рд┐рд╕реНрддрд╛рд░рд╣рд░реВ рдЦреЗрд▓рдорд╛ рдЖрдЙрдБрдЫрдиреН: pg_repack (рдкрд╣рд┐рд▓реЗ pg_reorg), pgcompact, pgcompacttable рд░ рдЕрдиреНрдпред рдпрд╕ рд▓реЗрдЦрдорд╛, рдо рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рддреБрд▓рдирд╛ рдЧрд░реНрджрд┐рди рд░ рдХреЗрд╡рд▓ pg_repack рдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрдиреЗрдЫреБ, рдЬреБрди, рдХреЗрд╣рд┐ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдкрдЫрд┐, рд╣рд╛рдореА рдЖрдлреИрдВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВред

рдХрд╕рд░реА pg_repack рдХрд╛рдо рдЧрд░реНрджрдЫ

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

рдЕрд░реНрдХреЛ, pg_repack рд▓реЗ рдкреБрд░рд╛рдиреЛ рддрд╛рд▓рд┐рдХрд╛рдмрд╛рдЯ рдбрд╛рдЯрд╛рд▓рд╛рдИ рдирдпрд╛рдБ рддрд╛рд▓рд┐рдХрд╛рдорд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрджрдЫ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рд╕рдмреИ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкрдЩреНрдХреНрддрд┐рд╣рд░реВ рдлрд┐рд▓реНрдЯрд░ рдЧрд░реНрджреИ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рдирдпрд╛рдБ рддрд╛рд▓рд┐рдХрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫред рдпреА рд╕рдмреИ рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рдХреНрд░рдордорд╛, рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рд▓рдЧ рддрд╛рд▓рд┐рдХрд╛рдорд╛ рдЬрдореНрдорд╛ рд╣реБрдиреНрдЫрдиреНред

рдЕрд░реНрдХреЛ рдЪрд░рдг рдирдпрд╛рдБ рддрд╛рд▓рд┐рдХрд╛рдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрдиреБ рд╣реЛред рдорд╛рдЗрдЧреНрд░реЗрд╕рди рдзреЗрд░реИ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рд╣рд░реВрдорд╛ рдЧрд░рд┐рдиреНрдЫ, рд░ рдЬрдм рд▓рдЧ рддрд╛рд▓рд┐рдХрд╛рдорд╛ 20 рднрдиреНрджрд╛ рдХрдо рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рд╣рд░реВ рдмрд╛рдБрдХреА рдЫрдиреН, pg_repack рд▓реЗ рдмрд▓рд┐рдпреЛ рд▓рдХ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрдЫ, рдирд╡реАрдирддрдо рдбрд╛рдЯрд╛ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдЧрд░реНрджрдЫ, рд░ Postgres рдкреНрд░рдгрд╛рд▓реА рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВрдорд╛ рдкреБрд░рд╛рдиреЛ рддрд╛рд▓рд┐рдХрд╛рд▓рд╛рдИ рдирдпрд╛рдБрд╕рдБрдЧ рдмрджрд▓реНрдЫред рдпреЛ рдПрдХ рдорд╛рддреНрд░ рд░ рдзреЗрд░реИ рдЫреЛрдЯреЛ рд╕рдордп рд╣реЛ рдЬрдм рддрдкрд╛рдИрдВ рдЯреЗрдмрд▓ рд╕рдВрдЧ рдХрд╛рдо рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдиреБрд╣реБрдиреЗ рдЫреИрдиред рдпрд╕рдкрдЫрд┐, рдкреБрд░рд╛рдиреЛ рддрд╛рд▓рд┐рдХрд╛ рд░ рд▓рдЧрд╣рд░реВ рднрдПрдХреЛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдЯрд╛рдЗрдиреНрдЫ рд░ рдлрд╛рдЗрд▓ рдкреНрд░рдгрд╛рд▓реАрдорд╛ рдард╛рдЙрдБ рдЦрд╛рд▓реА рд╣реБрдиреНрдЫред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд░рд╛ рднрдПрдХреЛ рдЫред

рд╕рд┐рджреНрдзрд╛рдиреНрддрдорд╛ рд╕рдмреИ рд░рд╛рдореНрд░реЛ рджреЗрдЦрд┐рдиреНрдЫ, рддрд░ рд╡реНрдпрд╡рд╣рд╛рд░рдорд╛ рдХреЗ рд╣реБрдиреНрдЫ? рд╣рд╛рдореАрд▓реЗ 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 рд░ рд╕реНрдердЧрд┐рдд рдЕрд╡рд░реЛрдзрд╣рд░реВ

рдпрд╣рд╛рдБ рдпреЛ рдиреЛрдЯ рдЧрд░реНрди рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ рдХрд┐ рдпрджрд┐ рдмрд╛рдзрд╛ рд╕рд╛рдорд╛рдиреНрдп рдЫ рд░ рд╕реНрдердЧрд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫреИрди рднрдиреЗ, рддреНрдпрд╕рдХреЛ рд╕рдЯреНрдЯрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЕрджреНрд╡рд┐рддреАрдп рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдпрд╕ рдмрд╛рдзрд╛рд╕рдБрдЧ рдмрд░рд╛рдмрд░ рдЫ, рдХрд┐рдирднрдиреЗ Postgres рдорд╛ рдЕрджреНрд╡рд┐рддреАрдп рдЕрд╡рд░реЛрдзрд╣рд░реВ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрд░ рд▓рд╛рдЧреВ рдЧрд░рд┐рдиреНрдЫред рддрд░ рд╕реНрдердЧрд┐рдд рдЕрд╡рд░реЛрдз рдХреЛ рдорд╛рдорд▓рд╛ рдорд╛, рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рдорд╛рди рдЫреИрди, рдХрд┐рдирднрдиреЗ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╕реНрдердЧрд┐рдд рдЧрд░реНрди рд╕рдХрд┐рджреИрди рд░ 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. рдмреНрд▓реЛрдЯрд▓рд╛рдИ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕реНрддрд░рдорд╛ рд░рд╛рдЦреНрди AUTOVACUUM рд╕рдорд╛рдпреЛрдЬрди рдЧрд░реНрдиреБрд╣реЛрд╕реНред
  3. рдпрджрд┐ рдмреНрд▓реЛрдЯ рдЕрдЭреИ рдмрдвреНрджреИ рдЫ рд░ рддрдкрд╛рдИрд▓реЗ рдмрд╛рд╣рд┐рд░реА-рдмрдХреНрд╕ рдЙрдкрдХрд░рдгрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдпрд╕рд▓рд╛рдИ рд╣рдЯрд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрди рднрдиреЗ, рдмрд╛рд╣реНрдп рд╡рд┐рд╕реНрддрд╛рд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдирдбрд░рд╛рдЙрдиреБрд╣реЛрд╕реНред рдореБрдЦреНрдп рдХреБрд░рд╛ рд╕рдмреИ рдХреБрд░рд╛ рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрди рд╣реЛред
  4. рдЖрдлреНрдиреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрдиреБрд░реВрдк рдмрд╛рд╣реНрдп рд╕рдорд╛рдзрд╛рдирд╣рд░реВ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдЧрд░реНрди рдирдбрд░рд╛рдЙрдиреБрд╣реЛрд╕реН - рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдБ рдпреЛ рддрдкрд╛рдИрдВрдХреЛ рдЖрдлреНрдиреИ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдиреБ рднрдиреНрджрд╛ рдмрдвреА рдкреНрд░рднрд╛рд╡рдХрд╛рд░реА рд░ рдЕрдЭ рд╕рдЬрд┐рд▓реЛ рд╣реБрди рд╕рдХреНрдЫред

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди