DBA: เจธเจฎเจ•เจพเจฒเฉ€เจ•เจฐเจจ เจ…เจคเฉ‡ เจ†เจฏเจพเจค เจจเฉ‚เฉฐ เจธเจฎเจฐเฉฑเจฅ เจขเฉฐเจ— เจจเจพเจฒ เจธเฉฐเจ—เจ เจฟเจค เจ•เจฐเฉ‹

เจตเฉฑเจกเฉ‡ เจกเฉ‡เจŸเจพ เจธเฉˆเฉฑเจŸเจพเจ‚ เจฆเฉ€ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฒเจˆ (เจตเฉฑเจ– ETL เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚: เจ‡เฉฑเจ• เจฌเจพเจนเจฐเฉ€ เจธเจฐเฉ‹เจค เจจเจพเจฒ เจ†เจฏเจพเจค, เจชเจฐเจฟเจตเจฐเจคเจจ เจ…เจคเฉ‡ เจธเจฎเจ•เจพเจฒเฉ€เจ•เจฐเจจ) เจ…เจ•เจธเจฐ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ เจ…เจธเจฅเจพเจˆ เจคเฉŒเจฐ 'เจคเฉ‡ "เจฏเจพเจฆ เจฐเฉฑเจ–เฉ‹" เจ…เจคเฉ‡ เจคเฉเจฐเฉฐเจค เจ•เจพเจฐเจตเจพเจˆ เจ•เจฐเฉ‹ เจ•เฉเจ เจตเจฟเจธเจผเจพเจฒ

เจ‡เจธ เจ•เจฟเจธเจฎ เจฆเจพ เจ‡เฉฑเจ• เจ†เจฎ เจ•เฉฐเจฎ เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจ•เฉเจ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจธเฉเจฃเจฆเจพ เจนเฉˆ: "เจ‡เจฅเฉ‡ เจนเฉ€ เจฒเฉ‡เจ–เจพ เจตเจฟเจญเจพเจ— เจ—เจพเจนเจ• เจฌเฉˆเจ‚เจ• เจคเฉ‹เจ‚ เจ‰เจคเจพเจฐเจฟเจ† เจ—เจฟเจ† เจ†เจ–เจฐเฉ€ เจชเฉเจฐเจพเจชเจค เจนเฉ‹เจ เจญเฉเจ—เจคเจพเจจ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจตเฉˆเจฌเจธเจพเจˆเจŸ เจคเฉ‡ เจœเจฒเจฆเฉ€ เจ…เจชเจฒเฉ‹เจก เจ•เจฐเจจ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ†เจชเจฃเฉ‡ เจ–เจพเจคเจฟเจ†เจ‚ เจจเจพเจฒ เจฒเจฟเฉฐเจ• เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ"

เจชเจฐ เจœเจฆเฉ‹เจ‚ เจ‡เจธ "เจ•เฉเจ" เจฆเฉ€ เจฎเจพเจคเจฐเจพ เจธเฉˆเจ‚เจ•เฉœเฉ‡ เจฎเฉˆเจ—เจพเจฌเจพเจˆเจŸ เจตเจฟเฉฑเจš เจฎเจพเจชเจฃเฉ€ เจธเจผเฉเจฐเฉ‚ เจนเฉ‹ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, เจ…เจคเฉ‡ เจธเฉ‡เจตเจพ เจจเฉ‚เฉฐ เจกเจพเจŸเจพเจฌเฉ‡เจธ 24x7 เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจเจพ เจœเจพเจฐเฉ€ เจฐเฉฑเจ–เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจฎเจพเฉœเฉ‡ เจชเฉเจฐเจญเจพเจต เจชเฉˆเจฆเจพ เจนเฉเฉฐเจฆเฉ‡ เจนเจจ เจœเฉ‹ เจคเฉเจนเจพเจกเฉ€ เจœเจผเจฟเฉฐเจฆเจ—เฉ€ เจจเฉ‚เฉฐ เจฌเจฐเจฌเจพเจฆ เจ•เจฐ เจฆเฉ‡เจฃเจ—เฉ‡เฅค
DBA: เจธเจฎเจ•เจพเจฒเฉ€เจ•เจฐเจจ เจ…เจคเฉ‡ เจ†เจฏเจพเจค เจจเฉ‚เฉฐ เจธเจฎเจฐเฉฑเจฅ เจขเฉฐเจ— เจจเจพเจฒ เจธเฉฐเจ—เจ เจฟเจค เจ•เจฐเฉ‹
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 - เจฏเจพเจจเฉ€, เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจชเฉ‚เจฐเจพ เจนเฉ‹เจฃ 'เจคเฉ‡, เจธเจพเจฐเจฃเฉ€ เจ†เจชเจฃเฉ‡ เจ†เจช เจฎเจฟเจŸเจพ เจฆเจฟเฉฑเจคเฉ€ เจœเจพเจตเฉ‡เจ—เฉ€เฅค

เจ—เฉˆเจฐ-เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€

เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‰เจน เจธเจฟเจฐเจซเจผ เจ‡เฉฑเจ• เจ–เจพเจธ เจ•เฉเจจเฉˆเจ•เจธเจผเจจ เจจเจพเจฒ เจธเจฌเฉฐเจงเจค เจนเจจ, เจ…เจธเจฅเจพเจˆ เจŸเฉ‡เจฌเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจฆเฉเจนเจฐเจพเจ‡เจ† เจจเจนเฉ€เจ‚ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจชเจฐ เจ‡เจน เจกเจพเจŸเจพ เจฆเฉ€ เจกเจฌเจฒ เจฐเจฟเจ•เจพเจฐเจกเจฟเฉฐเจ— เจฆเฉ€ เจฒเฉ‹เฉœ เจจเฉ‚เฉฐ เจ–เจคเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ เจนเฉ€เจช + WAL เจตเจฟเฉฑเจš, เจ‡เจธเจฒเจˆ เจ‡เจธ เจตเจฟเฉฑเจš INSERT/UPDATE/DELETE เจฌเจนเฉเจค เจคเฉ‡เจœเจผ เจนเฉˆเฅค

