เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจธเจฐเจตเจฟเจธ เจ†เจฐเจ•เฉ€เจŸเฉˆเจ•เจšเจฐ เจตเจฟเฉฑเจš เจธเฉฐเจšเจพเจฒเจจ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ: เจฎเจฆเจฆ เจ…เจคเฉ‡ เจชเฉเจฐเฉ‹เจ‚เจชเจŸ Postgres FDW

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

เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจธเจฐเจตเจฟเจธ เจ†เจฐเจ•เฉ€เจŸเฉˆเจ•เจšเจฐ เจตเจฟเฉฑเจš เจธเฉฐเจšเจพเจฒเจจ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ: เจฎเจฆเจฆ เจ…เจคเฉ‡ เจชเฉเจฐเฉ‹เจ‚เจชเจŸ Postgres FDW
เจฎเฉ‡เจฐเจพ เจจเจพเจฎ Pavel Sivash เจนเฉˆ, DomClick เจตเจฟเจ–เฉ‡ เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจ…เจœเจฟเจนเฉ€ เจŸเฉ€เจฎ เจตเจฟเฉฑเจš เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเจพเจ‚ เจœเฉ‹ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃเจพเจคเจฎเจ• เจกเฉ‡เจŸเจพ เจตเฉ‡เจ…เจฐเจนเจพเจŠเจธ เจจเฉ‚เฉฐ เจฌเจฃเจพเจˆ เจฐเฉฑเจ–เจฃ เจฒเจˆ เจœเจผเจฟเฉฐเจฎเฉ‡เจตเจพเจฐ เจนเฉˆเฅค เจฐเจตเจพเจ‡เจคเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡, เจธเจพเจกเฉ€เจ†เจ‚ เจ—เจคเฉ€เจตเจฟเจงเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจกเฉ‡เจŸเจพ เจ‡เฉฐเจœเฉ€เจจเฉ€เจ…เจฐเจฟเฉฐเจ— เจตเจœเฉ‹เจ‚ เจธเจผเฉเจฐเฉ‡เจฃเฉ€เจฌเฉฑเจง เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจชเจฐ, เจ…เจธเจฒ เจตเจฟเฉฑเจš, เจ•เจพเจฐเจœเจพเจ‚ เจฆเฉ€ เจธเฉ€เจฎเจพ เจฌเจนเฉเจค เจœเจผเจฟเจ†เจฆเจพ เจตเจฟเจ†เจชเจ• เจนเฉˆเฅค เจกเจพเจŸเจพ เจ‡เฉฐเจœเจจเฉ€เจ…เจฐเจฟเฉฐเจ— เจฒเจˆ ETL/ELT เจธเจŸเฉˆเจ‚เจกเจฐเจก เจนเจจ, เจกเจพเจŸเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ…เจคเฉ‡ เจคเฉเจนเจพเจกเฉ‡ เจ†เจชเจฃเฉ‡ เจŸเฉ‚เจฒเจธ เจฆเฉ‡ เจตเจฟเจ•เจพเจธ เจฒเจˆ เจŸเฉ‚เจฒเจธ เจฆเฉ‡ เจธเจฎเจฐเจฅเจจ เจ…เจคเฉ‡ เจ…เจจเฉเจ•เฉ‚เจฒเจจเฅค เจ–เจพเจธ เจคเฉŒเจฐ 'เจคเฉ‡, เจธเฉฐเจšเจพเจฒเจจ เจฐเจฟเจชเฉ‹เจฐเจŸเจฟเฉฐเจ— เจฒเจˆ, เจ…เจธเฉ€เจ‚ "เจฆเฉŒเจ–เจพ" เจ•เจฐเจจ เจฆเจพ เจซเฉˆเจธเจฒเจพ เจ•เฉ€เจคเจพ เจนเฉˆ เจ•เจฟ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจ‡เฉฑเจ• เจฎเฉ‹เจจเฉ‹เจฒเจฟเจฅ เจนเฉˆ เจ…เจคเฉ‡ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ•เจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฆเจฟเฉฑเจคเจพ เจœเจพเจตเฉ‡เจ—เจพ เจœเจฟเจธ เจตเจฟเฉฑเจš เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเจพ เจธเจพเจฐเจพ เจกเจพเจŸเจพ เจนเฉ‹เจตเฉ‡เจ—เจพเฅค

เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡, เจ…เจธเฉ€เจ‚ เจตเฉฑเจ–-เจตเฉฑเจ– เจตเจฟเจ•เจฒเจชเจพเจ‚ 'เจคเฉ‡ เจตเจฟเจšเจพเจฐ เจ•เฉ€เจคเจพ. เจ‡เฉฑเจ• เจธเฉฐเจชเฉ‚เจฐเจจ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจฌเจฃเจพเจ‰เจฃเจพ เจธเฉฐเจญเจต เจธเฉ€ - เจ…เจธเฉ€เจ‚ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจตเฉ€ เจ•เฉ€เจคเฉ€, เจชเจฐ, เจ‡เจฎเจพเจจเจฆเจพเจฐ เจนเฉ‹เจฃ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจฌเจฃเจพเจ‰เจฃ เจ…เจคเฉ‡ เจ‡เจธ เจตเจฟเฉฑเจš เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจ•เจฐเจจ เจฆเฉ€ เจฌเจœเจพเจ เจนเฉŒเจฒเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฆเฉ‡ เจจเจพเจฒ เจคเจฐเจ• เจตเจฟเฉฑเจš เจ•เจพเจซเจผเฉ€ เจตเจพเจฐ-เจตเจพเจฐ เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจ เจฆเฉ‡ เจฏเฉ‹เจ— เจจเจนเฉ€เจ‚ เจธเฉ€ (เจœเฉ‡ เจ•เฉ‹เจˆ เจธเจซเจฒ เจนเฉเฉฐเจฆเจพ เจนเฉˆ , เจŸเจฟเฉฑเจชเจฃเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš เจฒเจฟเจ–เฉ‹ เจ•เจฟ เจ•เจฟเจตเฉ‡เจ‚). เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ•เจพเจ‚ เจจเฉ‚เฉฐ เจ‡เจน เจฆเฉฑเจธเจฃเจพ เจธเฉฐเจญเจต เจธเฉ€: "เจฎเฉเฉฐเจกเฉ‡, เจชเจพเจ‡เจฅเจจ เจธเจฟเฉฑเจ–เฉ‹ เจ…เจคเฉ‡ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃเจพเจคเจฎเจ• เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€เจ†เจ‚ 'เจคเฉ‡ เจœเจพเจ“," เจชเจฐ เจ‡เจน เจญเจฐเจคเฉ€ เจฒเจˆ เจ‡เฉฑเจ• เจตเจพเจงเฉ‚ เจฒเฉ‹เฉœ เจนเฉˆ, เจ…เจคเฉ‡ เจ…เจœเจฟเจนเจพ เจฒเจ—เจฆเจพ เจนเฉˆ เจ•เจฟ เจœเฉ‡ เจธเฉฐเจญเจต เจนเฉ‹เจตเฉ‡ เจคเจพเจ‚ เจ‡เจธ เจคเฉ‹เจ‚ เจฌเจšเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค เจ…เจธเฉ€เจ‚ FDW (เจตเจฟเจฆเฉ‡เจธเจผเฉ€ เจกเฉ‡เจŸเจพ เจฐเฉˆเจชเจฐ) เจคเจ•เจจเจพเจฒเฉ‹เจœเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเจจ เจฆเจพ เจซเฉˆเจธเจฒเจพ เจ•เฉ€เจคเจพ: เจœเจผเจฐเฉ‚เจฐเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡, เจ‡เจน เจ‡เฉฑเจ• เจฎเจฟเจ†เจฐเฉ€ dblink เจนเฉˆ, เจœเฉ‹ เจ•เจฟ SQL เจธเจŸเฉˆเจ‚เจกเจฐเจก เจตเจฟเฉฑเจš เจนเฉˆ, เจชเจฐ เจ‡เจธเจฆเฉ‡ เจ†เจชเจฃเฉ‡ เจฌเจนเฉเจค เจœเจผเจฟเจ†เจฆเจพ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจจเจพเจฒ เจนเฉˆเฅค เจ‡เจธเจฆเฉ‡ เจ…เจงเจพเจฐ เจคเฉ‡, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจนเฉฑเจฒ เจ•เฉ€เจคเจพ, เจœเฉ‹ เจ†เจ–เจฐเจ•เจพเจฐ เจซเฉœเจฟเจ† เจ—เจฟเจ†, เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจ‡เจธ 'เจคเฉ‡ เจธเฉˆเจŸเจฒ เจนเฉ‹ เจ—เจ. เจ‡เจธเจฆเฉ‡ เจตเฉ‡เจฐเจตเฉ‡ เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเฉ‡ เจฒเฉ‡เจ– เจฆเจพ เจตเจฟเจธเจผเจพ เจนเจจ, เจ…เจคเฉ‡ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆ เจ•เจฟ เจ‡เฉฑเจ• เจคเฉ‹เจ‚ เจตเฉฑเจง, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจฎเฉˆเจ‚ เจฌเจนเฉเจค เจ•เฉเจ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจ‚: เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจธเจ•เฉ€เจฎเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฎเจ•เจพเจฒเฉ€ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฒเฉˆ เจ•เฉ‡ เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจ…เจคเฉ‡ เจจเจฟเฉฑเจœเฉ€ เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจตเจฟเจ…เจ•เจคเฉ€เจ•เจฐเจจ เจคเฉฑเจ•เฅค เจ‡เจน เจ‡เฉฑเจ• เจฐเจฟเจœเจผเจฐเจตเฉ‡เจธเจผเจจ เจ•เจฐเจจ เจฒเจˆ เจตเฉ€ เจœเจผเจฐเฉ‚เจฐเฉ€ เจนเฉˆ เจ•เจฟ เจ‡เจน เจนเฉฑเจฒ เจ…เจธเจฒ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃเจพเจคเจฎเจ• เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจ…เจคเฉ‡ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚ เจฆเจพ เจฌเจฆเจฒ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจ‡เจน เจธเจฟเจฐเจซ เจ‡เฉฑเจ• เจ–เจพเจธ เจธเจฎเฉฑเจธเจฟเจ† เจฆเจพ เจนเฉฑเจฒ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจšเฉ‹เจŸเฉ€ เจฆเฉ‡ เจชเฉฑเจงเจฐ 'เจคเฉ‡ เจ‡เจน เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ:

เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจธเจฐเจตเจฟเจธ เจ†เจฐเจ•เฉ€เจŸเฉˆเจ•เจšเจฐ เจตเจฟเฉฑเจš เจธเฉฐเจšเจพเจฒเจจ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ: เจฎเจฆเจฆ เจ…เจคเฉ‡ เจชเฉเจฐเฉ‹เจ‚เจชเจŸ Postgres FDW
เจ‡เฉฑเจฅเฉ‡ เจ‡เฉฑเจ• PostgreSQL เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจนเฉˆ เจœเจฟเฉฑเจฅเฉ‡ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจ†เจชเจฃเฉ‡ เจ•เฉฐเจฎ เจฆเฉ‡ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจธเจŸเฉ‹เจฐ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจจ, เจ…เจคเฉ‡ เจธเจญ เจคเฉ‹เจ‚ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ, เจธเจพเจฐเฉ€เจ†เจ‚ เจธเฉ‡เจตเจพเจตเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃเจพเจคเจฎเจ• เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€เจ†เจ‚ FDW เจฆเฉเจ†เจฐเจพ เจ‡เจธ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจจเจพเจฒ เจœเฉเฉœเฉ€เจ†เจ‚ เจนเจจเฅค เจ‡เจน เจ•เจˆ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฒเจˆ เจ‡เฉฑเจ• เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจฒเจฟเจ–เจฃเจพ เจธเฉฐเจญเจต เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจ‡เจธ เจจเจพเจฒ เจ•เฉ‹เจˆ เจซเจฐเจ• เจจเจนเฉ€เจ‚ เจชเฉˆเจ‚เจฆเจพ เจ•เจฟ เจ‡เจน เจ•เฉ€ เจนเฉˆ: PostgreSQL, MySQL, MongoDB เจœเจพเจ‚ เจ•เฉเจ เจนเฉ‹เจฐ (เจซเจพเจˆเจฒ, API, เจœเฉ‡เจ•เจฐ เจ…เจšเจพเจจเจ• เจ•เฉ‹เจˆ เจขเฉเจ•เจตเจพเจ‚ เจฐเฉˆเจชเจฐ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจ†เจชเจฃเจพ เจ–เฉเจฆ เจฒเจฟเจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹)เฅค เจ–เฉˆเจฐ, เจธเจญ เจ•เฉเจ เจตเจงเฉ€เจ† เจฒเฉฑเจ—เจฆเจพ เจนเฉˆ! เจ•เฉ€ เจ…เจธเฉ€เจ‚ เจŸเฉเฉฑเจŸ เจฐเจนเฉ‡ เจนเจพเจ‚?

เจœเฉ‡ เจธเจญ เจ•เฉเจ เจ‡เฉฐเจจเฉ€ เจœเจฒเจฆเฉ€ เจ…เจคเฉ‡ เจ…เจธเจพเจจเฉ€ เจจเจพเจฒ เจ–เจคเจฎ เจนเฉ‹ เจ—เจฟเจ†, เจคเจพเจ‚, เจธเจผเจพเจ‡เจฆ, เจ•เฉ‹เจˆ เจฒเฉ‡เจ– เจจเจนเฉ€เจ‚ เจนเฉ‹เจตเฉ‡เจ—เจพ.

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

เจ‡เฉฑเจ• เจธเจงเจพเจฐเจจ เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจฏเฉ‹เจœเจจเจพ

เจ‡เจน เจฆเจฟเจ–เจพเจ‰เจฃ เจฒเจˆ เจ•เจฟ เจ•เจฟเจตเฉ‡เจ‚ เจชเฉ‹เจธเจŸเจ—เฉเจฐเฉ‡เจธ เจ‡เฉฑเจ• เจฐเจฟเจฎเฉ‹เจŸ เจธเจฐเจตเจฐ 'เจคเฉ‡ 6 เจฎเจฟเจฒเฉ€เจ…เจจ เจฐเฉ‹ เจŸเฉ‡เจฌเจฒ เจฆเฉ€ เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจ•เจฐเจฆเจพ เจนเฉˆ, เจ†เจ“ เจ‡เฉฑเจ• เจธเจงเจพเจฐเจจ เจฏเฉ‹เจœเจจเจพ เจจเฉ‚เฉฐ เจตเฉ‡เจ–เฉ€เจเฅค

explain analyze verbose  
SELECT count(1)
FROM fdw_schema.table;

Aggregate  (cost=418383.23..418383.24 rows=1 width=8) (actual time=3857.198..3857.198 rows=1 loops=1)
  Output: count(1)
  ->  Foreign Scan on fdw_schema."table"  (cost=100.00..402376.14 rows=6402838 width=0) (actual time=4.874..3256.511 rows=6406868 loops=1)
        Output: "table".id, "table".is_active, "table".meta, "table".created_dt
        Remote SQL: SELECT NULL FROM fdw_schema.table
Planning time: 0.986 ms
Execution time: 3857.436 ms

เจตเจฐเจฌเฉ‹เจธ เจธเจŸเฉ‡เจŸเจฎเฉˆเจ‚เจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจจเจพเจฒ เจธเจพเจจเฉ‚เฉฐ เจ‰เจน เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจฆเฉ‡เจ–เจฃ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฎเจฟเจฒเจฆเฉ€ เจนเฉˆ เจœเฉ‹ เจฐเจฟเจฎเฉ‹เจŸ เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจญเฉ‡เจœเฉ€ เจœเจพเจตเฉ‡เจ—เฉ€ เจ…เจคเฉ‡ เจœเจฟเจธ เจฆเฉ‡ เจจเจคเฉ€เจœเฉ‡ เจ…เจธเฉ€เจ‚ เจ…เฉฑเจ—เฉ‡ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฒเจˆ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจพเจ‚เจ—เฉ‡ (RemoteSQL เจฒเจพเจˆเจจ)เฅค

เจ†เจ“ เจฅเฉ‹เฉœเจพ เจนเฉ‹เจฐ เจ…เฉฑเจ—เฉ‡ เจšเฉฑเจฒเฉ€เจ เจ…เจคเฉ‡ เจธเจพเจกเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจตเจฟเฉฑเจš เจ•เจˆ เจซเจฟเจฒเจŸเจฐ เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ€เจ: เจ‡เฉฑเจ• เจฒเจˆ เจฌเฉ‚เจฒเฉ€เจ…เจจ เจ–เฉ‡เจคเจฐ, เจ˜เจŸเจจเจพ เจฆเฉเจ†เจฐเจพ เจ‡เฉฑเจ• เจฎเฉ‹เจนเจฐ เจ…เฉฐเจคเจฐเจพเจฒ เจตเจฟเฉฑเจš เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจฆเฉเจ†เจฐเจพ jsonb.

