DBA: рд╕рдХреНрд╖рдо рд░реВрдк рд╕реЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рдЖрдпрд╛рдд рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВ

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

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

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

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

1. рдЬрд╣рд╛рдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛рдБ?


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рддрдп рдХрд░реЗрдВ рдХрд┐ рд╣рдо рдЙрд╕ рдбреЗрдЯрд╛ рдХреЛ рдХрд╣рд╛рдВ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо "рдкреНрд░реЛрд╕реЗрд╕" рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

1.1ред рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛рдПрдБ (рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛)


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

рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдпрдВ рдХреЗ рдирд╛рдо рд╕реНрдерд╛рди


рдпрджрд┐ рджреЛ рдХрдиреЗрдХреНрд╢рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ CREATE TABLE x, рддреЛ рдХрд┐рд╕реА рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЧреИрд░-рдЕрдиреВрдареЗ рдбреАрдмреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреА ред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рджреЛрдиреЛрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рджреЛрдиреЛрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рддрд╛рд▓рд┐рдХрд╛ рдХреА рдЕрдкрдиреА рдкреНрд░рддрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреА ред рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рдХреБрдЫ рднреА рд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛редCREATE TEMPORARY TABLE x

рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде "рдЖрддреНрдо-рд╡рд┐рдирд╛рд╢"


рдЬрдм рдЖрдк рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рднреА рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛рдПрдБ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП "рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ" рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ DROP TABLE xрдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рдЕрд░реНрде рдирд╣реАрдВ рд╣реИ,

рдпрджрд┐ ... рдЖрдк рд▓реЗрди-рджреЗрди рдореЛрдб рдореЗрдВ pgbouncer рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдпрд╣ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрдиреЗрдХреНрд╢рди рдЕрднреА рднреА рд╕рдХреНрд░рд┐рдп рд╣реИ, рдФрд░ рдпрд╣ рдЕрд╕реНрдерд╛рдпреА рд╣реИ рддрд╛рд▓рд┐рдХрд╛ рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕, рдПрдХ рдЕрдиреНрдп рдХрдиреЗрдХреНрд╢рди рд╕реЗ pgbouncer рдХреЗ рд▓рд┐рдП, рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛рдХрд░ рдЗрд╕реЗ рджрд░рдХрд┐рдирд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рд╕рдЪ рд╣реИ, рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рдПрдХ рд╣реА рди рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рддрдм рдЖрдк "рдкрд┐рдЫрд▓реЗ рдорд╛рд▓рд┐рдХ" рд╕реЗ рдЫреЛрдбрд╝реЗ рдЧрдП рдбреЗрдЯрд╛ рдХреЛ "рдЕрдЪрд╛рдирдХ" рдЦреЛрдЬ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдореИрдиреБрдЕрд▓ рдкрдврд╝рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдЯреЗрдмрд▓ рдмрдирд╛рддреЗ рд╕рдордп рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИCREATE TEMPORARY TABLE IF NOT EXISTS x

ON COMMIT DROP - рдЕрд░реНрдерд╛рддреН, рдЬрдм рд▓реЗрдирджреЗрди рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рддрд╛рд▓рд┐рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджреА рдЬрд╛рдПрдЧреАред

рдЧреИрд░рдкреНрд░рддрд┐рдХреГрддрд┐


рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЬреБрдбрд╝рд╛рд╡ рд╣реЛрддрд╛ рд╣реИ, рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдвреЗрд░ + рд╡рд╛рд▓ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдбрдмрд▓-рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ , рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ INSERT / UPDATE / DELETE рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рд╣реЛрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛ рдЕрднреА рднреА рдПрдХ "рд▓рдЧрднрдЧ рд╕рд╛рдорд╛рдиреНрдп" рддрд╛рд▓рд┐рдХрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдкреНрд░рддрд┐рдХреГрддрд┐ рдкрд░ рднреА рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рдкреИрдЪ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЖрд╕рдкрд╛рд╕ рд╣реИред

