เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเต เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเดฑเดฟเดฒเต† เดชเตเดฐเดตเตผเดคเตเดคเดจ เดตเดฟเดถเด•เดฒเดจเด‚: เดธเดนเดพเดฏเดตเตเด‚ เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเตเด‚ Postgres FDW

เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเต เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเดฑเดฟเดจเตเด‚, เดˆ เดฒเต‹เด•เดคเตเดคเดฟเดฒเต† เดŽเดฒเตเดฒเดพเดคเตเดคเดฟเดจเต‡เดฏเตเด‚ เดชเต‹เดฒเต†, เด…เดคเดฟเดจเตเดฑเต† เด—เตเดฃเด™เตเด™เดณเตเด‚ เดฆเต‹เดทเด™เตเด™เดณเตเดฎเตเดฃเตเดŸเต. เดšเดฟเดฒ เดชเตเดฐเด•เตเดฐเดฟเดฏเด•เตพ เด…เดคเต เดŽเดณเตเดชเตเดชเดฎเดพเด•เตเด•เตเดจเตเดจเต, เดฎเดฑเตเดฑเตเดณเตเดณเดต เด•เต‚เดŸเตเดคเตฝ เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเดพเดฃเต. เดฎเดพเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เดตเต‡เด—เดคเดฏเตเด•เตเด•เตเด‚ เดฎเดฟเด•เดšเตเดš เดธเตเด•เต‡เดฒเดฌเดฟเดณเดฟเดฑเตเดฑเดฟเด•เตเด•เตเด‚ เดตเต‡เดฃเตเดŸเดฟ, เดจเดฟเด™เตเด™เตพ เดคเตเดฏเดพเด—เด™เตเด™เตพ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เด…เดตเดฏเดฟเดฒเตŠเดจเตเดจเต เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเดจเตเดฑเต† เดธเด™เตเด•เต€เตผเดฃเตเดฃเดคเดฏเดพเดฃเต. เด’เดฐเต เดฎเต‹เดฃเต‹เดฒเดฟเดคเตเดคเดฟเตฝ เดŽเดฒเตเดฒเดพ เดชเตเดฐเดตเตผเดคเตเดคเดจ เดตเดฟเดถเด•เดฒเดจเด™เตเด™เดณเตเด‚ SQL เด…เดจเตเดตเต‡เดทเดฃเด™เตเด™เดณเดพเดฏเดฟ เด’เดฐเต เด…เดจเดฒเดฟเดฑเตเดฑเดฟเด•เตเด•เตฝ เดฑเต†เดชเตเดฒเดฟเด•เตเด•เดฟเดฒเต‡เด•เตเด•เต เดšเตเดฐเตเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดฎเต†เด™เตเด•เดฟเตฝ, เด’เดฐเต เดฎเตพเดŸเตเดŸเดฟเดธเตผเดตเต€เดธเต เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเดฑเดฟเตฝ เด“เดฐเต‹ เดธเต‡เดตเดจเดคเตเดคเดฟเดจเตเด‚ เด…เดคเดฟเดจเตเดฑเต‡เดคเดพเดฏ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เด‰เดฃเตเดŸเต, เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ เด’เดฐเต เดšเต‹เดฆเตเดฏเด‚ เดฎเดคเดฟเดฏเดพเด•เดฟเดฒเตเดฒเต†เดจเตเดจเต เดคเต‹เดจเตเดจเตเดจเตเดจเต (เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด…เด™เตเด™เดจเต†เดฏเดพเด•เตเดฎเต‹?). เดžเด™เตเด™เดณเตเดŸเต† เด•เดฎเตเดชเดจเดฟเดฏเดฟเดฒเต† เดชเตเดฐเดตเตผเดคเตเดคเดจ เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเดจเตเดฑเต† เดชเตเดฐเดถเตเดจเด‚ เดžเด™เตเด™เตพ เดŽเด™เตเด™เดจเต† เดชเดฐเดฟเดนเดฐเดฟเดšเตเดšเตเดตเต†เดจเตเดจเตเด‚ เดˆ เดชเดฐเดฟเดนเดพเดฐเดคเตเดคเดฟเตฝ เดŽเด™เตเด™เดจเต† เดœเต€เดตเดฟเด•เตเด•เดพเตป เดชเด เดฟเดšเตเดšเตเดตเต†เดจเตเดจเตเด‚ เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดณเตเดณเดตเตผเด•เตเด•เต - เดธเตเดตเดพเด—เดคเด‚.

เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเต เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเดฑเดฟเดฒเต† เดชเตเดฐเดตเตผเดคเตเดคเดจ เดตเดฟเดถเด•เดฒเดจเด‚: เดธเดนเดพเดฏเดตเตเด‚ เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเตเด‚ Postgres FDW
เดŽเดจเตเดฑเต† เดชเต‡เดฐเต เดชเดพเดตเตฝ เดถเดฟเดตเดพเดทเต, DomClick-เตฝ เดžเดพเตป เด…เดจเดฒเดฟเดฑเตเดฑเดฟเด•เตเด•เตฝ เดกเดพเดฑเตเดฑ เดตเต†เดฏเตผเดนเต—เดธเต เดชเดฐเดฟเดชเดพเดฒเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด‰เดคเตเดคเดฐเดตเดพเดฆเดฟเดคเตเดคเดฎเตเดณเตเดณ เด’เดฐเต เดŸเต€เดฎเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต. เดชเดฐเดฎเตเดชเดฐเดพเด—เดคเดฎเดพเดฏเดฟ, เดžเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดกเดพเดฑเตเดฑเดพ เดŽเดžเตเดšเดฟเดจเต€เดฏเดฑเดฟเด‚เด—เดฟเดจเต เด†เดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเดพเด‚, เดชเด•เตเดทเต‡, เดตเดพเดธเตเดคเดตเดคเตเดคเดฟเตฝ, เดŸเดพเดธเตเด•เตเด•เตเด•เดณเตเดŸเต† เดถเตเดฐเต‡เดฃเดฟ เดตเดณเดฐเต† เดตเดฟเดถเดพเดฒเดฎเดพเดฃเต. เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เดกเดพเดฑเตเดฑ เดŽเดžเตเดšเดฟเดจเต€เดฏเดฑเดฟเด‚เด—เต ETL / ELT เด‰เดฃเตเดŸเต, เดกเดพเดฑเตเดฑ เดตเดฟเดถเด•เดฒเดจ เดŸเต‚เดณเตเด•เดณเตเดŸเต† เดชเดฟเดจเตเดคเตเดฃเดฏเตเด‚ เดชเตŠเดฐเตเดคเตเดคเดชเตเดชเต†เดŸเตเดคเตเดคเดฒเตเด‚ เด…เดตเดฐเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ เด‰เดชเด•เดฐเดฃเด™เตเด™เดณเตเดŸเต† เดตเดฟเด•เดธเดจเดตเตเด‚. เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเตเด‚, เดชเตเดฐเดตเตผเดคเตเดคเดจ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเดฟเด‚เด—เดฟเดจเดพเดฏเดฟ, เดžเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดฎเต‹เดฃเต‹เดฒเดฟเดคเตเดคเต เด‰เดฃเตเดŸเต†เดจเตเดจเต "เดจเดŸเดฟเด•เตเด•เดพเตป" เดžเด™เตเด™เตพ เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต, เด•เต‚เดŸเดพเดคเต† เด…เดจเดฒเดฟเดธเตเดฑเตเดฑเตเด•เตพเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเดพเดฏ เดŽเดฒเตเดฒเดพ เดกเดพเดฑเตเดฑเดฏเตเด‚ เด‰เตพเด•เตเด•เตŠเดณเตเดณเตเดจเตเดจ เด’เดฐเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดจเตฝเด•เดพเดจเตเด‚ เดžเด™เตเด™เตพ เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต.