explain analyze verbose
SELECT count(1)
FROM fdw_schema.table 
WHERE is_active is True
AND created_dt BETWEEN CURRENT_DATE - INTERVAL '7 month' 
AND CURRENT_DATE - INTERVAL '6 month'
AND meta->>'source' = 'test';

Aggregate  (cost=577487.69..577487.70 rows=1 width=8) (actual time=27473.818..25473.819 rows=1 loops=1)
  Output: count(1)
  ->  Foreign Scan on fdw_schema."table"  (cost=100.00..577469.21 rows=7390 width=0) (actual time=31.369..25372.466 rows=1360025 loops=1)
        Output: "table".id, "table".is_active, "table".meta, "table".created_dt
        Filter: (("table".is_active IS TRUE) AND (("table".meta ->> 'source'::text) = 'test'::text) AND ("table".created_dt >= (('now'::cstring)::date - '7 mons'::interval)) AND ("table".created_dt <= ((('now'::cstring)::date)::timestamp with time zone - '6 mons'::interval)))
        Rows Removed by Filter: 5046843
        Remote SQL: SELECT created_dt, is_active, meta FROM fdw_schema.table
Planning time: 0.665 ms
Execution time: 27474.118 ms

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

เจœเฉ‹ เจ•เจฟ เจ•เฉเจ booleanshit เจนเฉˆ

เจฌเฉ‚เจฒเฉ€เจ…เจจ เจซเฉ€เจฒเจกเจœเจผ เจจเจพเจฒ เจธเจญ เจ•เฉเจ เจธเจงเจพเจฐเจจ เจนเฉˆเฅค เจฎเฉ‚เจฒ เจฌเฉ‡เจจเจคเฉ€ เจตเจฟเฉฑเจš, เจธเจฎเฉฑเจธเจฟเจ† เจ†เจชเจฐเฉ‡เจŸเจฐ เจฆเฉ‡ เจ•เจพเจฐเจจ เจธเฉ€ is. เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจจเจพเจฒ เจฌเจฆเจฒเจฆเฉ‡ เจนเฉ‹ =, เจซเจฟเจฐ เจธเจพเจจเฉ‚เฉฐ เจนเฉ‡เจ  เจฆเจฟเฉฑเจคเฉ‡ เจจเจคเฉ€เจœเฉ‡ เจชเฉเจฐเจพเจชเจค เจนเฉเฉฐเจฆเฉ‡ เจนเจจ:

explain analyze verbose
SELECT count(1)
FROM fdw_schema.table
WHERE is_active = True
AND created_dt BETWEEN CURRENT_DATE - INTERVAL '7 month' 
AND CURRENT_DATE - INTERVAL '6 month'
AND meta->>'source' = 'test';

Aggregate  (cost=508010.14..508010.15 rows=1 width=8) (actual time=19064.314..19064.314 rows=1 loops=1)
  Output: count(1)
  ->  Foreign Scan on fdw_schema."table"  (cost=100.00..507988.44 rows=8679 width=0) (actual time=33.035..18951.278 rows=1360025 loops=1)
        Output: "table".id, "table".is_active, "table".meta, "table".created_dt
        Filter: ((("table".meta ->> 'source'::text) = 'test'::text) AND ("table".created_dt >= (('now'::cstring)::date - '7 mons'::interval)) AND ("table".created_dt <= ((('now'::cstring)::date)::timestamp with time zone - '6 mons'::interval)))
        Rows Removed by Filter: 3567989
        Remote SQL: SELECT created_dt, meta FROM fdw_schema.table WHERE (is_active)
Planning time: 0.834 ms
Execution time: 19064.534 ms

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจตเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจซเจฟเจฒเจŸเจฐ เจ‡เฉฑเจ• เจฐเจฟเจฎเฉ‹เจŸ เจธเจฐเจตเจฐ เจคเฉ‡ เจ‰เฉฑเจก เจ—เจฟเจ† เจธเฉ€, เจ…เจคเฉ‡ เจšเฉฑเจฒเจฃ เจฆเจพ เจธเจฎเจพเจ‚ 27 เจคเฉ‹เจ‚ 19 เจธเจ•เจฟเฉฐเจŸเจพเจ‚ เจคเฉฑเจ• เจ˜เจŸเจพ เจฆเจฟเฉฑเจคเจพ เจ—เจฟเจ† เจธเฉ€.