1.2ред рдЕрд╕реВрдЪреАрдмрджреНрдз рддрд╛рд▓рд┐рдХрд╛рдПрдБ (UNLOGGED TABLE)


рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рдмреЛрдЭрд┐рд▓ рдИрдЯреАрдПрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдПрдХ рд▓реЗрдирджреЗрди рдХреЗ рднреАрддрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рд▓реЗрдирджреЗрди рдореЛрдб рдореЗрдВ pgbouncer рд╣реИ ? ..

рдпрд╛ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдЗрддрдиреА рдмрдбрд╝реА рд╣реИ рдХрд┐ рдкреНрд░рддрд┐ рдХрдиреЗрдХреНрд╢рди рдкрд░реНрдпрд╛рдкреНрдд рдмреИрдВрдбрд╡рд┐рдбреНрде рдирд╣реАрдВ рд╣реИ? рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ (рдкрдврд╝реЗрдВ, рд╕реАрдкреАрдпреВ рдкрд░ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛)? ..

рдпрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ ред ..

рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╡рд┐рдХрд▓реНрдк рд╣реИ - рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдПрдХ рдЧреИрд░-рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВ ред рдкреБрди, рд╣рд╛рдБред рдЕрд░реНрдерд╛рдд:

  • рдЕрдзрд┐рдХрддрдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде "рдЙрд╕рдХрд╛" рдЯреЗрдмрд▓ рдмрдирд╛рдпрд╛ рддрд╛рдХрд┐ рдХрд┐рд╕реА рдХреЗ рд╕рд╛рде рдкрд╛рд░ рди рд╣реЛ
  • рдПрдХреНрд╕рдЯреНрд░реЗрдХреНрдЯ : рдЙрдирдореЗрдВ рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рд╕реНрд░реЛрдд рд╕реЗ рдбреЗрдЯрд╛ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ
  • рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо : рд░реВрдкрд╛рдВрддрд░рд┐рдд, рдХреБрдВрдЬреА рдмрдВрдзрди рдлрд╝реАрд▓реНрдб рдореЗрдВ рднрд░рд╛ рдЧрдпрд╛
  • рд▓реЛрдб : рд▓рдХреНрд╖рд┐рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рддреИрдпрд╛рд░ рдбреЗрдЯрд╛ рдбрд╛рд▓рд╛
  • "рдореЗрд░реЗ" рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛

рдФрд░ рдЕрдм - рдорд░рд╣рдо рдореЗрдВ рдПрдХ рдордХреНрдЦреАред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, PostgreSQL рдореЗрдВ рд╕рднреА рд▓реЗрдЦрди рджреЛ рдмрд╛рд░ рд╣реЛрддрд╛ рд╣реИ - рдкрд╣рд▓реЗ рд╡рд╛рд▓ рдореЗрдВ , рдлрд┐рд░ рдЯреЗрдмрд▓ / рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд╢рд░реАрд░ рдореЗрдВред рдпрд╣ рд╕рдм ACID рдФрд░ COMMITрдиреЗрд╕реНрдЯреЗрдб рдФрд░ ROLLBACKрдиреЗрд╕реНрдЯреЗрдб рд▓реЗрдирджреЗрди рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХреА рд╕рд╣реА рджреГрд╢реНрдпрддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред

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

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, PostgreSQL рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рд╕рдВрд╕реНрдХрд░рдг 9.1 рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬреИрд╕реЗ рдХрд┐ рдЧреИрд░-рдЬрд░реНрдирд▓ (UNLOGGED) рдЯреЗрдмрд▓ :
. , , (. 29), . , ; . , . , , .
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реЛрдЧрд╛ , рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ "рдХреНрд░реИрд╢" рд╣реЛрддрд╛ рд╣реИ - рдпрд╣ рдЕрдкреНрд░рд┐рдп рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рддрдиреА рдмрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдХреНрдпрд╛ рдЖрдкрдХреА ETL рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ "рдкреБрдирд░реЛрджреНрдзрд╛рд░" рдХреЗ рдмрд╛рдж рдЗрд╕реЗ "рдмреАрдЪ рд╕реЗ" рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдЬрд╛рдирддреА рд╣реИ? ..