เดชเตŠเดคเตเดตเต‡, เดžเด™เตเด™เตพ เดตเตเดฏเดคเตเดฏเดธเตเดค เด“เดชเตเดทเดจเตเด•เตพ เดชเดฐเดฟเด—เดฃเดฟเดšเตเดšเต. เด’เดฐเต เดธเดฎเตเดชเต‚เตผเดฃเตเดฃ เดถเต‡เด–เดฐเด‚ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เดพเตป เดธเดพเดงเดฟเดšเตเดšเต - เดžเด™เตเด™เตพ เดถเตเดฐเดฎเดฟเดšเตเดšเต, เดชเด•เตเดทเต‡, เดธเดคเตเดฏเดธเดจเตเดงเดฎเดพเดฏเดฟ เดชเดฑเดžเตเดžเดพเตฝ, เด’เดฐเต เดถเต‡เด–เดฐเด‚ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เด…เดคเดฟเตฝ เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดตเดฐเตเดคเตเดคเตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เดธเดพเดตเดงเดพเดจเดคเตเดคเดฟเดฒเตเดณเตเดณ เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเดฟเดฒเต‚เดŸเต† เดฏเตเด•เตเดคเดฟเดฏเดฟเตฝ เดชเดคเดฟเดตเดพเดฏเดฟ เดฎเดพเดฑเตเดฑเด™เตเด™เดณเต‹เดŸเต† เดšเด™เตเด™เดพเดคเตเดคเด‚ เด•เต‚เดŸเดพเตป เดžเด™เตเด™เตพเด•เตเด•เต เด•เดดเดฟเดžเตเดžเดฟเดฒเตเดฒ ( เด†เดฐเต†เด™เตเด•เดฟเดฒเตเด‚ เดตเดฟเดœเดฏเดฟเดšเตเดšเดพเตฝ, เดŽเด™เตเด™เดจเต†เดฏเต†เดจเตเดจเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เดณเดฟเตฝ เดŽเดดเตเดคเตเด•). เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดตเดฟเดถเด•เดฒเดจ เดตเดฟเดฆเด—เตเดงเดฐเต‹เดŸเต เดชเดฑเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚: "เด•เต‚เดŸเตเดŸเตเด•เดพเดฐเต‡, เดชเตˆเดคเตเดคเตบ เดชเด เดฟเดšเตเดšเต เด…เดจเดฒเดฟเดฑเตเดฑเดฟเด•เตเด•เตฝ เดฒเตˆเดจเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เตเด•", เดŽเดจเตเดจเดพเตฝ เด‡เดคเต เด’เดฐเต เด…เดงเดฟเด• เดฑเดฟเด•เตเดฐเต‚เดŸเตเดŸเตเดฎเต†เดจเตเดฑเต เด†เดตเดถเตเดฏเด•เดคเดฏเดพเดฃเต, เดธเดพเดงเตเดฏเดฎเต†เด™เตเด•เดฟเตฝ เด‡เดคเต เด’เดดเดฟเดตเดพเด•เตเด•เดฃเดฎเต†เดจเตเดจเต เดคเต‹เดจเตเดจเดฟ. FDW (เดซเต‹เดฑเดฟเตป เดกเดพเดฑเตเดฑ เดฑเดพเดชเตเดชเตผ) เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพ เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต: เดตเดพเดธเตเดคเดตเดคเตเดคเดฟเตฝ, เด‡เดคเต เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ dblink เด†เดฃเต, เด‡เดคเต SQL เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเดฟเดฒเดพเดฃเต, เดŽเดจเตเดจเดพเตฝ เด•เต‚เดŸเตเดคเตฝ เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฏ เด‡เดจเตเดฑเตผเดซเต‡เดธเต. เด…เดคเดฟเดจเตเดฑเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดคเตเดคเดฟเตฝ, เดžเด™เตเด™เตพ เด’เดฐเต เดคเต€เดฐเตเดฎเดพเดจเดฎเต†เดŸเตเดคเตเดคเต, เด…เดคเต เด’เดŸเตเดตเดฟเตฝ เดตเต‡เดฐเต‚เดจเตเดจเดฟเดฏเดคเดพเดฃเต, เดžเด™เตเด™เตพ เด…เดคเดฟเตฝ เดธเตเดฅเดฟเดฐเดคเดพเดฎเดธเดฎเดพเด•เตเด•เดฟ. เด…เดคเดฟเดจเตเดฑเต† เดตเดฟเดถเดฆเดพเด‚เดถเด™เตเด™เตพ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดฒเต‡เด–เดจเดคเตเดคเดฟเดจเตเดฑเต† เดตเดฟเดทเดฏเดฎเดพเดฃเต, เด’เดฐเตเดชเด•เตเดทเต‡ เด’เดจเตเดจเดฟเตฝ เด•เต‚เดŸเตเดคเตฝ, เด•เดพเดฐเดฃเด‚ เดŽเดจเดฟเด•เตเด•เต เด’เดฐเตเดชเดพเดŸเต เด•เดพเดฐเตเดฏเด™เตเด™เตพ เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เดฃเด‚: เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดธเตเด•เต€เดฎ เดธเดฟเตปเด•เตเดฐเตŠเดฃเตˆเดธเต‡เดทเตป เดฎเตเดคเตฝ เดตเตเดฏเด•เตเดคเดฟเด—เดค เดกเดพเดฑเตเดฑเดฏเตเดŸเต† เด†เด•เตเดธเดธเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเดตเตเด‚ เดตเตเดฏเด•เตเดคเดฟเดตเตฝเด•เตเด•เดฐเดฃเดตเตเด‚ เดตเดฐเต†. เดˆ เดชเดฐเดฟเดนเดพเดฐเด‚ เดฏเดฅเดพเตผเดคเตเดฅ เด…เดจเดฒเดฟเดฑเตเดฑเดฟเด•เตเด•เตฝ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเด•เตพเด•เตเด•เตเด‚ เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเด•เตพเด•เตเด•เตเด‚ เดชเด•เดฐเดฎเดฒเตเดฒ, เด‡เดคเต เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดชเตเดฐเดถเตเดจเด‚ เดฎเดพเดคเตเดฐเดฎเต‡ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เต‚ เดŽเดจเตเดจเดคเตเด‚ เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดพเดฃเต.