เจ‡เจน เจงเจฟเจ†เจจ เจฆเฉ‡เจฃ เจฏเฉ‹เจ— เจนเฉˆ เจ•เจฟ เจ†เจชเจฐเฉ‡เจŸเจฐ is เจ†เจชเจฐเฉ‡เจŸเจฐ เจคเฉ‹เจ‚ เจตเฉฑเจ–เจฐเจพ = เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจน Null เจฎเฉเฉฑเจฒ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจฆเจพ เจฎเจคเจฒเจฌ เจนเฉˆ เจ•เจฟ เจ‡เจน เจธเฉฑเจš เจจเจนเฉ€เจ‚ เจนเฉˆ เจซเจฟเจฒเจŸเจฐ เจตเจฟเฉฑเจš เจฎเฉเฉฑเจฒ False เจ…เจคเฉ‡ Null เจ›เฉฑเจก เจฆเฉ‡เจตเฉ‡เจ—เจพ, เจœเจฆเจ•เจฟ ! = เจธเฉฑเจš เจธเจฟเจฐเจซ เจ—เจฒเจค เจฎเฉเฉฑเจฒ เจ›เฉฑเจกเจฃเจ—เฉ‡เฅค เจ‡เจธ เจฒเจˆ, เจœเจฆเฉ‹เจ‚ เจ“เจชเจฐเฉ‡เจŸเจฐ เจจเฉ‚เฉฐ เจฌเจฆเจฒเจฃเจพ เจจเจนเฉ€ เจนเฉˆ OR เจ†เจชเจฐเฉ‡เจŸเจฐ เจจเจพเจฒ เจฆเฉ‹ เจธเจผเจฐเจคเจพเจ‚ เจซเจฟเจฒเจŸเจฐ เจจเฉ‚เฉฐ เจชเจพเจธ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจœเจพเจฃเฉ€เจ†เจ‚ เจšเจพเจนเฉ€เจฆเฉ€เจ†เจ‚ เจนเจจ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, WHERE (col!= True) เจœเจพเจ‚ (col null เจนเฉˆ).

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

เจŸเจพเจˆเจฎเจธเจŸเฉˆเจ‚เจชเจŸเจœเจผ? hz

เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ…เจ•เจธเจฐ เจ‡เจธ เจ—เฉฑเจฒ เจฆเจพ เจชเฉเจฐเจฏเฉ‹เจ— เจ•เจฐเจจเจพ เจชเฉˆเจ‚เจฆเจพ เจนเฉˆ เจ•เจฟ เจฐเจฟเจฎเฉ‹เจŸ เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจธเจผเจพเจฎเจฒ เจ•เจฐเจจ เจตเจพเจฒเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจจเฉ‚เฉฐ เจธเจนเฉ€ เจขเฉฐเจ— เจจเจพเจฒ เจ•เจฟเจตเฉ‡เจ‚ เจฒเจฟเจ–เจฃเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจ•เฉ‡เจตเจฒ เจคเจฆ เจนเฉ€ เจ‡เจธ เจฌเจพเจฐเฉ‡ เจธเจชเฉฑเจธเจผเจŸเฉ€เจ•เจฐเจจ เจฒเฉฑเจญเฉ‹ เจ•เจฟ เจ…เจœเจฟเจนเจพ เจ•เจฟเจ‰เจ‚ เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจฌเจพเจฐเฉ‡ เจฌเจนเฉเจค เจ˜เฉฑเจŸ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจ‡เฉฐเจŸเจฐเจจเฉˆเฉฑเจŸ 'เจคเฉ‡ เจชเจพเจˆ เจœเจพ เจธเจ•เจฆเฉ€ เจนเฉˆเฅค เจ‡เจธ เจฒเจˆ, เจชเฉเจฐเจฏเฉ‹เจ—เจพเจ‚ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจชเจพเจ‡เจ† เจ•เจฟ เจ‡เฉฑเจ• เจจเจฟเจธเจผเจšเจฟเจค เจฎเจฟเจคเฉ€ เจซเจฟเจฒเจŸเจฐ เจ‡เฉฑเจ• เจงเจฎเจพเจ•เฉ‡ เจจเจพเจฒ เจฐเจฟเจฎเฉ‹เจŸ เจธเจฐเจตเจฐ เจคเฉ‡ เจ‰เฉฑเจกเจฆเจพ เจนเฉˆ, เจชเจฐ เจœเจฆเฉ‹เจ‚ เจ…เจธเฉ€เจ‚ เจฎเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจ—เจคเฉ€เจธเจผเฉ€เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจธเฉˆเฉฑเจŸ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจพเจ‚, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, now() เจœเจพเจ‚ CURRENT_DATE, เจ…เจœเจฟเจนเจพ เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค เจธเจพเจกเฉ€ เจ‰เจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจซเจฟเจฒเจŸเจฐ เจœเฉ‹เฉœเจฟเจ† เจนเฉˆ เจคเจพเจ‚ เจ•เจฟ เจฌเจฃเจพเจ‡เจ†_at เจ•เจพเจฒเจฎ เจตเจฟเฉฑเจš เจชเจฟเจ›เจฒเฉ‡ 1 เจฎเจนเฉ€เจจเฉ‡ เจฆเจพ เจกเฉ‡เจŸเจพ เจธเฉ€ (BETWEEN CURRENT_DATE - INTERVAL '7 เจฎเจนเฉ€เจจเจพ' เจ…เจคเฉ‡ CURRENT_DATE - INTERVAL '6 เจฎเจนเฉ€เจจเจพ')เฅค เจ…เจธเฉ€เจ‚ เจ‡เจธ เจฎเจพเจฎเจฒเฉ‡ เจตเจฟเฉฑเจš เจ•เฉ€ เจ•เฉ€เจคเจพ?

explain analyze verbose
SELECT count(1)
FROM fdw_schema.table 
WHERE is_active is True
AND created_dt >= (SELECT CURRENT_DATE::timestamptz - INTERVAL '7 month') 
AND created_dt <(SELECT CURRENT_DATE::timestamptz - INTERVAL '6 month')
AND meta->>'source' = 'test';