рдпрджрд┐ рдирд╣реАрдВ, рдФрд░ рдКрдкрд░ рдХрд╛ рдорд╛рдорд▓рд╛ рдЖрдкрдХреЗ рд╕рдорд╛рди рд╣реИ - рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ UNLOGGED, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдХрднреА рд╢рд╛рдорд┐рд▓ рди рдХрд░реЗрдВ рдбреЗрдЯрд╛ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЖрдк рдкреНрд░рд┐рдп рд╣реИрдВред

1.3ред COMMIT {DELETE ROWS | рдбреНрд░реЙрдк}


рд▓реЗрдирджреЗрди рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рддреЗ рд╕рдордп рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдКрдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ, рдпрд╣ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рд╕реНрдерд┐рддрд┐ рдФрд░ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ - рдпрд╣рд╛рдБ рдпрд╣ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ ред рдЪреВрдВрдХрд┐ рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдореЗрдЯрд╛ рд╡рд┐рд╡рд░рдг рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдкреВрд░реНрдг рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдПрдХ рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдирд┐рд░рдВрддрд░ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╣рдЯрд╛рдиреЗ рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдЯреЗрдмрд▓ pg_class, pg_attribute, pg_attrdef, pg_depend рдкрд░ рдордЬрдмреВрдд "рд╕реВрдЬрди" рд╣реЛрддреА рд╣реИ ... рдЕрдм рдЖрдк рд▓рд╛рдЗрди рдкрд░ рдПрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╣реИ рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛, рдЬреЛ рд╣рд░ рд╕реЗрдХрдВрдб рдПрдХ рдирдпрд╛ рд▓реЗрдирджреЗрди рдЦреЛрд▓рддрд╛ рд╣реИ, рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рддрд╛ рд╣реИ, рднрд░рддрд╛ рд╣реИ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣рдЯрд╛рддрд╛ рд╣реИ ... рд╕рд┐рд╕реНрдЯрдо рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдХрдЪрд░рд╛ рдЕрдзрд┐рдХ рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЬрдорд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдЕрддрд┐рд░рд┐рдХреНрдд рдмреНрд░реЗрдХ рд╣реИредON COMMIT DROPDROP TABLEON COMMIT DELETE ROWSTRUNCATE TABLE





рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдирд╣реАрдВ! рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕реЗ CREATE TEMPORARY TABLE x ... ON COMMIT DELETE ROWSрд▓реЗрди-рджреЗрди рдХреЗ рдЪрдХреНрд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИ - рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдирдП рд▓реЗрдирджреЗрди рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рддрд╛рд▓рд┐рдХрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реЛрдЧреА (рдХреЙрд▓ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ CREATE), рд▓реЗрдХрд┐рди рдпрд╣ рдЦрд╛рд▓реА рд╣реЛрдЧрд╛ , рдзрдиреНрдпрд╡рд╛рдж TRUNCATE(рд╣рдордиреЗ рдХреЙрд▓ рдХреЛ рднреА рдмрдЪрд╛рдпрд╛) рдЬрдм рдкрд┐рдЫрд▓рд╛ рд▓реЗрдирджреЗрди рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рдерд╛ред

1.4ред рдкрд╕рдВрдж рд╣реИ ... рд╢рд╛рдорд┐рд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИ ...


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

рд▓реЗрдХрд┐рди рдЖрд▓рд╕реНрдп рдкреНрд░рдЧрддрд┐ рдХрд╛ рдЗрдВрдЬрди рд╣реИ! рдЗрд╕рд▓рд┐рдП, "рдореЙрдбрд▓ рдкрд░" рдПрдХ рдирдИ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