เด‰เดฏเตผเดจเตเดจ เดคเดฒเดคเตเดคเดฟเตฝ เด‡เดคเต เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเดจเตเดจเต:

เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเต เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเดฑเดฟเดฒเต† เดชเตเดฐเดตเตผเดคเตเดคเดจ เดตเดฟเดถเด•เดฒเดจเด‚: เดธเดนเดพเดฏเดตเตเด‚ เดชเตเดฐเต‹เด‚เดชเตเดฑเตเดฑเตเด‚ Postgres FDW
เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพเด•เตเด•เต เด…เดตเดฐเตเดŸเต† เดตเตผเด•เตเด•เต เดกเดพเดฑเตเดฑ เดธเด‚เดญเดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เด’เดฐเต PostgreSQL เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เด‰เดฃเตเดŸเต, เดเดฑเตเดฑเดตเตเด‚ เดชเตเดฐเดงเดพเดจเดฎเดพเดฏเดฟ, เดŽเดฒเตเดฒเดพ เดธเต‡เดตเดจเด™เตเด™เดณเตเดŸเต†เดฏเตเด‚ เด…เดจเดฒเดฟเดฑเตเดฑเดฟเด•เตเด•เตฝ เดชเด•เตผเดชเตเดชเตเด•เตพ FDW เดตเดดเดฟ เดˆ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดคเต เดจเดฟเดฐเดตเดงเดฟ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดšเต‹เดฆเตเดฏเด‚ เดŽเดดเตเดคเตเดจเตเดจเดคเต เดธเดพเดงเตเดฏเดฎเดพเด•เตเด•เตเดจเตเดจเต, เด…เดคเต เดŽเดจเตเดคเดพเดฃเต†เดจเตเดจเดคเต เดชเตเดฐเดถเตเดจเดฎเดฒเตเดฒ: PostgreSQL, MySQL, MongoDB เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฎเดฑเตเดฑเต†เดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ (เดซเดฏเตฝ, API, เดชเต†เดŸเตเดŸเต†เดจเตเดจเต เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏ เดฑเดพเดชเตเดชเตผ เด‡เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดธเตเดตเดจเตเดคเดฎเดพเดฏเดฟ เดŽเดดเตเดคเดพเด‚). เดถเดฐเดฟ, เดŽเดฒเตเดฒเดพเด‚ เดฎเดฟเด•เดšเตเดšเดคเดพเดฃเต†เดจเตเดจเต เดคเต‹เดจเตเดจเตเดจเตเดจเต! เดชเดฟเดฐเดฟเดฏเตเด•?