Aggregate  (cost=306875.17..306875.18 rows=1 width=8) (actual time=4789.114..4789.115 rows=1 loops=1)
  Output: count(1)
  InitPlan 1 (returns $0)
    ->  Result  (cost=0.00..0.02 rows=1 width=8) (actual time=0.007..0.008 rows=1 loops=1)
          Output: ((('now'::cstring)::date)::timestamp with time zone - '7 mons'::interval)
  InitPlan 2 (returns $1)
    ->  Result  (cost=0.00..0.02 rows=1 width=8) (actual time=0.002..0.002 rows=1 loops=1)
          Output: ((('now'::cstring)::date)::timestamp with time zone - '6 mons'::interval)
  ->  Foreign Scan on fdw_schema."table"  (cost=100.02..306874.86 rows=105 width=0) (actual time=23.475..4681.419 rows=1360025 loops=1)
        Output: "table".id, "table".is_active, "table".meta, "table".created_dt
        Filter: (("table".is_active IS TRUE) AND (("table".meta ->> 'source'::text) = 'test'::text))
        Rows Removed by Filter: 76934
        Remote SQL: SELECT is_active, meta FROM fdw_schema.table WHERE ((created_dt >= $1::timestamp with time zone)) AND ((created_dt < $2::timestamp with time zone))
Planning time: 0.703 ms
Execution time: 4789.379 ms

เจ…เจธเฉ€เจ‚ เจฏเฉ‹เจœเจจเจพเจ•เจพเจฐ เจจเฉ‚เฉฐ เจธเจฌเจ•เจตเฉ‡เจฐเฉ€ เจตเจฟเฉฑเจš เจคเจพเจฐเฉ€เจ– เจฆเฉ€ เจชเจนเจฟเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจ—เจฃเจจเจพ เจ•เจฐเจจ เจ…เจคเฉ‡ เจซเจฟเจฒเจŸเจฐ เจจเฉ‚เฉฐ เจคเจฟเจ†เจฐ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจชเจพเจธ เจ•เจฐเจจ เจฒเจˆ เจ•เจฟเจนเจพ เจนเฉˆเฅค เจ…เจคเฉ‡ เจ‡เจธ เจธเฉฐเจ•เฉ‡เจค เจจเฉ‡ เจธเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจธเจผเจพเจจเจฆเจพเจฐ เจจเจคเฉ€เจœเจพ เจฆเจฟเฉฑเจคเจพ, เจฌเฉ‡เจจเจคเฉ€ เจฒเจ—เจญเจ— 6 เจ—เฉเจฃเจพ เจคเฉ‡เจœเจผ เจนเฉ‹ เจ—เจˆ!

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

เจ†เจ‰ เจฎเจฟเจคเฉ€ เจซเจฟเจฒเจŸเจฐ เจจเฉ‚เฉฐ เจ‡เจธเจฆเฉ‡ เจฎเฉ‚เจฒ เจฎเฉเฉฑเจฒ เจคเฉ‡ เจตเจพเจชเจธ เจ•เจฐเฉ€เจเฅค

เจซเจฐเฉˆเจกเฉ€ เจฌเจจเจพเจฎ. เจœเจธเจจเจฌ

เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡, เจฌเฉ‚เจฒเฉ€เจ…เจจ เจ–เฉ‡เจคเจฐเจพเจ‚ เจ…เจคเฉ‡ เจคเจพเจฐเฉ€เจ–เจพเจ‚ เจจเฉ‡ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจธเจพเจกเฉ€ เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจจเฉ‚เฉฐ เจ•เจพเจซเจผเฉ€ เจคเฉ‡เจœเจผ เจ•เจฐ เจฆเจฟเฉฑเจคเจพ เจนเฉˆ, เจชเจฐ เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจกเจพเจŸเจพ เจ•เจฟเจธเจฎ เจฌเจพเจ•เฉ€ เจธเฉ€เฅค เจ‡เจธ เจฆเฉเจ†เจฐเจพ เจซเจฟเจฒเจŸเจฐ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉœเจพเจˆ, เจ‡เจฎเจพเจจเจฆเจพเจฐเฉ€ เจจเจพเจฒ, เจ…เจœเฉ‡ เจตเฉ€ เจ–เจคเจฎ เจจเจนเฉ€เจ‚ เจนเฉ‹เจˆ เจนเฉˆ, เจนเจพเจฒเจพเจ‚เจ•เจฟ เจ‡เฉฑเจฅเฉ‡ เจตเฉ€ เจธเจซเจฒเจคเจพ เจนเฉˆ. เจ‡เจธ เจฒเจˆ, เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจ…เจธเฉ€เจ‚ เจซเจฟเจฒเจŸเจฐ เจจเฉ‚เฉฐ เจชเจพเจธ เจ•เจฐเจจ เจตเจฟเฉฑเจš เจ•เจพเจฎเจฏเจพเจฌ เจนเฉ‹เจ jsonb เจฐเจฟเจฎเฉ‹เจŸ เจธเจฐเจตเจฐ เจฒเจˆ เจ–เฉ‡เจคเจฐ.

explain analyze verbose
SELECT count(1)
FROM fdw_schema.table 
WHERE is_active is True
AND created_dt BETWEEN CURRENT_DATE - INTERVAL '7 month' 
AND CURRENT_DATE - INTERVAL '6 month'
AND meta @> '{"source":"test"}'::jsonb;

Aggregate  (cost=245463.60..245463.61 rows=1 width=8) (actual time=6727.589..6727.590 rows=1 loops=1)
  Output: count(1)
  ->  Foreign Scan on fdw_schema."table"  (cost=1100.00..245459.90 rows=1478 width=0) (actual time=16.213..6634.794 rows=1360025 loops=1)
        Output: "table".id, "table".is_active, "table".meta, "table".created_dt
        Filter: (("table".is_active IS TRUE) AND ("table".created_dt >= (('now'::cstring)::date - '7 mons'::interval)) AND ("table".created_dt <= ((('now'::cstring)::date)::timestamp with time zone - '6 mons'::interval)))
        Rows Removed by Filter: 619961
        Remote SQL: SELECT created_dt, is_active FROM fdw_schema.table WHERE ((meta @> '{"source": "test"}'::jsonb))