CREATE TEMPORARY TABLE import_table(
  LIKE target_table
);

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

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

DEFAULTLIKE target_table INCLUDING DEFAULTSLIKE target_table INCLUDING ALL

рдпрджрд┐ рдЖрдк рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рднрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╕реВрдЪрдХ рд░реЛрд▓ рдХрд░рддреЗ рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ pg_dump рдХрд░рддрд╛ рд╣реИ ред

рд╕рдм рд╕рдм рдореЗрдВ, RTFM !

2. рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ?


рдореИрдВ рдмрд╕ рдХрд╣реВрдБрдЧрд╛ - COPY"рдкреИрдХ" рдХреЗ рдмрдЬрд╛рдп рдЙрдкрдпреЛрдЧ- рдкреНрд░рд╡рд╛рд╣ INSERT, рдХрдИ рдмрд╛рд░ рддреНрд╡рд░рдг ред рдЖрдк рд╕реАрдзреЗ рдПрдХ рдкреВрд░реНрд╡-рдирд┐рд░реНрдорд┐рдд рдлрд╝рд╛рдЗрд▓ рд╕реЗ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

3. рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓реЗрдВ?


рддреЛ, рд╣рдорд╛рд░реЗ рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рджреЗрдЦрдиреЗ рджреЛ:

  • рдЖрдкрдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ 1M рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд▓реЗрдЯ рд╣реИ
  • рд╣рд░ рджрд┐рди рдЧреНрд░рд╛рд╣рдХ рдЖрдкрдХреЛ рдПрдХ рдирдИ рдкреВрд░реНрдг "рдЫрд╡рд┐" рднреЗрдЬрддрд╛ рд╣реИ
  • рдЕрдиреБрднрд╡ рд╕реЗ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕рдордп-рд╕рдордп рдкрд░ 10K рд╕реЗ рдЕрдзрд┐рдХ рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВ

рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг KLADR рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИ - рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рд╕рд╛рдкреНрддрд╛рд╣рд┐рдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ (рдмрд╕реНрддрд┐рдпреЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛, рд╕рдбрд╝рдХ рд╕рдВрдШреЛрдВ, рдирдП рдШрд░реЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐) рдмрд╣реБрдд рдХрдо рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд░рд╛рд╖реНрдЯреНрд░рд╡реНрдпрд╛рдкреА рднреАред

3.1ред рдкреВрд░реНрдг рддреБрд▓реНрдпрдХрд╛рд▓рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо


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

  • рд╡рд╣ рд╕рдм рдХреБрдЫ рд╣рдЯрд╛ рджреЗрдВ рдЬреЛ рдЕрдм рдирд╣реАрдВ рд╣реИ
  • рд╡рд╣ рд╕рдм рдХреБрдЫ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдерд╛, рдФрд░ рдЖрдкрдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
  • рд╡рд╣ рд╕рдм рдХреБрдЫ рдбрд╛рд▓реЗрдВ рдЬреЛ рдирд╣реАрдВ рд░рд╣рд╛ рд╣реИ

рдЗрд╕ рдХреНрд░рдо рдореЗрдВ рдпрд╣ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпреЛрдВ рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЯреЗрдмрд▓ рдХрд╛ рдЖрдХрд╛рд░ рдиреНрдпреВрдирддрдо рд░реВрдк рд╕реЗ рдмрдврд╝рддрд╛ рд╣реИ ( MVCC рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╛рдж рд░рдЦреЗрдВ! )ред

Dst рд╕реЗ DELETE


рдирд╣реАрдВ, рдмреЗрд╢рдХ, рдЖрдк рд╕рд┐рд░реНрдл рджреЛ рдСрдкрд░реЗрд╢рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • рд╣рдЯрд╛рдирд╛ ( DELETE) рд╕рдм рдкрд░
  • рдПрдХ рдирдИ рдЫрд╡рд┐ рд╕реЗ рд╕рдм рдХреБрдЫ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ

рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, MVCC рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЖрдХрд╛рд░ рдареАрдХ рджреЛ рдмрд╛рд░ рдмрдврд╝ рдЬрд╛рдПрдЧрд╛ ! 10K рдЕрдкрдбреЗрдЯ рдХреЗ рдХрд╛рд░рдг рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ + 1M рдЫрд╡рд┐ рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ - рдЗрддрдирд╛-рдЕрддрд┐рд░реЗрдХ ...

TRUNCATE dst


рдПрдХ рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдкреВрд░реА рдкреНрд▓реЗрдЯ рдХреЛ рдХрд╛рдлреА рд╕рд╕реНрддреЗ рдореЗрдВ рд╕рд╛рдл рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  • рд╕реНрдкрд╖реНрдЯ ( TRUNCATE) рдкреВрд░реА рдореЗрдЬ
  • рдПрдХ рдирдИ рдЫрд╡рд┐ рд╕реЗ рд╕рдм рдХреБрдЫ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ

рд╡рд┐рдзрд┐ рдкреНрд░рднрд╛рд╡реА рд╣реИ, рдХрднреА-рдХрднреА рдпрд╣ рдХрд╛рдлреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ , рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ ... рд╣рдо 1M рд░рд┐рдХреЙрд░реНрдб рднрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕ рд╕рдордп рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдЦрд╛рд▓реА рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рдирд╣реАрдВ рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдПрдХрд▓ рд▓реЗрдирджреЗрди рдореЗрдВ рд▓рдкреЗрдЯреЗ рдмрд┐рдирд╛ рд╣реЛрдЧрд╛)ред

рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реИ:

  • рд╣рдо рдПрдХ рд▓рдВрдмрд╛ рд▓реЗрдирджреЗрди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
  • TRUNCATEрд▓рдЧрд╛рддрд╛ AccessExclusive рддрд╛рд▓рд╛
  • рд╣рдо рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рд╕рдордп рд╣рд░ рдХреЛрдИ рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛SELECT

рдХреБрдЫ рдмреБрд░рд╛ рд╣реИ ...

рдЯреЗрдЯрд░ рдЯреЗрдмрд▓ ... рд░реЗрдирдо ... / рдбреНрд░реЙрдк рдЯреЗрдмрд▓ ...


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

  • AccessExclusive рднреА , рднрд▓реЗ рд╣реА рд╕рдордп рдореЗрдВ рдХрд╛рдлреА рдХрдо рд╣реЛ
  • рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рднреА рдХреНрд╡реЗрд░реА рдкреНрд▓рд╛рди / рдЖрдБрдХрдбрд╝реЗ рд░реАрд╕реЗрдЯ рдХрд░ рджрд┐рдП рдЧрдП рд╣реИрдВ, ANALYZE рдХреЛ рдЪрд▓рд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ
  • рд╕рднреА рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬрд┐рдпрд╛рдБ (FK) рдЯреЗрдмрд▓ рдкрд░ рдЯреВрдЯ рдЬрд╛рддреА рд╣реИрдВ

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

DELETE, UPDATE, INSERT


рдЗрд╕рд▓рд┐рдП, рд╣рдо рддреАрди рдСрдкрд░реЗрд╢рди рдХреЗ рдПрдХ рдЧреИрд░-рдмреНрд▓реЙрдХрд┐рдВрдЧ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд░реЛрдХрддреЗ рд╣реИрдВред рд▓рдЧрднрдЧ рддреАрди ... рдпрд╣ рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдХреИрд╕реЗ рдХрд░реЗрдВ?

--     ,     "" 
BEGIN;

--      
CREATE TEMPORARY TABLE tmp(
  LIKE dst INCLUDING INDEXES --    ,   
) ON COMMIT DROP; --       

-- -     COPY
COPY tmp FROM STDIN;
-- ...
-- \.

--  
DELETE FROM
  dst D
USING
  dst X