เดŽเดฒเตเดฒเดพเด‚ เดตเดณเดฐเต† เดตเต‡เด—เดคเตเดคเดฟเดฒเตเด‚ เดฒเดณเดฟเดคเดฎเดพเดฏเตเด‚ เด…เดตเดธเดพเดจเดฟเดšเตเดšเต†เด™เตเด•เดฟเตฝ, เด’เดฐเตเดชเด•เตเดทเต‡, เดฒเต‡เด–เดจเด‚ เดจเดฟเดฒเดจเดฟเตฝเด•เตเด•เดฟเดฒเตเดฒ.

เดฑเดฟเดฎเต‹เดŸเตเดŸเต เดธเต†เตผเดตเดฑเตเด•เดณเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เดชเต‹เดธเตเดฑเตเดฑเตโ€Œเด—เตเดฐเต‡เดธเต เดŽเด™เตเด™เดจเต† เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต เดŽเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดตเตเดฏเด•เตเดคเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเต เดชเตเดฐเดงเดพเดจเดฎเดพเดฃเต. เด‡เดคเต เดฏเตเด•เตเดคเดฟเดธเดนเดฎเดพเดฃเต†เดจเตเดจเต เดคเต‹เดจเตเดจเตเดจเตเดจเต, เดชเด•เตเดทเต‡ เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เด†เดณเตเด•เตพ เด‡เดคเต เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ: เดชเต‹เดธเตเดฑเตเดฑเตเด—เตเดฐเต‡เดธเต เด…เดจเตเดตเต‡เดทเดฃเดคเตเดคเต† เดฑเดฟเดฎเต‹เดŸเตเดŸเต เดธเต†เตผเดตเดฑเตเด•เดณเดฟเตฝ เดธเตเดตเดคเดจเตเดคเตเดฐเดฎเดพเดฏเดฟ เดจเดฟเตผเดตเตเดตเดนเดฟเด•เตเด•เตเดจเตเดจ เดญเดพเด—เด™เตเด™เดณเดพเดฏเดฟ เดตเดฟเดญเดœเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดˆ เดกเดพเดฑเตเดฑ เดถเต‡เด–เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดจเตเดคเดฟเดฎ เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเดฒเตเด•เตพ เดจเดŸเดคเตเดคเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ เด…เดจเตเดตเต‡เดทเดฃ เดจเดฟเตผเดตเตเดตเดนเดฃ เดตเต‡เด—เดค เดŽเด™เตเด™เดจเต† เดŽเดจเตเดจเดคเดฟเดจเต† เด†เดถเตเดฐเดฏเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเด‚. เดŽเดดเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดคเต เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดพเดฃเต: เด’เดฐเต เดฑเดฟเดฎเต‹เดŸเตเดŸเต เดธเต†เตผเดตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดกเดพเดฑเตเดฑ เดตเดฐเตเดฎเตเดชเต‹เตพ, เด…เดตเดฏเตเด•เตเด•เต เด‡เดจเดฟ เดธเต‚เดšเดฟเด•เด•เตพ เด‡เดฒเตเดฒ, เดทเต†เดกเตเดฏเต‚เดณเดฑเต† เดธเดนเดพเดฏเดฟเด•เตเด•เตเดจเตเดจ เด’เดจเตเดจเตเด‚ เดคเดจเตเดจเต†เดฏเดฟเดฒเตเดฒ, เด…เดคเดฟเดจเดพเตฝ, เดžเด™เตเด™เตพเด•เตเด•เต เดฎเดพเดคเตเดฐเดฎเต‡ เดธเดนเดพเดฏเดฟเด•เตเด•เดพเดจเตเด‚ เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฟเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเต‚. เด…เดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เดพเตป เดžเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต.

เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเตเด‚ เด…เดคเดฟเดจเตŠเดชเตเดชเด‚ เด’เดฐเต เดชเตเดฒเดพเดจเตเด‚

เด’เดฐเต เดฑเดฟเดฎเต‹เดŸเตเดŸเต เดธเต†เตผเดตเดฑเดฟเตฝ Postgres 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