เจชเจฐ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เฉฑเจ• เจ…เจธเจฅเจพเจˆ เจธเจพเจฐเจฃเฉ€ เจ…เจœเฉ‡ เจตเฉ€ เจ‡เฉฑเจ• "เจฒเจ—เจญเจ— เจ†เจฎ" เจธเจพเจฐเจฃเฉ€ เจนเฉˆ, เจ‡เจธ เจจเฉ‚เฉฐ เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€ 'เจคเฉ‡ เจตเฉ€ เจจเจนเฉ€เจ‚ เจฌเจฃเจพเจ‡เจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจ˜เฉฑเจŸเฉ‹ เจ˜เฉฑเจŸ เจนเฉเจฃ เจฒเจˆ, เจนเจพเจฒเจพเจ‚เจ•เจฟ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจชเฉˆเจš เจฒเฉฐเจฌเฉ‡ เจธเจฎเฉ‡เจ‚ เจคเฉ‹เจ‚ เจ˜เฉเฉฐเจฎ เจฐเจฟเจนเจพ เจนเฉˆ.

1.2 เจ…เจฃเจฒเจพเจ—เจก เจŸเฉ‡เจฌเจฒ

เจชเจฐ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เฉ€ เจ•เจฐเจจเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจœเฉ‡เจ•เจฐ เจคเฉเจนเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจ•เฉเจ เจฎเฉเจธเจผเจ•เจฒ ETL เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจนเฉˆ เจœเฉ‹ เจ‡เฉฑเจ• เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจตเจฟเฉฑเจš เจฒเจพเจ—เฉ‚ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเฉ€ เจœเจพ เจธเจ•เจฆเฉ€, เจชเจฐ เจคเฉเจนเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจ…เจœเฉ‡ เจตเฉ€ เจนเฉˆ เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจฎเฉ‹เจก เจตเจฟเฉฑเจš pgbouncer? ..

เจœเจพเจ‚ เจกเฉ‡เจŸเจพ เจฆเจพ เจชเฉเจฐเจตเจพเจน เจ‡เฉฐเจจเจพ เจตเฉฑเจกเจพ เจนเฉˆ เจ•เจฟ เจ‡เฉฑเจ• เจ•เฉเจจเฉˆเจ•เจธเจผเจจ 'เจคเฉ‡ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ€ เจฌเฉˆเจ‚เจกเจตเจฟเจกเจฅ เจจเจนเฉ€เจ‚ เจนเฉˆ เจ‡เฉฑเจ• เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจคเฉ‹เจ‚ (เจชเฉœเฉเจนเฉ‹, เจชเฉเจฐเจคเฉ€ CPU เจ‡เฉฑเจ• เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†)?..

เจœเจพเจ‚ เจ•เฉเจ เจ†เจชเจฐเฉ‡เจธเจผเจจ เจšเฉฑเจฒ เจฐเจนเฉ‡ เจนเจจ เจ…เจธเจฟเฉฐเจ•เฉเจฐเฉ‹เจจเจธ เจคเฉŒเจฐ 'เจคเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจธเจฌเฉฐเจงเจพเจ‚ เจตเจฟเฉฑเจš? ..

เจ‡เฉฑเจฅเฉ‡ เจธเจฟเจฐเจซ เจ‡เฉฑเจ• เจตเจฟเจ•เจฒเจช เจนเฉˆ - เจ…เจธเจฅเจพเจˆ เจคเฉŒเจฐ 'เจคเฉ‡ เจ‡เฉฑเจ• เจ—เฉˆเจฐ-เจ†เจฐเจœเจผเฉ€ เจธเจพเจฐเจฃเฉ€ เจฌเจฃเจพเจ“. เจชเฉเจจ, เจนเจพเจ‚เฅค เจœเฉ‹ เจ•เจฟ เจนเฉˆ:

  • เจตเฉฑเจง เจคเฉ‹เจ‚ เจตเฉฑเจง เจฌเฉ‡เจคเจฐเจคเฉ€เจฌเฉ‡ เจจเจพเจฎเจพเจ‚ เจจเจพเจฒ "เจฎเฉ‡เจฐเฉ€ เจ†เจชเจฃเฉ€" เจŸเฉ‡เจฌเจฒ เจฌเจฃเจพเจˆเจ†เจ‚ เจคเจพเจ‚ เจœเฉ‹ เจ•เจฟเจธเฉ‡ เจจเจพเจฒ เจตเฉ€ เจจเจพ เจฎเจฟเจฒ เจธเจ•เจฃ
  • เจเจ•เจธเจŸเจฐเฉˆเจ•เจŸ: เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจฌเจพเจนเจฐเฉ€ เจธเจฐเฉ‹เจค เจคเฉ‹เจ‚ เจกเฉ‡เจŸเจพ เจจเจพเจฒ เจญเจฐเจฟเจ†
  • เจฌเจฆเจฒเฉ‹: เจชเจฐเจฟเจตเจฐเจคเจฟเจค, เจ•เฉเฉฐเจœเฉ€ เจฒเจฟเฉฐเจ• เจ•เจฐเจจ เจตเจพเจฒเฉ‡ เจ–เฉ‡เจคเจฐเจพเจ‚ เจตเจฟเฉฑเจš เจญเจฐเจฟเจ†
  • เจฒเฉ‹เจก เจ•เจฐเฉ‹: เจŸเฉ€เจšเจพ เจŸเฉ‡เจฌเจฒ เจตเจฟเฉฑเจš เจคเจฟเจ†เจฐ เจกเจพเจŸเจพ เจกเฉ‹เจฒเฉเจนเจฟเจ†
  • "เจฎเฉ‡เจฐเฉ‡" เจŸเฉ‡เจฌเจฒ เจจเฉ‚เฉฐ เจฎเจฟเจŸเจพเจ‡เจ† เจ—เจฟเจ†