Planning time: 0.747 ms
Execution time: 6727.815 ms

เจ†เจชเจฐเฉ‡เจŸเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจซเจฟเจฒเจŸเจฐ เจ•เจฐเจจ เจฆเฉ€ เจฌเจœเจพเจ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ†เจชเจฐเฉ‡เจŸเจฐ เจฆเฉ€ เจฎเฉŒเจœเฉ‚เจฆเจ—เฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเฉ€ เจšเจพเจนเฉ€เจฆเฉ€ เจนเฉˆ jsonb เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเฉ‡ เจตเจฟเฉฑเจš. เจ…เจธเจฒเฉ€ 7 เจฆเฉ€ เจฌเจœเจพเจ 29 เจธเจ•เจฟเฉฐเจŸเฅค เจนเฉเจฃ เจคเฉฑเจ• เจซเจฟเจฒเจŸเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เจธ เจฐเจพเจนเฉ€เจ‚ เจชเฉเจฐเจธเจพเจฐเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจ‡เจน เจ‡เฉฑเจ•เฉ‹ เจ‡เฉฑเจ• เจธเจซเจฒ เจตเจฟเจ•เจฒเจช เจนเฉˆ jsonb เจ‡เฉฑเจ• เจฐเจฟเจฎเฉ‹เจŸ เจธเจฐเจตเจฐ เจฒเจˆ, เจชเจฐ เจ‡เฉฑเจฅเฉ‡ เจ‡เฉฑเจ• เจธเฉ€เจฎเจพ เจจเฉ‚เฉฐ เจงเจฟเจ†เจจ เจตเจฟเฉฑเจš เจฐเฉฑเจ–เจฃเจพ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจนเฉˆ: เจ…เจธเฉ€เจ‚ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฆเฉ‡ เจธเฉฐเจธเจ•เจฐเจฃ 9.6 เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจฐเจนเฉ‡ เจนเจพเจ‚, เจชเจฐ เจ…เจชเฉเจฐเฉˆเจฒ เจฆเฉ‡ เจ…เฉฐเจค เจคเฉฑเจ• เจ…เจธเฉ€เจ‚ เจ†เจ–เจฐเฉ€ เจŸเฉˆเจธเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉ‚เจฐเจพ เจ•เจฐเจจ เจ…เจคเฉ‡ เจธเฉฐเจธเจ•เจฐเจฃ 12 เจตเจฟเฉฑเจš เจœเจพเจฃ เจฆเฉ€ เจฏเฉ‹เจœเจจเจพ เจฌเจฃเจพ เจฐเจนเฉ‡ เจนเจพเจ‚เฅค เจ‡เฉฑเจ• เจตเจพเจฐ เจœเจฆเฉ‹เจ‚ เจ…เจธเฉ€เจ‚ เจ…เฉฑเจชเจกเฉ‡เจŸ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจคเจพเจ‚ เจ…เจธเฉ€เจ‚ เจ‡เจธ เจฌเจพเจฐเฉ‡ เจฒเจฟเจ–เจพเจ‚เจ—เฉ‡ เจ•เจฟ เจ‡เจน เจ•เจฟเจตเฉ‡เจ‚ เจชเฉเจฐเจญเจพเจตเจฟเจค เจนเฉ‹เจ‡เจ†, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เฉฑเจฅเฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจนเจจ เจœเจฟเจจเฉเจนเจพเจ‚ เจฒเจˆ เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจ‰เจฎเฉ€เจฆเจพเจ‚ เจนเจจ: json_path, เจจเจตเจพเจ‚ CTE เจตเจฟเจตเจนเจพเจฐ, เจชเฉเจธเจผ เจกเจพเจŠเจจ (เจตเจฐเจœเจจ 10 เจคเฉ‹เจ‚ เจฎเฉŒเจœเฉ‚เจฆเจพ)เฅค เจฎเฉˆเจ‚ เจธเฉฑเจšเจฎเฉเฉฑเจš เจœเจฒเจฆเฉ€ เจนเฉ€ เจ‡เจธเจจเฉ‚เฉฐ เจ…เจœเจผเจฎเจพเจ‰เจฃเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจ‚.

เจ‰เจธเจจเฉ‚เฉฐ เจ–เจคเจฎ เจ•เจฐเฉ‹

เจ…เจธเฉ€เจ‚ เจœเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจ•เจฟ เจนเจฐเฉ‡เจ• เจคเจฌเจฆเฉ€เจฒเฉ€ เจจเฉ‡ เจตเจฟเจ…เจ•เจคเฉ€เจ—เจค เจคเฉŒเจฐ 'เจคเฉ‡ เจฌเฉ‡เจจเจคเฉ€ เจฆเฉ€ เจ—เจคเฉ€ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจชเฉเจฐเจญเจพเจตเจฟเจค เจ•เฉ€เจคเจพเฅค เจ†เจ“ เจนเฉเจฃ เจฆเฉ‡เจ–เจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจ•เฉ€ เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจœเจฆเฉ‹เจ‚ เจธเจพเจฐเฉ‡ เจคเจฟเฉฐเจจ เจซเจฟเจฒเจŸเจฐ เจธเจนเฉ€ เจขเฉฐเจ— เจจเจพเจฒ เจฒเจฟเจ–เฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจเฅค

explain analyze verbose
SELECT count(1)
FROM fdw_schema.table 
WHERE is_active = True
AND created_dt >= (SELECT CURRENT_DATE::timestamptz - INTERVAL '7 month') 
AND created_dt <(SELECT CURRENT_DATE::timestamptz - INTERVAL '6 month')
AND meta @> '{"source":"test"}'::jsonb;

Aggregate  (cost=322041.51..322041.52 rows=1 width=8) (actual time=2278.867..2278.867 rows=1 loops=1)
  Output: count(1)
  InitPlan 1 (returns $0)
    ->  Result  (cost=0.00..0.02 rows=1 width=8) (actual time=0.010..0.010 rows=1 loops=1)
          Output: ((('now'::cstring)::date)::timestamp with time zone - '7 mons'::interval)
  InitPlan 2 (returns $1)
    ->  Result  (cost=0.00..0.02 rows=1 width=8) (actual time=0.003..0.003 rows=1 loops=1)
          Output: ((('now'::cstring)::date)::timestamp with time zone - '6 mons'::interval)
  ->  Foreign Scan on fdw_schema."table"  (cost=100.02..322041.41 rows=25 width=0) (actual time=8.597..2153.809 rows=1360025 loops=1)
        Output: "table".id, "table".is_active, "table".meta, "table".created_dt
        Remote SQL: SELECT NULL FROM fdw_schema.table WHERE (is_active) AND ((created_dt >= $1::timestamp with time zone)) AND ((created_dt < $2::timestamp with time zone)) AND ((meta @> '{"source": "test"}'::jsonb))
Planning time: 0.820 ms
Execution time: 2279.087 ms

เจนเจพเจ‚, เจฌเฉ‡เจจเจคเฉ€ เจตเจงเฉ‡เจฐเฉ‡ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจฒเฉฑเจ—เจฆเฉ€ เจนเฉˆ, เจ‡เจน เจ‡เฉฑเจ• เจœเจผเจฌเจฐเจฆเจธเจคเฉ€ เจซเฉ€เจธ เจนเฉˆ, เจชเจฐ เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ เจฆเฉ€ เจ—เจคเฉ€ 2 เจธเจ•เจฟเฉฐเจŸ เจนเฉˆ, เจœเฉ‹ เจ•เจฟ 10 เจ—เฉเจฃเจพ เจคเฉ‹เจ‚ เจตเฉฑเจง เจคเฉ‡เจœเจผ เจนเฉˆ! เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจฎเฉเจ•เจพเจฌเจฒเจคเจจ เจ›เฉ‹เจŸเฉ‡ เจกเฉ‡เจŸเจพ เจธเฉˆเฉฑเจŸ เจฆเฉ‡ เจตเจฟเจฐเฉเฉฑเจง เจ‡เฉฑเจ• เจธเจงเจพเจฐเจจ เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐ เจฐเจนเฉ‡ เจนเจพเจ‚. เจ…เจธเจฒ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ 'เจคเฉ‡, เจธเจพเจจเฉ‚เฉฐ เจ•เจˆ เจธเฉŒ เจ—เฉเจฃเจพ เจคเฉฑเจ• เจฆเจพ เจตเจพเจงเจพ เจฎเจฟเจฒเจฟเจ† เจนเฉˆเฅค

เจธเฉฐเจ–เฉ‡เจช เจ•เจฐเจจ เจฒเจˆ: เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ FDW เจฆเฉ‡ เจจเจพเจฒ PostgreSQL เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจนเจฎเฉ‡เจธเจผเจพเจ‚ เจœเจพเจ‚เจš เจ•เจฐเฉ‹ เจ•เจฟ เจธเจพเจฐเฉ‡ เจซเจฟเจฒเจŸเจฐ เจฐเจฟเจฎเฉ‹เจŸ เจธเจฐเจตเจฐ 'เจคเฉ‡ เจญเฉ‡เจœเฉ‡ เจ—เจ เจนเจจ, เจ…เจคเฉ‡ เจคเฉเจธเฉ€เจ‚ เจ–เฉเจธเจผ เจนเฉ‹เจตเฉ‹เจ—เฉ‡... เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจ‰เจฆเฉ‹เจ‚ เจคเฉฑเจ• เจœเจฆเฉ‹เจ‚ เจคเฉฑเจ• เจคเฉเจธเฉ€เจ‚ เจตเฉฑเจ–-เจตเฉฑเจ– เจธเจฐเจตเจฐเจพเจ‚ เจคเฉ‹เจ‚ เจŸเฉ‡เจฌเจฒเจพเจ‚ เจตเจฟเจšเจ•เจพเจฐ เจธเจผเจพเจฎเจฒ เจจเจนเฉ€เจ‚ เจนเฉ‹ เจœเจพเจ‚เจฆเฉ‡เฅค เจชเจฐ เจ‡เจน เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจฒเฉ‡เจ– เจฒเจˆ เจ‡เฉฑเจ• เจ•เจนเจพเจฃเฉ€ เจนเฉˆ.

เจคเฉเจนเจพเจกเฉ‡ เจงเจฟเจ†เจจ เจฒเจˆ เจงเฉฐเจจเจตเจพเจฆ! เจฎเฉˆเจ‚ เจŸเจฟเฉฑเจชเจฃเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš เจคเฉเจนเจพเจกเฉ‡ เจ…เจจเฉเจญเจตเจพเจ‚ เจฌเจพเจฐเฉ‡ เจธเจตเจพเจฒ, เจŸเจฟเฉฑเจชเจฃเฉ€เจ†เจ‚ เจ…เจคเฉ‡ เจ•เจนเจพเจฃเฉ€เจ†เจ‚ เจธเฉเจฃเจจเจพ เจชเจธเฉฐเจฆ เจ•เจฐเจพเจ‚เจ—เจพเฅค

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

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