VERBOSE เดธเตเดฑเตเดฑเต‡เดฑเตเดฑเตโ€Œเดฎเต†เดจเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต เดฑเดฟเดฎเต‹เดŸเตเดŸเต เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เต เด…เดฏเดฏเตโ€Œเด•เตเด•เตเดจเตเดจ เด…เดจเตเดตเต‡เดทเดฃเดตเตเด‚ เดคเตเดŸเตผเดจเตเดจเตเดณเตเดณ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เดฟเดจเดพเดฏเดฟ เดžเด™เตเด™เตพเด•เตเด•เต เดฒเดญเดฟเด•เตเด•เตเดจเตเดจ เดซเดฒเด™เตเด™เดณเตเด‚ เด•เดพเดฃเดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต (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 เดฆเดถเดฒเด•เตเดทเด‚ เดตเดฐเดฟเด•เดณเตเด‚ เดตเดฒเดฟเด•เตเด•เตเดจเตเดจเต (เดซเดฟเตฝเดŸเตเดŸเตผ เดฒเตˆเตป) เดชเดฟเดจเตเดจเต€เดŸเต เด…เด—เตเดฐเด—เต‡เดทเตป เดจเดŸเดคเตเดคเตเดจเตเดจเต. เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ เดฑเดฟเดฎเต‹เดŸเตเดŸเต เดฎเต†เดทเต€เดจเดฟเดฒเต‡เด•เตเด•เต เด•เตˆเดฎเดพเดฑเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เด’เดฐเต เดšเต‹เดฆเตเดฏเด‚ เดŽเดดเตเดคเตเด• เดŽเดจเตเดจเดคเดพเดฃเต เดตเดฟเดœเดฏเดคเตเดคเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดคเดพเด•เตเด•เต‹เตฝ, เด†เดตเดถเตเดฏเดฎเดพเดฏ เดตเดฐเดฟเด•เตพ เดฎเดพเดคเตเดฐเด‚ เดžเด™เตเด™เตพ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เด…เดคเต เดšเดฟเดฒ เดฌเต‚เดฒเดฟเดฏเตปเดทเดฟเดฑเตเดฑเต เด†เดฃเต

เดฌเต‚เดณเดฟเดฏเตป เดซเต€เตฝเดกเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดŽเดฒเตเดฒเดพเด‚ เดฒเดณเดฟเดคเดฎเดพเดฃเต. เดฏเดฅเดพเตผเดคเตเดฅ เด…เดจเตเดตเต‡เดทเดฃเดคเตเดคเดฟเตฝ, เดชเตเดฐเดถเตเดจเด‚ เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเตผ เด•เดพเดฐเดฃเดฎเดพเดฃเต 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 เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฃเต = เดจเตพ เดฎเต‚เดฒเตเดฏเดคเตเดคเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เด’เดจเตเดจเต. เด…เดคเดฟเดจเตผเดคเตเดฅเด‚ เด…เดคเดพเดฃเต เดธเดคเตเดฏเดฎเดฒเตเดฒ เดซเดฟเตฝเดŸเตเดŸเดฑเดฟเตฝ False, Null เดŽเดจเตเดจเต€ เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เด…เดตเดถเต‡เดทเดฟเดชเตเดชเดฟเด•เตเด•เตเด‚ != เดถเดฐเดฟเดฏเดพเดฃเต เดคเต†เดฑเตเดฑเดพเดฏ เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เดฎเดพเดคเตเดฐเด‚ เด…เดตเดถเต‡เดทเดฟเดชเตเดชเดฟเด•เตเด•เตเด‚. เด…เดคเดฟเดจเดพเตฝ, เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเดฑเต† เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เด…เดฒเตเดฒ เดจเดฟเด™เตเด™เตพ OR เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเดฑเตเดฎเดพเดฏเดฟ เดซเดฟเตฝเดŸเตเดŸเดฑเดฟเดฒเต‡เด•เตเด•เต เดฐเดฃเตเดŸเต เดจเดฟเดฌเดจเตเดงเดจเด•เตพ เดจเตฝเด•เดฃเด‚, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดŽเดตเดฟเดŸเต† (เด•เต‹เตพ != เดถเดฐเดฟ) เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ (เด•เต‹เตพ เด…เดธเดพเดงเตเดตเดพเดฃเต).

เดฌเต‚เดณเดฟเดฏเตป เด•เดฃเตเดŸเตเดชเดฟเดŸเดฟเดšเตเดšเตเด•เตŠเดฃเตเดŸเต, เดฎเตเดจเตเดจเต‹เดŸเตเดŸเต. เด…เดคเดฟเดจเดฟเดŸเดฏเดฟเตฝ, เดฎเดฑเตเดฑเต เดฎเดพเดฑเตเดฑเด™เตเด™เดณเตเดŸเต† เดซเดฒเด‚ เดธเตเดตเดคเดจเตเดคเตเดฐเดฎเดพเดฏเดฟ เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดฌเต‚เดณเดฟเดฏเตป เดฎเต‚เดฒเตเดฏเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดซเดฟเตฝเดŸเตเดŸเดฑเดฟเดจเต† เด…เดคเดฟเดจเตเดฑเต† เดฏเดฅเดพเตผเดคเตเดฅ เดฐเต‚เดชเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เดพเด‚.

timestanptz? hz

เดชเตŠเดคเตเดตเต‡, เดตเดฟเดฆเต‚เดฐ เดธเต†เตผเดตเดฑเตเด•เตพ เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจ เด’เดฐเต เดšเต‹เดฆเตเดฏเด‚ เดŽเด™เตเด™เดจเต† เดถเดฐเดฟเดฏเดพเดฏเดฟ เดŽเดดเตเดคเดพเดฎเต†เดจเตเดจเต เดจเดฟเด™เตเด™เตพ เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต, เด…เดคเดฟเดจเตเดถเต‡เดทเด‚ เดฎเดพเดคเตเดฐเดฎเต‡ เด‡เดคเต เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเดคเต†เดจเตเดจเดคเดฟเดจเตเดฑเต† เดตเดฟเดถเดฆเต€เด•เดฐเดฃเดคเตเดคเดฟเดจเดพเดฏเดฟ เดจเต‹เด•เตเด•เตเด•. เด‡เดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดตเดณเดฐเต† เด•เตเดฑเดšเตเดšเต เดตเดฟเดตเดฐเด™เตเด™เตพ เดฎเดพเดคเตเดฐเดฎเต‡ เด‡เดจเตเดฑเตผเดจเต†เดฑเตเดฑเดฟเตฝ เด•เดฃเตเดŸเต†เดคเตเดคเดพเตป เด•เดดเดฟเดฏเต‚. เด…เดคเดฟเดจเดพเตฝ, เดชเดฐเต€เด•เตเดทเดฃเด™เตเด™เดณเดฟเตฝ, เด’เดฐเต เดจเดฟเดถเตเดšเดฟเดค เดคเต€เดฏเดคเดฟ เดซเดฟเตฝเดŸเตเดŸเตผ เดฌเด‚เด—เตเดฒเดพเดตเต‹เดŸเต† เด’เดฐเต เดฑเดฟเดฎเต‹เดŸเตเดŸเต เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เต เดชเดฑเด•เตเด•เตเดจเตเดจเดคเดพเดฏเดฟ เดžเด™เตเด™เตพ เด•เดฃเตเดŸเต†เดคเตเดคเดฟ, เดชเด•เตเดทเต‡ เดจเดฎเตเด•เตเด•เต เดกเตˆเดจเดพเดฎเดฟเด•เต เด†เดฏเดฟ เดคเต€เดฏเดคเดฟ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เดฃเดฎเต†เด™เตเด•เดฟเตฝ, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, now() เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ CURRENT_DATE, เด‡เดคเต เดธเด‚เดญเดตเดฟเด•เตเด•เดฟเดฒเตเดฒ. เดžเด™เตเด™เดณเตเดŸเต† เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ, เดžเด™เตเด™เตพ เด’เดฐเต เดซเดฟเตฝเดŸเตเดŸเตผ เดšเต‡เตผเดคเตเดคเดคเดฟเดจเดพเตฝ, Create_at เด•เต‹เดณเดคเตเดคเดฟเตฝ เดฎเตเดฎเตเดชเต เด•เตƒเดคเตเดฏเด‚ 1 เดฎเดพเดธเดคเตเดคเต† เดกเดพเดฑเตเดฑ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต (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 เดฎเดŸเด™เตเด™เต เดตเต‡เด—เดคเตเดคเดฟเดฒเดพเดฏเดฟ!

เดตเต€เดฃเตเดŸเตเด‚, เด‡เดตเดฟเดŸเต† เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเต เดชเตเดฐเดงเดพเดจเดฎเดพเดฃเต: เดธเดฌเตเด•เตเดตเดฑเดฟเดฏเดฟเดฒเต† เดกเดพเดฑเตเดฑ เดคเดฐเด‚ เดžเด™เตเด™เตพ เดซเดฟเตฝเดŸเตเดŸเตผ เดšเต†เดฏเตเดฏเตเดจเตเดจ เดซเต€เตฝเดกเดฟเดจเต เดคเตเดฒเตเดฏเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚, เด…เดฒเตเดฒเดพเดคเตเดคเดชเด•เตเดทเด‚ เดคเดฐเด™เตเด™เตพ เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏเดคเดฟเดจเดพเตฝ เด†เดฆเตเดฏเด‚ เดŽเดฒเตเดฒเดพเด‚ เดจเต‡เดŸเต‡เดฃเตเดŸเดคเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต†เดจเตเดจเต เดชเตเดฒเดพเดจเตผ เดคเต€เดฐเตเดฎเดพเดจเดฟเด•เตเด•เตเด‚. เดกเดพเดฑเตเดฑ เดชเตเดฐเดพเดฆเต‡เดถเดฟเด•เดฎเดพเดฏเดฟ เดซเดฟเตฝเดŸเตเดŸเตผ เดšเต†เดฏเตเดฏเตเด•.

เดคเต€เดฏเดคเดฟ เดชเตเดฐเด•เดพเดฐเด‚ เดซเดฟเตฝเดŸเตเดŸเตผ เด…เดคเดฟเดจเตเดฑเต† เดฏเดฅเดพเตผเดคเตเดฅ เดฎเต‚เดฒเตเดฏเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เดพเด‚.

เดซเตเดฐเต†เดกเดฟ vs. jsonb

เดชเตŠเดคเตเดตเต‡, เดฌเต‚เดณเดฟเดฏเตป เดซเต€เตฝเดกเตเด•เดณเตเด‚ เดคเต€เดฏเดคเดฟเด•เดณเตเด‚ เด‡เดคเดฟเดจเด•เด‚ เดคเดจเตเดจเต† เดžเด™เตเด™เดณเตเดŸเต† เด…เดจเตเดตเต‡เดทเดฃเดคเตเดคเต† เดคเตเดตเดฐเดฟเดคเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต, เดŽเดจเตเดจเดพเตฝ เด’เดฐเต เดกเดพเดฑเตเดฑ เดคเดฐเด‚ เด•เต‚เดŸเดฟ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเต. เด‡เดตเดฟเดŸเต†เดฏเตเด‚ เดตเดฟเดœเดฏเด™เตเด™เตพ เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเดฒเตเด‚, เดธเดคเตเดฏเดธเดจเตเดงเดฎเดพเดฏเดฟ เดชเดฑเดžเตเดžเดพเตฝ, เด…เดคเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดซเดฟเตฝเดŸเตเดŸเดฑเดฟเด‚เด—เต เดจเดŸเดคเตเดคเตเดจเตเดจ เดชเต‹เดฐเดพเดŸเตเดŸเด‚ เด‡เดชเตเดชเต‹เดดเตเด‚ เด…เดตเดธเดพเดจเดฟเดšเตเดšเดฟเดŸเตเดŸเดฟเดฒเตเดฒ. เด…เดคเดฟเดจเดพเตฝ, เดซเดฟเตฝเดŸเตเดŸเตผ เด•เดŸเดจเตเดจเตเดชเต‹เด•เดพเตป เดžเด™เตเด™เตพเด•เตเด•เต เดŽเด™เตเด™เดจเต† เด•เดดเดฟเดžเตเดžเตเดตเต†เดจเตเดจเดคเต เด‡เดคเดพ 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

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•