เจ…เจคเฉ‡ เจนเฉเจฃ - เจ…เจคเจฐ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฎเฉฑเจ–เฉ€. เจตเจพเจธเจคเจต เจตเจฟเฉฑเจš, PostgreSQL เจตเจฟเฉฑเจš เจธเจพเจฐเฉ€เจ†เจ‚ เจฒเจฟเจ–เจคเจพเจ‚ เจฆเฉ‹ เจตเจพเจฐ เจนเฉเฉฐเจฆเฉ€เจ†เจ‚ เจนเจจ - WAL เจตเจฟเฉฑเจš เจชเจนเจฟเจฒเจพเจ‚, เจซเจฟเจฐ เจŸเฉ‡เจฌเจฒ/เจ‡เฉฐเจกเฉˆเจ•เจธ เจฌเจพเจกเฉ€เจœเจผ เจตเจฟเฉฑเจšเฅค เจ‡เจน เจธเจญ ACID เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจจ เจ…เจคเฉ‡ เจตเจฟเจšเจ•เจพเจฐ เจกเฉ‡เจŸเจพ เจฆเจฟเฉฑเจ– เจจเฉ‚เฉฐ เจธเจนเฉ€ เจ•เจฐเจจ เจฒเจˆ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ COMMIT'เจจเจŸเฉ€ เจ…เจคเฉ‡ ROLLBACK'เจจเจฒ เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ.

เจชเจฐ เจธเจพเจจเฉ‚เฉฐ เจ‡เจธเจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆ! เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจชเฉ‚เจฐเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจนเฉˆ เจœเจพเจ‚ เจคเจพเจ‚ เจ‡เจน เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจธเจซเจฒ เจธเฉ€ เจœเจพเจ‚ เจ‡เจน เจจเจนเฉ€เจ‚ เจธเฉ€เฅค. เจ‡เจธ เจจเจพเจฒ เจ•เฉ‹เจˆ เจซเจฐเจ• เจจเจนเฉ€เจ‚ เจชเฉˆเจ‚เจฆเจพ เจ•เจฟ เจ•เจฟเฉฐเจจเฉ‡ เจตเจฟเจšเจ•เจพเจฐเจฒเฉ‡ เจŸเฉเจฐเจพเจ‚เจœเฉˆเจ•เจธเจผเจจ เจนเฉ‹เจฃเจ—เฉ‡ - เจ…เจธเฉ€เจ‚ "เจฎเจฟเจกเจฒ เจคเฉ‹เจ‚ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจœเจพเจฐเฉ€ เจฐเฉฑเจ–เจฃ" เจตเจฟเฉฑเจš เจฆเจฟเจฒเจšเจธเจชเฉ€ เจจเจนเฉ€เจ‚ เจฐเฉฑเจ–เจฆเฉ‡, เจ–เจพเจธ เจ•เจฐเจ•เฉ‡ เจœเจฆเฉ‹เจ‚ เจ‡เจน เจธเจชเฉฑเจธเจผเจŸ เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเจพ เจ•เจฟ เจ‡เจน เจ•เจฟเฉฑเจฅเฉ‡ เจธเฉ€เฅค

เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, PostgreSQL เจกเจฟเจตเฉˆเจฒเจชเจฐเจพเจ‚ เจจเฉ‡, เจตเจฐเจœเจจ 9.1 เจตเจฟเฉฑเจš เจตเจพเจชเจธ, เจ…เจœเจฟเจนเฉ€ เจšเฉ€เจœเจผ เจชเฉ‡เจธเจผ เจ•เฉ€เจคเฉ€ เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ…เจฃเจฒเฉŒเจ— เจ•เฉ€เจคเฉ‡ เจŸเฉ‡เจฌเจฒ:

เจ‡เจธ เจธเฉฐเจ•เฉ‡เจค เจฆเฉ‡ เจจเจพเจฒ, เจŸเฉ‡เจฌเจฒ เจจเฉ‚เฉฐ เจ…เจจเจฒเฉŒเจ— เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค เจ…เจจเจฒเฉŒเจ— เจ•เฉ€เจคเฉ€เจ†เจ‚ เจŸเฉ‡เจฌเจฒเจพเจ‚ 'เจคเฉ‡ เจฒเจฟเจ–เจฟเจ† เจกเฉ‡เจŸเจพ เจฐเจพเจˆเจŸ-เจ…เฉฑเจ—เฉ‡ เจฒเฉŒเจ— (เจ…เจงเจฟเจ†เจ‡ 29 เจฆเฉ‡เจ–เฉ‹) เจคเฉ‹เจ‚ เจจเจนเฉ€เจ‚ เจฒเฉฐเจ˜เจฆเจพ, เจœเจฟเจธ เจ•เจพเจฐเจจ เจ…เจœเจฟเจนเฉ€เจ†เจ‚ เจŸเฉ‡เจฌเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจ†เจฎ เจจเจพเจฒเฉ‹เจ‚ เจฌเจนเฉเจค เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเฉ‹. เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจ‰เจน เจ…เจธเจซเจฒเจคเจพ เจคเฉ‹เจ‚ เจฎเฉเจ•เจค เจจเจนเฉ€เจ‚ เจนเจจ; เจธเจฐเจตเจฐ เจ…เจธเจซเจฒเจคเจพ เจœเจพเจ‚ เจเจฎเจฐเจœเฉˆเจ‚เจธเฉ€ เจฌเฉฐเจฆ เจนเฉ‹เจฃ เจฆเฉ‡ เจฎเจพเจฎเจฒเฉ‡ เจตเจฟเฉฑเจš, เจ‡เฉฑเจ• เจ…เจจเจฒเฉŒเจ—เจก เจŸเฉ‡เจฌเจฒ เจธเจตเฉˆเจšเจฒเจฟเจค เจคเฉŒเจฐ 'เจคเฉ‡ เจ•เฉฑเจŸเจฟเจ† เจ—เจฟเจ†. เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจ…เจฃเจฒเจพเจ— เจ•เฉ€เจคเฉ‡ เจธเจพเจฐเจฃเฉ€ เจฆเฉ€เจ†เจ‚ เจธเจฎเฉฑเจ—เจฐเฉ€เจ†เจ‚ เจจเจ•เจฒ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจธเจฐเจตเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจ—เฉเจฒเจพเจฎ เจ•เจฐเจจ เจฒเจˆ. เจ…เจจเจฒเฉŒเจ—เจก เจŸเฉ‡เจฌเจฒ 'เจคเฉ‡ เจฌเจฃเจพเจ เจ—เจ เจ•เฉ‹เจˆ เจตเฉ€ เจ‡เฉฐเจกเฉˆเจ•เจธ เจ†เจชเจฃเฉ‡ เจ†เจช เจ…เจจเจฒเฉŒเจ— เจนเฉ‹ เจœเจพเจ‚เจฆเฉ‡ เจนเจจเฅค

