рдкреНрд░рддрд┐рдХреГрддрд┐ рдмреИрдХрдЕрдк рдирд╣реАрдВ рд╣реИ. рдпрд╛ рдирд╣реАрдВ? рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЧрд▓рддреА рд╕реЗ рд╣рдЯрд╛рдП рдЧрдП рд╢реЙрд░реНрдЯрдХрдЯ рд╕реЗ рдЙрдмрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рд╡рд┐рд▓рдВрдмрд┐рдд рдкреНрд░рддрд┐рдХреГрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ред
рдкреНрд░рддрд┐рдХреГрддрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдмреИрдХрдЕрдк рд▓реЗрдиреЗ рдХрд╛ рд╕рд╛рдзрди рдирд╣реАрдВ рд╣реИ (gitlab-ce
рд╡рд┐рд▓рдВрдмрд┐рдд рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЗ рд╕рд╛рде, рд╣рдордиреЗ рдХреЗрд╡рд▓ 1,5 рдШрдВрдЯреЗ рдореЗрдВ рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред рджреЗрдЦрд┐рдпреЗ рдпреЗ рдХреИрд╕реЗ рд╣реБрдЖ.
PostgreSQL рдХреЗ рд╕рд╛рде рд╕рдордп рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ
PostgreSQL рдореЗрдВ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдордп рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд┐рдВрджреБ рдкрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
рдХреЛрд▓реНрдб рдмреИрдХрдЕрдк рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдбреЗрдЯрд╛рдмреЗрд╕ рдмреИрдХрдЕрдк рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ (GitLab рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рд▓рд╛рдЗрд╡ рдЗрди)
рд╡рд┐рд▓рдВрдмрд┐рдд рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреНрдпрд╛ рд╣реИ?
рдЖрд▓рд╕реА рдкреНрд░рддрд┐рдХреГрддрд┐ рд╡рд╛рд▓ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рджреЗрд░реА рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИред рдпрд╛рдиреА рдПрдХ рдШрдВрдЯреЗ рдореЗрдВ рдЯреНрд░рд╛рдВрдЬреИрдХреНрд╢рди рд╣реЛ рдЧрдпрд╛ X
, рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рддрд┐рдХреГрддрд┐ рдореЗрдВ рджреЗрд░реА рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ d
рдЬ X + d
.
PostgreSQL рдХреЗ рдкрд╛рд╕ рднреМрддрд┐рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ 2 рддрд░реАрдХреЗ рд╣реИрдВ: рдмреИрдХрдЕрдк рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдФрд░ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдкреНрд░рддрд┐рдХреГрддрд┐ред
рдХрд┐рд╕реА рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рд╡рд┐рд▓рдВрдмрд┐рдд рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ
recovery.conf
. рдЙрджрд╛рд╣рд░рдг:
standby_mode = 'on'
restore_command = '/usr/bin/envdir /etc/wal-e.d/env /opt/wal-e/bin/wal-e wal-fetch -p 4 "%f" "%p"'
recovery_min_apply_delay = '8h'
recovery_target_timeline = 'latest'
рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде, рд╣рдордиреЗ рдмреИрдХрдЕрдк рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд▓рдВрдмрд┐рдд рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреАред рдпрд╣рд╛рдБ рдЗрд╕рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ restore_command
) рд╕рдВрдЧреНрд░рд╣ рд╕реЗ, рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдЖрда рдШрдВрдЯреЗ рдХреЗ рдмрд╛рдж рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ (recovery_min_apply_delay
). рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╕рдордпрд░реЗрдЦрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рдирдЬрд╝рд░ рд░рдЦреЗрдЧреА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╕реНрдЯрд░ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг (recovery_target_timeline
).
╨б recovery_min_apply_delay
рдЖрдк рджреЗрд░реА рд╕реЗ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдХреБрдЫ рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ рдЬреЛ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓реЙрдЯ, рд╣реЙрдЯ рд╕реНрдЯреИрдВрдбрдмрд╛рдп рдлреАрдбрдмреИрдХ рдЗрддреНрдпрд╛рджрд┐ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред рд╡рд╛рд▓ рд╕рдВрдЧреНрд░рд╣ рдЖрдкрдХреЛ рдЙрдирд╕реЗ рдмрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдкреНрд░рд╛рдЪрд▓ recovery_min_apply_delay
рдХреЗрд╡рд▓ PostgreSQL 9.3 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рд╡рд┐рд▓рдВрдмрд┐рдд рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╕рдВрдпреЛрдЬрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ pg_xlog_replay_pause(), pg_xlog_replay_resume()
) рдпрд╛ рд╡рд┐рд▓рдВрдм рдХреА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рд╡рд╛рд▓ рдЦрдВрдбреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд░рдЦреЗрдВред
PostgreSQL рдпрд╣ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ?
рдпрд╣ рджреЗрдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ PostgreSQL рдЖрд▓рд╕реА рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХреЛ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ recoveryApplyDelay(XlogReaderState)
static bool
recoveryApplyDelay(XLogReaderState *record)
{
uint8 xact_info;
TimestampTz xtime;
long secs;
int microsecs;
/* nothing to do if no delay configured */
if (recovery_min_apply_delay <= 0)
return false;
/* no delay is applied on a database not yet consistent */
if (!reachedConsistency)
return false;
/*
* Is it a COMMIT record?
*
* We deliberately choose not to delay aborts since they have no effect on
* MVCC. We already allow replay of records that don't have a timestamp,
* so there is already opportunity for issues caused by early conflicts on
* standbys.
*/
if (XLogRecGetRmid(record) != RM_XACT_ID)
return false;
xact_info = XLogRecGetInfo(record) & XLOG_XACT_OPMASK;
if (xact_info != XLOG_XACT_COMMIT &&
xact_info != XLOG_XACT_COMMIT_PREPARED)
return false;
if (!getRecordTimestamp(record, &xtime))
return false;
recoveryDelayUntilTime =
TimestampTzPlusMilliseconds(xtime, recovery_min_apply_delay);
/*
* Exit without arming the latch if it's already past time to apply this
* record
*/
TimestampDifference(GetCurrentTimestamp(), recoveryDelayUntilTime,
&secs, µsecs);
if (secs <= 0 && microsecs <= 0)
return false;
while (true)
{
// Shortened:
// Use WaitLatch until we reached recoveryDelayUntilTime
// and then
break;
}
return true;
}
рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рд╣реИ рдХрд┐ рджреЗрд░реА рд▓реЗрдирджреЗрди рдкреНрд░рддрд┐рдмрджреНрдз рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдореЗрдВ рджрд░реНрдЬ рднреМрддрд┐рдХ рд╕рдордп рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ (xtime
). рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рд▓рдВрдм рдХреЗрд╡рд▓ рдХрдорд┐рдЯ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рд╕реАрдзреЗ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдХрдорд┐рдЯ рдореЗрдВ рджреЗрд░реА рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╡рд┐рд▓рдВрдм рдХреЗ рдмрд╛рдж рд╣реА рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦреЗрдВрдЧреЗред
рдбреЗрдЯрд╛ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд▓рдВрдмрд┐рдд рдкреНрд░рддрд┐рдХреГрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдФрд░ рдПрдХ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╣реИ рдЬрд┐рд╕рдХреЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЖрда рдШрдВрдЯреЗ рдХреА рджреЗрд░реА рд╣реИред рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рджреЗрдЦреЗрдВ
рдЬрдм рд╣рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛, рддреЛ рд╣рдо
SELECT pg_xlog_replay_pause();
рд╡рд┐рд░рд╛рдо рдХреЗ рд╕рд╛рде, рд╣рдореЗрдВ рдХреЛрдИ рдЬреЛрдЦрд┐рдо рдирд╣реАрдВ рдерд╛ рдХрд┐ рдкреНрд░рддрд┐рдХреГрддрд┐ рдЕрдиреБрд░реЛрдз рдХреЛ рджреЛрд╣рд░рд╛рдПрдЧреА DELETE
. рдпрджрд┐ рдЖрдкрдХреЛ рд╣рд░ рдЪреАрдЬрд╝ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдЪрд╛рд╣рд┐рдП рддреЛ рдпрд╣ рдПрдХ рдЙрдкрдпреЛрдЧреА рдЪреАрдЬрд╝ рд╣реИред
рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рд▓рдВрдмрд┐рдд рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЛ рдЕрдиреБрд░реЛрдз рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдкрд╣реБрдВрдЪрдирд╛ рд╣реЛрдЧрд╛ DELETE
. рд╣рдо рд╣рдЯрд╛рдиреЗ рдХрд╛ рднреМрддрд┐рдХ рд╕рдордп рд▓рдЧрднрдЧ рдЬрд╛рдирддреЗ рдереЗред рд╣рдордиреЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИ recovery_min_apply_delay
рдФрд░ рдЬреЛрдбрд╝рд╛ recovery_target_time
╨▓ recovery.conf
. рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рдмрд┐рдирд╛ рдХрд┐рд╕реА рджреЗрд░реА рдХреЗ рд╕рд╣реА рд╕рдордп рдкрд░ рдкрд╣реБрдВрдЪрддреА рд╣реИ:
recovery_target_time = '2018-10-12 09:25:00+00'
рд╕рдордп рдЯрд┐рдХрдЯреЛрдВ рдХреЗ рд╕рд╛рде, рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛ рдХрдо рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рддрд╛рдХрд┐ рдЫреВрдЯ рди рдЬрд╛рдПред рд╕рдЪ рд╣реИ, рдХрдореА рдЬрд┐рддрдиреА рдЕрдзрд┐рдХ рд╣реЛрдЧреА, рд╣рдо рдЙрддрдирд╛ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдЦреЛ рджреЗрдВрдЧреЗред рдкреБрдирдГ, рдпрджрд┐ рд╣рдо рдЕрдиреБрд░реЛрдз рдЪреВрдХ рдЬрд╛рддреЗ рд╣реИрдВ DELETE
, рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдпрд╛ рдкреАрдЖрдИрдЯреАрдЖрд░ рдХреЗ рд▓рд┐рдП рдХреЛрд▓реНрдб рдмреИрдХрдЕрдк рднреА рд▓реЗрдирд╛ рд╣реЛрдЧрд╛)ред
рд╣рдордиреЗ рд╕реНрдердЧрд┐рдд рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдФрд░ рд╡рд╛рд▓ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдордп рддрдХ рджреЛрд╣рд░рд╛рдпрд╛ рдЧрдпрд╛ред рдЖрдк рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдпрд╣ рдкреВрдЫрдХрд░ рдкреНрд░рдЧрддрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
SELECT
-- current location in WAL
pg_last_xlog_replay_location(),
-- current transaction timestamp (state of the replica)
pg_last_xact_replay_timestamp(),
-- current physical time
now(),
-- the amount of time still to be applied until recovery_target_time has been reached
'2018-10-12 09:25:00+00'::timestamptz - pg_last_xact_replay_timestamp() as delay;
рдпрджрд┐ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдЕрдм рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдкреВрд░реА рд╣реЛ рдЧрдИ рд╣реИред рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ recovery_target_action
рдЙрд╕ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рдЕрдиреБрд░реЛрдз рд╕реЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реМрдЯ рдЖрдпрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдм рдЖрдк рдбреЗрдЯрд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдордиреЗ рд╣рдЯрд╛рдП рдЧрдП рд▓реЗрдмрд▓ рдбреЗрдЯрд╛ рдФрд░ рдореБрджреНрджреЛрдВ рдФрд░ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рднреА рд▓рд┐рдВрдХ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрддреНрдкрд╛рджрди рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ред рдпрджрд┐ рдиреБрдХрд╕рд╛рди рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд╣реИрдВ, рддреЛ рдЖрдк рдмрд╕ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдореБрдЦреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЬрд┐рд╕ рдмрд┐рдВрджреБ рддрдХ рд╣рдо рдЙрдмрд░ рдЪреБрдХреЗ рд╣реИрдВ рдЙрд╕рдХреЗ рдмрд╛рдж рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рдЦреЛ рдЬрд╛рдПрдВрдЧреЗред
рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЗ рдмрдЬрд╛рдп, рд▓реЗрдирджреЗрди рдЖрдИрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдЗрди рдЖрдИрдбреА рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреАрдбреАрдПрд▓ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП (рдЬреИрд╕реЗ DROP TABLE
), рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ log_statements = 'ddl'
. рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓реЗрдирджреЗрди рдЖрдИрдбреА рд╣реЛрддреА, рддреЛ рд╣рдо рд▓реЗрддреЗ recovery_target_xid
рдФрд░ рдЕрдиреБрд░реЛрдз рд╕реЗ рдкрд╣рд▓реЗ рд▓реЗрди-рджреЗрди рддрдХ рд╕рдм рдХреБрдЫ рдЪрд▓рд╛ рджрд┐рдпрд╛ DELETE
.
рдХрд╛рдо рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ: рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рд╣рдЯрд╛ рджреЗрдВ recovery.conf
рдФрд░ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВред рдкреНрд░рддрд┐рдХреГрддрд┐ рдореЗрдВ рдЬрд▓реНрдж рд╣реА рдлрд┐рд░ рд╕реЗ рдЖрда рдШрдВрдЯреЗ рдХреА рджреЗрд░реА рд╣реЛрдЧреА, рдФрд░ рд╣рдо рднрд╡рд┐рд╖реНрдп рдХреА рдкрд░реЗрд╢рд╛рдирд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред
рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рд▓рд╛рдн
рдХреЛрд▓реНрдб рдмреИрдХрдЕрдк рдХреЗ рдмрдЬрд╛рдп рд╡рд┐рд▓рдВрдмрд┐рдд рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдкреВрд░реА рдЫрд╡рд┐ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдШрдВрдЯреЛрдВ рдЦрд░реНрдЪ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдкреВрд░реНрдг рдмреБрдирд┐рдпрд╛рджреА 2 рдЯреАрдмреА рдмреИрдХрдЕрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╣рдореЗрдВ рдкрд╛рдВрдЪ рдШрдВрдЯреЗ рд▓рдЧрддреЗ рд╣реИрдВред рдФрд░ рдлрд┐рд░ рдЖрдкрдХреЛ рд╡рд╛рдВрдЫрд┐рдд рд╕реНрдерд┐рддрд┐ (рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ) рдореЗрдВ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рд╕рдВрдкреВрд░реНрдг рджреИрдирд┐рдХ рд╡рд╛рд▓ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдПрдХ рд╕реНрдердЧрд┐рдд рдкреНрд░рддрд┐рдХреГрддрд┐ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рдХреЛрд▓реНрдб рдмреИрдХрдЕрдк рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ:
- рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рд╕рдВрдкреВрд░реНрдг рдореВрд▓ рдмреИрдХрдЕрдк рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
- рд╡рд╛рд▓ рдЦрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрда рдШрдВрдЯреЗ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд┐рдВрдбреЛ рд╣реИ рдЬрд┐рд╕реЗ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╣рдо рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд▓рдЧрд╛рддрд╛рд░ рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╡рд╛рд▓ рд╕реЗ рдкреАрдЖрдИрдЯреАрдЖрд░ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдФрд░ рд╣рдо рд╕реНрдердЧрд┐рдд рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдХреЗ рд╡рд╛рд▓ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░ рдпрд╛ рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рддреБрд░рдВрдд рдиреЛрдЯрд┐рд╕ рдХрд░реЗрдВрдЧреЗред
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдореЗрдВ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ 50 рдорд┐рдирдЯ рд▓рдЧреЗ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЧрддрд┐ рдкреНрд░рддрд┐ рдШрдВрдЯреЗ 110 рдЬреАрдмреА рд╡рд╛рд▓ рдбреЗрдЯрд╛ рдереА (рд╕рдВрдЧреНрд░рд╣ рдЕрднреА рднреА рдЪрд╛рд▓реВ рдерд╛)
рдкрд░рд┐рдгрд╛рдо: рдЬрд╣рд╛рдВ рдПрдХ рд╡рд┐рд▓рдВрдмрд┐рдд рдкреНрд░рддрд┐рдХреГрддрд┐ рдЙрдкрдпреЛрдЧреА рд╣реИ (рдФрд░ рдЬрд╣рд╛рдВ рдпрд╣ рдирд╣реАрдВ рд╣реИ)
рдпрджрд┐ рдЖрдкрдиреЗ рдЧрд▓рддреА рд╕реЗ рдбреЗрдЯрд╛ рдЦреЛ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╡рд┐рд▓рдВрдм рдХреЗ рднреАрддрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рд╣реИ, рддреЛ рдкреНрд░рд╛рдердорд┐рдХ рдЙрдкрдЪрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд▓рдВрдмрд┐рдд рдкреНрд░рддрд┐рдХреГрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рд░рдЦреЗрдВ: рдкреНрд░рддрд┐рдХреГрддрд┐ рдмреИрдХрдЕрдк рдирд╣реАрдВ рд╣реИред
рдмреИрдХрдЕрдк рдФрд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрджреНрджреЗрд╢реНрдп рд╣реИрдВред рдпрджрд┐ рдЖрдкрдиреЗ рдЧрд▓рддреА рд╕реЗ рдХреЛрд▓реНрдб рдмреИрдХрдЕрдк рдмрдирд╛ рд▓рд┐рдпрд╛ рд╣реИ рддреЛ рдпрд╣ рдЖрдкрдХреЗ рдХрд╛рдо рдЖрдПрдЧрд╛ DELETE
рдпрд╛ DROP TABLE
. рд╣рдо рдХреЛрд▓реНрдб рд╕реНрдЯреЛрд░реЗрдЬ рд╕реЗ рдмреИрдХрдЕрдк рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рдпрд╛ рд╕рдВрдкреВрд░реНрдг рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдкрд┐рдЫрд▓реА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рдЕрдиреБрд░реЛрдз DROP TABLE
рдХрд╛рд░реНрдпрд╢реАрд▓ рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рд╕рднреА рдкреНрд░рддрд┐рдХреГрддрд┐рдпреЛрдВ рдореЗрдВ рд▓рдЧрднрдЧ рддреБрд░рдВрдд рдкреБрдирд░реБрддреНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рддрд┐рдХреГрддрд┐ рдпрд╣рд╛рдВ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧреАред рдЬрдм рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рд░реНрд╡рд░ рдХрд┐рд░рд╛рдП рдкрд░ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд╡рдпрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЙрдкрд▓рдмреНрдз рд░рдЦрддреА рд╣реИ рдФрд░ рд▓реЛрдб рд╡рд┐рддрд░рд┐рдд рдХрд░рддреА рд╣реИред
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╡рд┐рд▓рдВрдмрд┐рдд рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЗ рд╕рд╛рде рднреА, рдпрджрд┐ рдбреЗрдЯрд╛ рд╕реЗрдВрдЯрд░ рдХреА рд╡рд┐рдлрд▓рддрд╛, рдЫрд┐рдкреА рд╣реБрдИ рдХреНрд╖рддрд┐, рдпрд╛ рдЕрдиреНрдп рдШрдЯрдирд╛рдПрдВ рдЬреЛ рддреБрд░рдВрдд рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдХрднреА-рдХрднреА рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╕реНрдерд╛рди рдкрд░ рдХреЛрд▓реНрдб рдмреИрдХрдЕрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЕрдХреЗрд▓реЗ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХрд╛ рдпрд╣рд╛рдБ рдХреЛрдИ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИред
рдиреЛрдЯ. рдкрд░
рд╕реНрд░реЛрдд: www.habr.com