LEFT JOIN
  tmp Y
    USING(pk1, pk2) --   
WHERE
  (D.pk1, D.pk2) = (X.pk1, X.pk2) AND
  Y IS NOT DISTINCT FROM NULL; -- ""

--  
UPDATE
  dst D
SET
  (f1, f2, f3) = (T.f1, T.f2, T.f3)
FROM
  tmp T
WHERE
  (D.pk1, D.pk2) = (T.pk1, T.pk2) AND
  (D.f1, D.f2, D.f3) IS DISTINCT FROM (T.f1, T.f2, T.f3); --   

--  
INSERT INTO
  dst
SELECT
  T.*
FROM
  tmp T
LEFT JOIN
  dst D
    USING(pk1, pk2)
WHERE
  D IS NOT DISTINCT FROM NULL;

COMMIT;

3.2ред рдЖрдпрд╛рдд рдкреЛрд╕реНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ


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

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

--  
CREATE TABLE kladr(...);
CREATE TABLE kladr_house(...);

--    
CREATE TABLE kladr$log(
  ro kladr, --      /
  rn kladr
);

CREATE TABLE kladr_house$log(
  ro kladr_house,
  rn kladr_house
);

--    
CREATE OR REPLACE FUNCTION diff$log() RETURNS trigger AS $$
DECLARE
  dst varchar = TG_TABLE_NAME || '$log';
  stmt text = '';
BEGIN
  --      
  IF TG_OP = 'UPDATE' THEN
    IF NEW IS NOT DISTINCT FROM OLD THEN
      RETURN NEW;
    END IF;
  END IF;
  --   
  stmt = 'INSERT INTO ' || dst::text || '(ro,rn)VALUES(';
  CASE TG_OP
    WHEN 'INSERT' THEN
      EXECUTE stmt || 'NULL,$1)' USING NEW;
    WHEN 'UPDATE' THEN
      EXECUTE stmt || '$1,$2)' USING OLD, NEW;
    WHEN 'DELETE' THEN
      EXECUTE stmt || '$1,NULL)' USING OLD;
  END CASE;
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

рдЕрдм рд╣рдо рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЯреНрд░рд┐рдЧрд░ (рдпрд╛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ ALTER TABLE ... ENABLE TRIGGER ...) рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ :

CREATE TRIGGER log
  AFTER INSERT OR UPDATE OR DELETE
  ON kladr
    FOR EACH ROW
      EXECUTE PROCEDURE diff$log();

CREATE TRIGGER log
  AFTER INSERT OR UPDATE OR DELETE
  ON kladr_house
    FOR EACH ROW
      EXECUTE PROCEDURE diff$log();

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

3.3ред рд╕рдВрдмрдВрдзрд┐рдд рд╕реЗрдЯ рдЖрдпрд╛рдд рдХрд░реЗрдВ


рдКрдкрд░, рд╣рдордиреЗ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрдм рд╕реНрд░реЛрдд рдФрд░ рд░рд┐рд╕реАрд╡рд░ рдХреА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдореЗрд▓ рдЦрд╛рддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдмрд╛рд╣рд░реА рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдЕрдирд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реНрдЯреЛрд░реЗрдЬ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рд╕реЗ рдЕрд▓рдЧ рдХреЛрдИ рдкреНрд░рд╛рд░реВрдк рд╣реЛ?

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдФрд░ рдЙрдирдХреЗ рдЦрд╛рддреЛрдВ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЛ рд▓реЗрдВ, рдХреНрд▓рд╛рд╕рд┐рдХ рдХрдИ-рд╕реЗ-рдПрдХ рд╡рд┐рдХрд▓реНрдк:

CREATE TABLE client(
  client_id
    serial
      PRIMARY KEY
, inn
    varchar
      UNIQUE
, name
    varchar
);

CREATE TABLE invoice(
  invoice_id
    serial
      PRIMARY KEY
, client_id
    integer
      REFERENCES client(client_id)
, number
    varchar
, dt
    date
, sum
    numeric(32,2)
);