เจธเฉฐเจ–เฉ‡เจช เจตเจฟเฉฑเจš, เจ‡เจน เจฌเจนเฉเจค เจคเฉ‡เจœเจผ เจนเฉ‹ เจœเจพเจตเฉ‡เจ—เจพ, เจชเจฐ เจœเฉ‡เจ•เจฐ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจธเจฐเจตเจฐ "เจกเจฟเฉฑเจ—เจฆเจพ เจนเฉˆ", เจคเจพเจ‚ เจ‡เจน เจ•เฉ‹เจเจพ เจนเฉ‹เจตเฉ‡เจ—เจพเฅค เจชเจฐ เจ‡เจน เจ•เจฟเฉฐเจจเฉ€ เจตเจพเจฐ เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจ•เฉ€ เจคเฉเจนเจพเจกเฉ€ ETL เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจœเจพเจฃเจฆเฉ€ เจนเฉˆ เจ•เจฟ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจจเฉ‚เฉฐ "เจฎเฉเฉœ เจธเฉเจฐเจœเฉ€เจค เจ•เจฐเจจ" เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจ‡เจธเจจเฉ‚เฉฐ "เจฎเฉฑเจง เจคเฉ‹เจ‚" เจธเจนเฉ€ เจขเฉฐเจ— เจจเจพเจฒ เจ•เจฟเจตเฉ‡เจ‚ เจ เฉ€เจ• เจ•เจฐเจจเจพ เจนเฉˆ?...

เจœเฉ‡ เจจเจนเฉ€เจ‚, เจ…เจคเฉ‡ เจ‰เจชเจฐเฉ‹เจ•เจค เจ•เฉ‡เจธ เจคเฉเจนเจพเจกเฉ‡ เจตเจฐเจ—เจพ เจนเฉˆ, เจคเจพเจ‚ เจตเจฐเจคเฉ‹ UNLOGGEDเจชเจฐ เจ•เจฆเฉ‡ เจตเฉ€ เจ…เจธเจฒ เจŸเฉ‡เจฌเจฒ 'เจคเฉ‡ เจ‡เจธ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจจเฉ‚เฉฐ เจฏเฉ‹เจ— เจจเจพ เจ•เจฐเฉ‹, เจœเจฟเจธ เจคเฉ‹เจ‚ เจกเฉ‡เจŸเจพ เจคเฉเจนเจพเจกเฉ‡ เจฒเจˆ เจชเจฟเจ†เจฐเจพ เจนเฉˆเฅค

1.3 เจ•เจฎเจฟเจŸ เจ•เจฐเจจ 'เจคเฉ‡ { เจ•เจคเจพเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจฎเจฟเจŸเจพเจ“ | เจกเฉเจฐเฉŒเจช}

เจ‡เจน เจจเจฟเจฐเจฎเจพเจฃ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ†เจŸเฉ‹เจฎเฉˆเจŸเจฟเจ• เจตเจฟเจตเจนเจพเจฐ เจจเฉ‚เฉฐ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ เจœเจฆเฉ‹เจ‚ เจ‡เฉฑเจ• เจธเจพเจฐเจฃเฉ€ เจฌเจฃเจพเจ‰เจฃ เจตเฉ‡เจฒเฉ‡ เจ•เฉ‹เจˆ เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจชเฉ‚เจฐเจพ เจนเฉ‹ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค

'เจคเฉ‡ ON COMMIT DROP เจฎเฉˆเจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ‰เฉฑเจชเจฐ เจฒเจฟเจ–เจฟเจ† เจนเฉˆ, เจ‡เจน เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ DROP TABLE, เจชเจฐ เจจเจพเจฒ ON COMMIT DELETE ROWS เจธเจฅเจฟเจคเฉ€ เจตเจงเฉ‡เจฐเฉ‡ เจฆเจฟเจฒเจšเจธเจช เจนเฉˆ - เจ‡เจน เจ‡เฉฑเจฅเฉ‡ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจนเฉˆ TRUNCATE TABLE.

เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เฉฑเจ• เจ…เจธเจฅเจพเจˆ เจŸเฉ‡เจฌเจฒ เจฆเฉ‡ เจฎเฉˆเจŸเจพ-เจตเจฐเจฃเจจ เจจเฉ‚เฉฐ เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจฒเจˆ เจชเฉ‚เจฐเจพ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจขเจพเจ‚เจšเจพ เจ‡เฉฑเจ• เจจเจฟเจฏเจฎเจค เจธเจพเจฐเจฃเฉ€ เจฆเฉ‡ เจธเจฎเจพเจจ เจนเฉˆ, เจซเจฟเจฐ เจ…เจธเจฅเจพเจˆ เจŸเฉ‡เจฌเจฒเจพเจ‚ เจฆเฉ€ เจจเจฟเจฐเฉฐเจคเจฐ เจฐเจšเจจเจพ เจ…เจคเฉ‡ เจฎเจฟเจŸเจพเจ‰เจฃ เจจเจพเจฒ เจธเจฟเจธเจŸเจฎ เจŸเฉ‡เจฌเจฒเจพเจ‚ เจฆเฉ€ เจ—เฉฐเจญเฉ€เจฐ "เจธเฉ‹เจœ" เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ pg_class, pg_attribute, pg_attrdef, pg_depend,โ€ฆ

เจนเฉเจฃ เจ•เจฒเจชเจจเจพ เจ•เจฐเฉ‹ เจ•เจฟ เจคเฉเจนเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฆเฉ‡ เจธเจฟเฉฑเจงเฉ‡ เจ•เจจเฉˆเจ•เจธเจผเจจ 'เจคเฉ‡ เจ‡เฉฑเจ• เจ•เจฐเจฎเจšเจพเจฐเฉ€ เจนเฉˆ, เจœเฉ‹ เจนเจฐ เจธเจ•เจฟเฉฐเจŸ เจ‡เฉฑเจ• เจจเจตเจพเจ‚ เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจ–เฉ‹เจฒเฉเจนเจฆเจพ เจนเฉˆ, เจ‡เฉฑเจ• เจ…เจธเจฅเจพเจˆ เจŸเฉ‡เจฌเจฒ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ, เจญเจฐเจฆเจพ เจนเฉˆ, เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจฎเจฟเจŸเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ... เจธเจฟเจธเจŸเจฎ เจŸเฉ‡เจฌเจฒเจพเจ‚ เจตเจฟเฉฑเจš เจฌเจนเฉเจค เจœเจผเจฟเจ†เจฆเจพ เจ•เฉ‚เฉœเจพ เจ‡เจ•เฉฑเจ เจพ เจนเฉ‹เจตเฉ‡เจ—เจพ, เจ…เจคเฉ‡ เจ‡เจน เจนเจฐเฉ‡เจ• เจ“เจชเจฐเฉ‡เจธเจผเจจ เจฒเจˆ เจตเจพเจงเฉ‚ เจฌเฉเจฐเฉ‡เจ•เจพเจ‚ เจฆเจพ เจ•เจพเจฐเจจ เจฌเจฃเฉ‡เจ—เจพเฅค

เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡, เจ‡เจน เจจเจพ เจ•เจฐเฉ‹! เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš, เจ‡เจน เจตเจงเฉ‡เจฐเฉ‡ เจชเฉเจฐเจญเจพเจตเจธเจผเจพเจฒเฉ€ เจนเฉˆ 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.

เจœเฉ‡เจ•เจฐ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจตเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ DEFAULT-values โ€‹โ€‹(เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจชเฉเจฐเจพเจ‡เจฎเจฐเฉ€ เจ•เฉเฉฐเจœเฉ€ เจฎเฉเฉฑเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจญเจฐเจจ เจฒเจˆ), เจคเฉเจธเฉ€เจ‚ เจตเจฐเจค เจธเจ•เจฆเฉ‡ เจนเฉ‹ LIKE target_table INCLUDING DEFAULTS. เจœเจพเจ‚ เจฌเจธ - LIKE target_table INCLUDING ALL โ€” เจ•เจพเจชเฉ€เจ†เจ‚ เจกเจฟเจซเฉŒเจฒเจŸ, เจธเฉ‚เจšเจ•เจพเจ‚เจ•, เจชเจพเจฌเฉฐเจฆเฉ€เจ†เจ‚,...

เจชเจฐ เจ‡เฉฑเจฅเฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจน เจธเจฎเจเจฃ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ เจ•เจฟ เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจฌเจฃเจพเจ‡เจ† เจนเฉˆ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฆเฉ‡ เจจเจพเจฒ เจคเฉเจฐเฉฐเจค เจธเจพเจฐเจฃเฉ€ เจจเฉ‚เฉฐ เจ†เจฏเจพเจค เจ•เจฐเฉ‹, เจซเจฟเจฐ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจฒเฉ‹เจก เจนเฉ‹เจฃ เจตเจฟเฉฑเจš เจœเจผเจฟเจ†เจฆเจพ เจธเจฎเจพเจ‚ เจฒเฉฑเจ—เฉ‡เจ—เจพเจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจธเจญ เจ•เฉเจ เจญเจฐเจฆเฉ‡ เจนเฉ‹, เจ…เจคเฉ‡ เจ•เฉ‡เจตเจฒ เจคเจฆ เจนเฉ€ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจจเฉ‚เฉฐ เจฐเฉ‹เจฒ เจ…เจช เจ•เจฐเจฆเฉ‡ เจนเฉ‹ - เจฆเฉ‡เจ–เฉ‹ เจ•เจฟ เจ‡เจน เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจฃ เจตเจœเฉ‹เจ‚ เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆ pg_dump.

เจธเฉฐเจ–เฉ‡เจช เจตเจฟเฉฑเจš, เจ†เจฐเจŸเฉ€เจเจซเจเจฎ!

2. เจ•เจฟเจตเฉ‡เจ‚ เจฒเจฟเจ–เจฃเจพ เจนเฉˆ?

เจฎเฉˆเจจเฉ‚เฉฐ เจธเจฟเจฐเจซ เจ‡เจน เจ•เจนเจฟเจฃ เจฆเจฟเจ“ - เจ‡เจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ‹ COPY- "เจชเฉˆเจ•" เจฆเฉ€ เจฌเจœเจพเจ เจตเจนเจพเจ“ INSERT, เจ•เจˆ เจตเจพเจฐ เจชเฉเจฐเจตเฉ‡เจ—. เจคเฉเจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเฉ€ เจซเจพเจˆเจฒ เจคเฉ‹เจ‚ เจตเฉ€ เจธเจฟเฉฑเจงเฉ‡ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

3. เจ•เจฟเจตเฉ‡เจ‚ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเจจเฉ€ เจนเฉˆ?

เจ‡เจธ เจฒเจˆ เจฎเฉฐเจจ เจฒเจ“ เจ•เจฟ เจธเจพเจกเฉ€ เจœเจพเจฃ-เจชเจ›เจพเจฃ เจ•เฉเจ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเฉ€ เจนเฉˆ:

  • เจคเฉเจนเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจคเฉเจนเจพเจกเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเฉ‡ เจ—เจพเจนเจ• เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจธเจพเจฐเจฃเฉ€ เจนเฉˆ 1M เจฐเจฟเจ•เจพเจฐเจก
  • เจนเจฐ เจฐเฉ‹เจœเจผ เจ‡เฉฑเจ• เจ—เจพเจนเจ• เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจจเจตเจพเจ‚ เจญเฉ‡เจœเจฆเจพ เจนเฉˆ เจชเฉ‚เจฐเฉ€ "เจšเจฟเฉฑเจคเจฐ"
  • เจคเจœเจฐเจฌเฉ‡ เจคเฉ‹เจ‚ เจคเฉเจธเฉ€เจ‚ เจœเจพเจฃเจฆเฉ‡ เจนเฉ‹ เจ•เจฟ เจธเจฎเฉ‡เจ‚ เจธเจฎเฉ‡เจ‚ เจคเฉ‡ 10K เจคเฉ‹เจ‚ เจตเฉฑเจง เจฐเจฟเจ•เจพเจฐเจก เจจเจนเฉ€เจ‚ เจฌเจฆเจฒเฉ‡ เจœเจพเจ‚เจฆเฉ‡