рд▓реЗрдХрд┐рди рдмрд╛рд╣рд░реА рд╕реНрд░реЛрдд рд╕реЗ рдЙрддрд╛рд░рдирд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП "рд╕рднреА рдореЗрдВ рдПрдХ" рдХреЗ рд░реВрдк рдореЗрдВ рдЖрддрд╛ рд╣реИ:

CREATE TEMPORARY TABLE invoice_import(
  client_inn
    varchar
, client_name
    varchar
, invoice_number
    varchar
, invoice_dt
    date
, invoice_sum
    numeric(32,2)
);

рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЧреНрд░рд╛рд╣рдХ рдбреЗрдЯрд╛ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдореБрдЦреНрдп рд░рд┐рдХреЙрд░реНрдб "рдЦрд╛рддрд╛" рд╣реИ:

0123456789;;A-01;2020-03-16;1000.00
9876543210;;A-02;2020-03-16;666.00
0123456789;;B-03;2020-03-16;9999.00

рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП, рдмрд╕ рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдбрд╛рд▓реЗрдВ, рд▓реЗрдХрд┐рди рдпрд╛рдж рд░рдЦреЗрдВ - COPYрдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛ рд╕реЗ!

INSERT INTO invoice_import
VALUES
  ('0123456789', '', 'A-01', '2020-03-16', 1000.00)
, ('9876543210', '', 'A-02', '2020-03-16', 666.00)
, ('0123456789', '', 'B-03', '2020-03-16', 9999.00);

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЙрди "рдХрдЯреНрд╕" рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рдирд╕реЗ рд╣рдорд╛рд░реЗ "рддрдереНрдпреЛрдВ" рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реЛрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЦрд╛рддреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

CREATE TEMPORARY TABLE client_import AS
SELECT DISTINCT ON(client_inn)
--   SELECT DISTINCT,    
  client_inn inn
, client_name "name"
FROM
  invoice_import;

рдЧреНрд░рд╛рд╣рдХ рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдЦрд╛рддреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдЗрди рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрдирдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝реЗрдВ:

ALTER TABLE invoice_import ADD COLUMN client_id integer;
ALTER TABLE client_import ADD COLUMN client_id integer;

рд╣рдо рдереЛрдбрд╝рд╛ рд╕реБрдзрд╛рд░ рдХреЗ рд╕рд╛рде рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ - рд╣рдо рд▓рдХреНрд╖реНрдп рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХреБрдЫ рднреА рдЕрдкрдбреЗрдЯ рдпрд╛ рдбрд┐рд▓реАрдЯ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдпрд╛рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд▓рд╛рдЗрдВрдЯ "рдХреЗрд╡рд▓-рдкрд░рд┐рд╢рд┐рд╖реНрдЯ" рд╣реИ:

--     ID   
UPDATE
  client_import T
SET
  client_id = D.client_id
FROM
  client D
WHERE
  T.inn = D.inn; -- unique key

--       ID
WITH ins AS (
  INSERT INTO client(
    inn
  , name
  )
  SELECT
    inn
  , name
  FROM
    client_import
  WHERE
    client_id IS NULL --  ID  
  RETURNING *
)
UPDATE
  client_import T
SET
  client_id = D.client_id
FROM
  ins D
WHERE
  T.inn = D.inn; -- unique key

--  ID    
UPDATE
  invoice_import T
SET
  client_id = D.client_id
FROM
  client_import D
WHERE
  T.client_inn = D.inn; --  

рджрд░рдЕрд╕рд▓, рд╕рдм рдХреБрдЫ - invoice_importрдЕрдм рд╣рдо рд╕рдВрдЪрд╛рд░ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рднрд░ рдЧрдП рд╣реИрдВ client_idрдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдЦрд╛рддрд╛ рдбрд╛рд▓реЗрдВрдЧреЗред

All Articles