เจ…เจœเจฟเจนเฉ€ เจธเจฅเจฟเจคเฉ€ เจฆเฉ€ เจ‡เฉฑเจ• เจธเจผเจพเจจเจฆเจพเจฐ เจ‰เจฆเจพเจนเจฐเจฃ เจนเฉˆ KLADR เจ…เจงเจพเจฐ โ€” เจ•เฉเฉฑเจฒ เจฎเจฟเจฒเจพ เจ•เฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจชเจคเฉ‡ เจนเจจ, เจชเจฐ เจนเจฐเฉ‡เจ• เจนเจซเจคเจพเจตเจพเจฐเฉ€ เจ…เฉฑเจชเจฒเฉ‹เจก เจตเจฟเฉฑเจš เจฐเจพเจธเจผเจŸเจฐเฉ€ เจชเฉฑเจงเจฐ 'เจคเฉ‡ เจตเฉ€ เจฌเจนเฉเจค เจ˜เฉฑเจŸ เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ (เจฌเจธเจคเฉ€เจ†เจ‚ เจฆเจพ เจจเจพเจฎ เจฌเจฆเจฒเจฃเจพ, เจ—เจฒเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจเจพ, เจจเจตเฉ‡เจ‚ เจฎเจ•เจพเจจเจพเจ‚ เจฆเฉ€ เจฆเจฟเฉฑเจ–) เจนเจจเฅค

3.1 เจชเฉ‚เจฐเจพ เจธเจฟเฉฐเจ•เฉเจฐเฉ‹เจจเจพเจˆเจœเจผเฉ‡เจธเจผเจจ เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ

เจธเจฐเจฒเจคเจพ เจฒเจˆ, เจฎเฉฐเจจ เจฒเจ“ เจ•เจฟ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจกเฉ‡เจŸเจพ เจฆเจพ เจชเฉเจจเจฐเจ—เจ เจจ เจ•เจฐเจจ เจฆเฉ€ เจตเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆ - เจฌเจธ เจธเจพเจฐเจฃเฉ€ เจจเฉ‚เฉฐ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจฒเจฟเจ†เจ“, เจ‡เจน เจนเฉˆ:

  • เจนเจŸเจพเจ“ เจนเจฐ เจšเฉ€เจœเจผ เจœเฉ‹ เจนเฉเจฃ เจฎเฉŒเจœเฉ‚เจฆ เจจเจนเฉ€เจ‚ เจนเฉˆ
  • เจ…เจชเจกเฉ‡เจŸ เจนเจฐ เจšเฉ€เจœเจผ เจœเฉ‹ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจฎเฉŒเจœเฉ‚เจฆ เจนเฉˆ เจ…เจคเฉ‡ เจ…เฉฑเจชเจกเฉ‡เจŸ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ
  • เจธเฉฐเจฎเจฟเจฒเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจธเจญ เจ•เฉเจ เจœเฉ‹ เจ…เจœเฉ‡ เจคเฉฑเจ• เจจเจนเฉ€เจ‚ เจนเฉ‹เจ‡เจ† เจนเฉˆ

เจ‡เจธ เจ•เฉเจฐเจฎ เจตเจฟเฉฑเจš เจ•เจพเจฐเจตเจพเจˆเจ†เจ‚ เจ•เจฟเจ‰เจ‚ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจœเจพเจฃเฉ€เจ†เจ‚ เจšเจพเจนเฉ€เจฆเฉ€เจ†เจ‚ เจนเจจ? เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจŸเฉ‡เจฌเจฒ เจฆเจพ เจ†เจ•เจพเจฐ เจ˜เฉฑเจŸ เจคเฉ‹เจ‚ เจ˜เฉฑเจŸ เจตเจงเฉ‡เจ—เจพ (MVCC เจฏเจพเจฆ เจฐเฉฑเจ–เฉ‹!).

dst เจคเฉ‹เจ‚ เจฎเจฟเจŸเจพเจ“

เจจเจนเฉ€เจ‚, เจฌเฉ‡เจธเจผเจ• เจคเฉเจธเฉ€เจ‚ เจธเจฟเจฐเจซ เจฆเฉ‹ เจ“เจชเจฐเฉ‡เจธเจผเจจเจพเจ‚ เจจเจพเจฒ เจชเฉเจฐเจพเจชเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

  • เจนเจŸเจพเจ“ (DELETE) เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจธเจญ เจ•เฉเจ
  • เจธเฉฐเจฎเจฟเจฒเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจธเจพเจฐเฉ‡ เจจเจตเฉ‡เจ‚ เจšเจฟเฉฑเจคเจฐ เจคเฉ‹เจ‚

เจชเจฐ เจ‰เจธเฉ‡ เจธเจฎเฉ‡เจ‚, MVCC เจฆเจพ เจงเฉฐเจจเจตเจพเจฆ, เจŸเฉ‡เจฌเจฒ เจฆเจพ เจ†เจ•เจพเจฐ เจฌเจฟเจฒเจ•เฉเจฒ เจฆเฉเฉฑเจ—เจฃเจพ เจตเจง เจœเจพเจตเฉ‡เจ—เจพ! เจ‡เฉฑเจ• 1K เจ…เฉฑเจชเจกเฉ‡เจŸ เจฆเฉ‡ เจ•เจพเจฐเจจ เจ‡เฉฑเจ• เจธเจพเจฐเจฃเฉ€ เจตเจฟเฉฑเจš เจฐเจฟเจ•เจพเจฐเจกเจพเจ‚ เจฆเฉ€เจ†เจ‚ +10M เจคเจธเจตเฉ€เจฐเจพเจ‚ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจเจพ เจฌเจนเฉเจค เจœเจผเจฟเจ†เจฆเจพ เจฌเฉ‡เจฒเฉ‹เฉœเฉ€ เจนเฉˆ...

TRUNCATE dst

เจ‡เฉฑเจ• เจตเจงเฉ‡เจฐเฉ‡ เจคเจœเจฐเจฌเฉ‡เจ•เจพเจฐ เจกเจฟเจตเฉˆเจฒเจชเจฐ เจœเจพเจฃเจฆเจพ เจนเฉˆ เจ•เจฟ เจชเฉ‚เจฐเฉ€ เจŸเฉˆเจฌเจฒเฉ‡เจŸ เจจเฉ‚เฉฐ เจ•เจพเจซเจผเฉ€ เจธเจธเจคเฉ‡ เจตเจฟเฉฑเจš เจธเจพเจซเจผ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ:

  • เจธเจพเจซ เจ•เจฐเจจ เจฒเจˆ (TRUNCATE) เจชเฉ‚เจฐเฉ€ เจธเจพเจฐเจฃเฉ€
  • เจธเฉฐเจฎเจฟเจฒเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจธเจพเจฐเฉ‡ เจจเจตเฉ‡เจ‚ เจšเจฟเฉฑเจคเจฐ เจคเฉ‹เจ‚

เจตเจฟเจงเฉ€ เจชเฉเจฐเจญเจพเจตเจธเจผเจพเจฒเฉ€ เจนเฉˆ, เจ•เจˆ เจตเจพเจฐ เจ•เจพเจซเจผเฉ€ เจฒเจพเจ—เฉ‚ เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจชเจฐ เจ‡เฉฑเจ• เจธเจฎเฉฑเจธเจฟเจ† เจนเฉˆ... เจ…เจธเฉ€เจ‚ เจฒเฉฐเจฌเฉ‡ เจธเจฎเฉ‡เจ‚ เจฒเจˆ 1M เจฐเจฟเจ•เจพเจฐเจกเจพเจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœ เจฐเจนเฉ‡ เจนเจพเจ‚, เจ‡เจธเจฒเจˆ เจ…เจธเฉ€เจ‚ เจ‡เจธ เจธเจพเจฐเฉ‡ เจธเจฎเฉ‡เจ‚ เจฒเจˆ เจธเจพเจฐเจฃเฉ€ เจจเฉ‚เฉฐ เจ–เจพเจฒเฉ€ เจจเจนเฉ€เจ‚ เจ›เฉฑเจก เจธเจ•เจฆเฉ‡ (เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ‡เจธเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจตเจฟเฉฑเจš เจธเจฎเฉ‡เจŸเจฃ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚ เจนเฉ‹เจตเฉ‡เจ—เจพ)เฅค

เจฎเจคเจฒเจฌ เจ•เฉ‡:

  • เจ…เจธเฉ€เจ‚ เจธเจผเฉเจฐเฉ‚ เจ•เจฐ เจฐเจนเฉ‡ เจนเจพเจ‚ เจฒเฉฐเจฌเฉ‡ เจธเจฎเฉ‡เจ‚ เจคเฉ‹เจ‚ เจšเฉฑเจฒ เจฐเจฟเจนเจพ เจŸเฉเจฐเจพเจ‚เจœเฉˆเจ•เจธเจผเจจ
  • TRUNCATE เจฒเจ—เจพเจ‰เจ‚เจฆเจพ เจนเฉˆ เจเจ•เจธเจ•เจฒเฉ‚เจธเจฟเจต- เจฌเจฒเจพเจ•เจฟเฉฐเจ—
  • เจ…เจธเฉ€เจ‚ เจฒเฉฐเจฌเฉ‡ เจธเจฎเฉ‡เจ‚ เจฒเจˆ เจธเฉฐเจฎเจฟเจฒเจจ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจ…เจคเฉ‡ เจ‡เจธ เจธเจฎเฉ‡เจ‚ เจนเจฐ เจ•เฉ‹เจˆ เจตเฉ€ เจจเจนเฉ€เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ SELECT

เจ•เฉเจ เจ เฉ€เจ• เจจเจนเฉ€เจ‚ เจšเฉฑเจฒ เจฐเจฟเจนเจพ...

เจธเจพเจฐเจฃเฉ€ เจฌเจฆเจฒเฉ‹โ€ฆ เจจเจพเจฎ เจฌเจฆเจฒเฉ‹โ€ฆ / เจธเจพเจฐเจฃเฉ€ เจ›เฉฑเจกเฉ‹โ€ฆ

เจ‡เฉฑเจ• เจตเจฟเจ•เจฒเจช เจนเฉˆ เจนเจฐ เจšเฉ€เจœเจผ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเฉ€ เจจเจตเฉ€เจ‚ เจธเจพเจฐเจฃเฉ€ เจตเจฟเฉฑเจš เจญเจฐเจจเจพ, เจ…เจคเฉ‡ เจซเจฟเจฐ เจชเฉเจฐเจพเจฃเฉ‡ เจฆเฉ€ เจฅเจพเจ‚ 'เจคเฉ‡ เจ‡เจธเจฆเจพ เจจเจพเจฎ เจฌเจฆเจฒเจฃเจพเฅค เจ•เฉเจ เจฎเจพเฉœเฉ€เจ†เจ‚ เจ›เฉ‹เจŸเฉ€เจ†เจ‚ เจšเฉ€เจœเจผเจพเจ‚:

  • เจ…เจœเฉ‡ เจตเฉ€ เจเจ•เจธเจ•เจฒเฉ‚เจธเจฟเจต, เจนเจพเจฒเจพเจ‚เจ•เจฟ เจ•เจพเจซเจผเฉ€ เจ˜เฉฑเจŸ เจธเจฎเจพเจ‚ เจนเฉˆ
  • เจ‡เจธ เจธเจพเจฐเจฃเฉ€ เจฒเจˆ เจธเจพเจฐเฉ€เจ†เจ‚ เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจฏเฉ‹เจœเจจเจพเจตเจพเจ‚/เจ…เฉฐเจ•เฉœเฉ‡ เจฐเฉ€เจธเฉˆเจŸ เจ•เฉ€เจคเฉ‡ เจ—เจ เจนเจจ, ANALYZE เจšเจฒเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ
  • เจธเจพเจฐเฉ€เจ†เจ‚ เจตเจฟเจฆเฉ‡เจธเจผเฉ€ เจ•เฉเฉฐเจœเฉ€เจ†เจ‚ เจŸเฉเฉฑเจŸ เจ—เจˆเจ†เจ‚ เจนเจจ (FK) เจฎเฉ‡เจœเจผ เจจเฉ‚เฉฐ

เจธเจพเจˆเจฎเจจ เจฐเจฟเจ—เจธ เจคเฉ‹เจ‚ เจ‡เฉฑเจ• WIP เจชเฉˆเจš เจธเฉ€ เจœเจฟเจธ เจจเฉ‡ เจฌเจฃเจพเจ‰เจฃ เจฆเจพ เจธเฉเจเจพเจ… เจฆเจฟเฉฑเจคเจพ เจธเฉ€ ALTER- เจ…เฉฐเจ•เฉœเจฟเจ†เจ‚ เจ…เจคเฉ‡ FK เจจเฉ‚เฉฐ เจ›เฉ‚เจนเจฃ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚, เจซเจพเจˆเจฒ เจชเฉฑเจงเจฐ 'เจคเฉ‡ เจŸเฉ‡เจฌเจฒ เจฌเจพเจกเฉ€ เจจเฉ‚เฉฐ เจฌเจฆเจฒเจฃ เจฒเจˆ เจ‡เฉฑเจ• เจ“เจชเจฐเฉ‡เจธเจผเจจ, เจชเจฐ เจ•เฉ‹เจฐเจฎ เจ‡เจ•เฉฑเจ เจพ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจ—เจฟเจ†เฅค

เจฎเจฟเจŸเจพเจ“, เจ…เฉฑเจชเจกเฉ‡เจŸ เจ•เจฐเฉ‹, เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹

เจ‡เจธ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจคเจฟเฉฐเจจ เจ“เจชเจฐเฉ‡เจธเจผเจจเจพเจ‚ เจฆเฉ‡ เจ—เฉˆเจฐ-เจฌเจฒเจพเจ•เจฟเฉฐเจ— เจตเจฟเจ•เจฒเจช 'เจคเฉ‡ เจธเฉˆเจŸเจฒ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค เจฒเจ—เจญเจ— เจคเจฟเฉฐเจจ... เจ‡เจน เจธเจญ เจคเฉ‹เจ‚ เจชเฉเจฐเจญเจพเจตเจธเจผเจพเจฒเฉ€ เจขเฉฐเจ— เจจเจพเจฒ เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐเฉ€เจ?

-- ะฒัะต ะดะตะปะฐะตะผ ะฒ ั€ะฐะผะบะฐั… ั‚ั€ะฐะฝะทะฐะบั†ะธะธ, ั‡ั‚ะพะฑั‹ ะฝะธะบั‚ะพ ะฝะต ะฒะธะดะตะป "ะฟั€ะพะผะตะถัƒั‚ะพั‡ะฝั‹ั…" ัะพัั‚ะพัะฝะธะน
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 เจชเฉ‹เจธเจŸ-เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจ†เจฏเจพเจค เจ•เจฐเฉ‹

เจ‰เจธเฉ‡ KLADR เจตเจฟเฉฑเจš, เจธเจพเจฐเฉ‡ เจฌเจฆเจฒเฉ‡ เจนเฉ‹เจ เจฐเจฟเจ•เจพเจฐเจกเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉ‹เจธเจŸ-เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจฆเฉเจ†เจฐเจพ เจตเฉ€ เจšเจฒเจพเจ‡เจ† เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ - เจธเจงเจพเจฐเจฃ, เจ•เฉ€เจตเจฐเจกเจธ เจจเฉ‚เฉฐ เจ‰เจœเจพเจ—เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ†, เจ…เจคเฉ‡ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจขเจพเจ‚เจšเฉ‡ เจตเจฟเฉฑเจš เจ˜เจŸเจพเจ‡เจ† เจ—เจฟเจ†เฅค เจชเจฐ เจคเฉเจธเฉ€เจ‚ เจ•เจฟเจตเฉ‡เจ‚ เจœเจพเจฃเจฆเฉ‡ เจนเฉ‹ - เจ…เจธเจฒ เจตเจฟเฉฑเจš เจ•เฉ€ เจฌเจฆเจฒเจฟเจ†เจธเจฟเฉฐเจ•เฉเจฐเฉ‹เจจเจพเจˆเจœเจผเฉ‡เจธเจผเจจ เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจ•เฉ€เจคเฉ‡ เจฌเจฟเจจเจพเจ‚, เจ†เจฆเจฐเจธเจผเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจ‡เจธ เจจเฉ‚เฉฐ เจ›เฉ‚เจนเจฃ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚?

เจœเฉ‡เจ•เจฐ เจธเจฟเฉฐเจ•เฉเจฐเฉ‹เจจเจพเจˆเจœเจผเฉ‡เจธเจผเจจ เจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจธเจฟเจฐเจซ เจคเฉเจนเจพเจกเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฃ เจฆเฉ€ เจชเจนเฉเฉฐเจš เจนเฉˆ, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจŸเจฐเจฟเฉฑเจ—เจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจœเฉ‹ เจธเจพเจกเฉ‡ เจฒเจˆ เจธเจพเจฐเฉ€เจ†เจ‚ เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจ‡เจ•เฉฑเจ เจพ เจ•เจฐเฉ‡เจ—เจพ:

-- ั†ะตะปะตะฒั‹ะต ั‚ะฐะฑะปะธั†ั‹
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;

เจ–เจพเจคเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจ—เจพเจนเจ• IDs เจจเจพเจฒ เจธเจนเฉ€ เจขเฉฐเจ— เจจเจพเจฒ เจœเฉ‹เฉœเจจ เจฒเจˆ, เจธเจพเจจเฉ‚เฉฐ เจชเจนเจฟเจฒเจพเจ‚ เจ‡เจนเจจเจพเจ‚ เจชเจ›เจพเจฃเจ•เจฐเจคเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจฒเฉฑเจญเจฃ เจœเจพเจ‚ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจ†เจ“ เจ‰เจนเจจเจพเจ‚ เจฆเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจ–เฉ‡เจคเจฐ เจœเฉ‹เฉœเฉ€เจ:

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, เจœเจฟเจธ เจจเจพเจฒ เจ…เจธเฉ€เจ‚ เจ‡เจจเจตเฉŒเจ‡เจธ เจชเจพเจตเจพเจ‚เจ—เฉ‡เฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