แƒแƒžแƒ”แƒ แƒแƒขแƒ˜แƒฃแƒšแƒ˜ แƒแƒœแƒแƒšแƒ˜แƒขแƒ˜แƒ™แƒ แƒ›แƒ˜แƒ™แƒ แƒแƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒแƒจแƒ˜: แƒ“แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ แƒ“แƒ แƒ›แƒแƒฌแƒแƒ“แƒ”แƒ‘แƒ Postgres FDW

แƒ›แƒ˜แƒ™แƒ แƒแƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒแƒก, แƒ˜แƒกแƒ”แƒ•แƒ” แƒ แƒแƒ’แƒแƒ แƒช แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒก แƒแƒ› แƒกแƒแƒ›แƒงแƒแƒ แƒแƒจแƒ˜, แƒแƒฅแƒ•แƒก แƒ—แƒแƒ•แƒ˜แƒกแƒ˜ แƒ“แƒแƒ“แƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ“แƒ แƒฃแƒแƒ แƒงแƒแƒคแƒ˜แƒ—แƒ˜ แƒ›แƒฎแƒแƒ แƒ”แƒ”แƒ‘แƒ˜. แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒฃแƒคแƒ แƒ แƒแƒ“แƒ•แƒ˜แƒšแƒ˜ แƒฎแƒ“แƒ”แƒ‘แƒ, แƒ–แƒแƒ’แƒ˜ แƒฃแƒคแƒ แƒ แƒ แƒ—แƒฃแƒšแƒ˜. แƒ“แƒ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ˜แƒกแƒ แƒ“แƒ แƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒ˜ แƒ›แƒแƒกแƒจแƒขแƒแƒ‘แƒฃแƒ แƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ˜แƒฆแƒแƒ— แƒ›แƒกแƒฎแƒ•แƒ”แƒ แƒžแƒšแƒ˜. แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ แƒ›แƒแƒ—แƒ’แƒแƒœแƒ˜แƒ แƒแƒœแƒแƒšแƒ˜แƒขแƒ˜แƒ™แƒ˜แƒก แƒกแƒ˜แƒ แƒ—แƒฃแƒšแƒ”. แƒ—แƒฃ แƒ›แƒแƒœแƒแƒšแƒ˜แƒ—แƒจแƒ˜ แƒงแƒ•แƒ”แƒšแƒ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒฃแƒšแƒ˜ แƒแƒœแƒแƒšแƒ˜แƒขแƒ˜แƒ™แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒ›แƒชแƒ˜แƒ แƒ“แƒ”แƒก SQL แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ–แƒ” แƒแƒœแƒแƒšแƒ˜แƒขแƒ˜แƒ™แƒฃแƒ  แƒ แƒ”แƒžแƒšแƒ˜แƒ™แƒแƒ›แƒ“แƒ”, แƒ›แƒแƒจแƒ˜แƒœ แƒ›แƒฃแƒšแƒขแƒ˜แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒแƒจแƒ˜ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒš แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒก แƒแƒฅแƒ•แƒก แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ แƒ“แƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒ”แƒ แƒ—แƒ˜ แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜ (แƒแƒœ แƒ˜แƒฅแƒœแƒ”แƒ‘ แƒ”แƒก แƒ˜แƒงแƒแƒก?). แƒ•แƒ˜แƒกแƒแƒช แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒก, แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ”แƒ— แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒฃแƒšแƒ˜ แƒแƒœแƒแƒšแƒ˜แƒขแƒ˜แƒ™แƒ˜แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒฉแƒ•แƒ”แƒœแƒก แƒ™แƒแƒ›แƒžแƒแƒœแƒ˜แƒแƒจแƒ˜ แƒ“แƒ แƒ แƒแƒ’แƒแƒ  แƒ•แƒ˜แƒกแƒฌแƒแƒ•แƒšแƒ”แƒ— แƒแƒ› แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒ— แƒชแƒฎแƒแƒ•แƒ แƒ”แƒ‘แƒ - แƒ›แƒแƒ’แƒ”แƒกแƒแƒšแƒ›แƒ”แƒ‘แƒ˜แƒ—.

แƒแƒžแƒ”แƒ แƒแƒขแƒ˜แƒฃแƒšแƒ˜ แƒแƒœแƒแƒšแƒ˜แƒขแƒ˜แƒ™แƒ แƒ›แƒ˜แƒ™แƒ แƒแƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒแƒจแƒ˜: แƒ“แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ แƒ“แƒ แƒ›แƒแƒฌแƒแƒ“แƒ”แƒ‘แƒ Postgres FDW
แƒ›แƒ” แƒ›แƒฅแƒ•แƒ˜แƒ แƒžแƒแƒ•แƒ”แƒš แƒกแƒ˜แƒ•แƒแƒจแƒ˜, DomClick-แƒจแƒ˜ แƒ•แƒ›แƒฃแƒจแƒแƒแƒ‘ แƒ’แƒฃแƒœแƒ“แƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒกแƒ›แƒ’แƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒแƒœแƒแƒšแƒ˜แƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒกแƒแƒฌแƒงแƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒœแƒแƒ แƒฉแƒฃแƒœแƒ”แƒ‘แƒแƒ–แƒ”. แƒžแƒ˜แƒ แƒแƒ‘แƒ˜แƒ—แƒแƒ“, แƒฉแƒ•แƒ”แƒœแƒ˜ แƒกแƒแƒฅแƒ›แƒ˜แƒแƒœแƒแƒ‘แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒ˜แƒ•แƒแƒฌแƒ”แƒ แƒแƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ˜แƒœแƒŸแƒ˜แƒœแƒ”แƒ แƒ˜แƒแƒก, แƒ›แƒแƒ’แƒ แƒแƒ›, แƒคแƒแƒฅแƒขแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“, แƒแƒ›แƒแƒชแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒกแƒžแƒ”แƒฅแƒขแƒ แƒ˜ แƒ’แƒแƒชแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ— แƒคแƒแƒ แƒ—แƒแƒ. แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒกแƒแƒ˜แƒœแƒŸแƒ˜แƒœแƒ แƒ ETL / ELT, แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜แƒก แƒฎแƒ”แƒšแƒกแƒแƒฌแƒงแƒแƒ”แƒ‘แƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ แƒ“แƒ แƒแƒ“แƒแƒžแƒขแƒแƒชแƒ˜แƒ แƒ“แƒ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒฎแƒ”แƒšแƒกแƒแƒฌแƒงแƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ. แƒ™แƒ”แƒ แƒซแƒแƒ“, แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒฃแƒšแƒ˜ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ’แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ”แƒ— โ€žแƒ—แƒแƒ•แƒ˜ แƒ’แƒแƒ›แƒแƒ’แƒ•แƒ”แƒฉแƒ˜แƒœแƒโ€œ, แƒ แƒแƒ› แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒ›แƒแƒœแƒแƒšแƒ˜แƒ—แƒ˜ แƒ“แƒ แƒแƒœแƒแƒšแƒ˜แƒขแƒ˜แƒ™แƒแƒกแƒ”แƒ‘แƒก แƒ›แƒ˜แƒ•แƒชแƒ”แƒ— แƒ”แƒ แƒ—แƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒงแƒ•แƒ”แƒšแƒ แƒกแƒแƒญแƒ˜แƒ แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒก.

แƒ–แƒแƒ’แƒแƒ“แƒแƒ“, แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ”แƒ‘แƒ˜. แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ˜แƒงแƒ แƒกแƒ แƒฃแƒšแƒคแƒแƒกแƒแƒ•แƒแƒœแƒ˜ แƒกแƒแƒชแƒแƒ•แƒ˜แƒก แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒ - แƒฉแƒ•แƒ”แƒœ แƒ™แƒ˜ แƒ•แƒชแƒแƒ“แƒ”แƒ—, แƒ›แƒแƒ’แƒ แƒแƒ›, แƒ›แƒแƒ แƒ—แƒแƒšแƒ˜ แƒ’แƒ˜แƒ—แƒฎแƒ แƒแƒ—, แƒšแƒแƒ’แƒ˜แƒ™แƒ˜แƒก แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒฎแƒจแƒ˜แƒ แƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒ— แƒ•แƒ”แƒ  แƒ“แƒแƒ•แƒ›แƒ”แƒ’แƒแƒ‘แƒ แƒ“แƒ˜แƒ— แƒกแƒแƒชแƒแƒ•แƒ˜แƒก แƒแƒ’แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ›แƒแƒกแƒจแƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒขแƒแƒœแƒ˜แƒก แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒœแƒ”แƒšแƒ˜ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒ— ( แƒ—แƒฃ แƒ•แƒ˜แƒœแƒ›แƒ”แƒ› แƒ›แƒ˜แƒแƒฆแƒฌแƒ˜แƒ แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒแƒก, แƒ“แƒแƒฌแƒ”แƒ แƒ”แƒ— แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ”แƒ‘แƒจแƒ˜ แƒ แƒแƒ’แƒแƒ ). แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ”แƒ—แƒฅแƒ•แƒแƒ— แƒแƒœแƒแƒšแƒ˜แƒขแƒ˜แƒ™แƒแƒกแƒ”แƒ‘แƒก: โ€แƒ‘แƒ˜แƒญแƒ”แƒ‘แƒ, แƒ˜แƒกแƒฌแƒแƒ•แƒšแƒ”แƒ— แƒžแƒ˜แƒ—แƒแƒœแƒ˜ แƒ“แƒ แƒ’แƒแƒ“แƒแƒ“แƒ˜แƒ— แƒแƒœแƒแƒšแƒ˜แƒขแƒ˜แƒ™แƒฃแƒ  แƒฎแƒแƒ–แƒ”แƒ‘แƒ–แƒ”โ€, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ“แƒแƒฅแƒ˜แƒ แƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒ“แƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒ”แƒก แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒฃแƒœแƒ“แƒ แƒ˜แƒฅแƒœแƒแƒก แƒแƒชแƒ˜แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜, แƒ—แƒฃ แƒ”แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ. แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ”แƒ— FDW (Foreign Data Wrapper) แƒขแƒ”แƒฅแƒœแƒแƒšแƒแƒ’แƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ: แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜, แƒ”แƒก แƒแƒ แƒ˜แƒก แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒšแƒ˜ dblink, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ แƒ˜แƒก SQL แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒจแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ˜แƒกแƒ˜ แƒ‘แƒ”แƒ•แƒ แƒแƒ“ แƒฃแƒคแƒ แƒ แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜แƒ—. แƒแƒ›แƒ˜แƒก แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ–แƒ” แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒ”แƒ— แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ›แƒแƒช แƒกแƒแƒ‘แƒแƒšแƒแƒแƒ“ แƒคแƒ”แƒกแƒ•แƒ˜ แƒ’แƒแƒ˜แƒ“แƒ’แƒ, แƒ“แƒแƒ•แƒ—แƒแƒœแƒฎแƒ›แƒ“แƒ˜แƒ—. แƒ›แƒ˜แƒกแƒ˜ แƒ“แƒ”แƒขแƒแƒšแƒ”แƒ‘แƒ˜ แƒชแƒแƒšแƒ™แƒ” แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก แƒ—แƒ”แƒ›แƒแƒ แƒ“แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒแƒ แƒ”แƒ แƒ—แƒ–แƒ” แƒ›แƒ”แƒขแƒ˜แƒช, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ›แƒ˜แƒœแƒ“แƒ แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒ แƒ‘แƒ”แƒ•แƒ แƒ–แƒ”: แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒกแƒฅแƒ”แƒ›แƒ˜แƒก แƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒกแƒ’แƒแƒœ แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒžแƒ”แƒ แƒกแƒแƒœแƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒแƒ›แƒ“แƒ” แƒ“แƒ แƒ“แƒ”แƒžแƒ”แƒ แƒกแƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒแƒ›แƒ“แƒ”. แƒแƒฅแƒ•แƒ” แƒฃแƒœแƒ“แƒ แƒแƒฆแƒ˜แƒœแƒ˜แƒจแƒœแƒแƒก, แƒ แƒแƒ› แƒ”แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ แƒ”แƒแƒšแƒฃแƒ แƒ˜ แƒแƒœแƒแƒšแƒ˜แƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒกแƒแƒชแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒœแƒแƒชแƒ•แƒšแƒ”แƒ‘แƒ, แƒ˜แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒš แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒแƒก แƒฌแƒงแƒ•แƒ”แƒขแƒก.

แƒฃแƒ›แƒแƒฆแƒšแƒ”แƒก แƒ“แƒแƒœแƒ”แƒ–แƒ” แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ:

แƒแƒžแƒ”แƒ แƒแƒขแƒ˜แƒฃแƒšแƒ˜ แƒแƒœแƒแƒšแƒ˜แƒขแƒ˜แƒ™แƒ แƒ›แƒ˜แƒ™แƒ แƒแƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒแƒจแƒ˜: แƒ“แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ แƒ“แƒ แƒ›แƒแƒฌแƒแƒ“แƒ”แƒ‘แƒ Postgres FDW
แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก PostgreSQL แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ, แƒกแƒแƒ“แƒแƒช แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒแƒ— แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒแƒœ แƒ—แƒแƒ•แƒ˜แƒแƒœแƒ—แƒ˜ แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ แƒแƒช แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜แƒ, แƒงแƒ•แƒ”แƒšแƒ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ แƒ”แƒžแƒšแƒ˜แƒ™แƒ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒแƒ› แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒกแƒ—แƒแƒœ FDW-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—. แƒ”แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒก แƒฎแƒ“แƒ˜แƒก แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒแƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜ แƒ“แƒ แƒแƒ  แƒแƒฅแƒ•แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒ แƒ แƒแƒ แƒ˜แƒก แƒ”แƒก: PostgreSQL, MySQL, MongoDB แƒ—แƒฃ แƒกแƒฎแƒ•แƒ แƒ แƒแƒ› (แƒคแƒแƒ˜แƒšแƒ˜, API, แƒ—แƒฃ แƒ›แƒแƒฃแƒšแƒแƒ“แƒœแƒ”แƒšแƒแƒ“ แƒแƒ  แƒแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒคแƒ”แƒ แƒ˜แƒกแƒ˜ แƒจแƒ”แƒคแƒฃแƒ—แƒ•แƒ, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜). แƒ˜แƒกแƒ”, แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ›แƒจแƒ•แƒ”แƒœแƒ˜แƒ”แƒ แƒ˜แƒ! แƒ“แƒแƒจแƒแƒ แƒ”แƒ‘แƒ?

แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒแƒกแƒ” แƒกแƒฌแƒ แƒแƒคแƒแƒ“ แƒ“แƒ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒแƒ“ แƒ แƒแƒ› แƒ“แƒแƒ›แƒ—แƒแƒ•แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒงแƒ, แƒ›แƒแƒจแƒ˜แƒœ, แƒแƒšแƒ‘แƒแƒ—, แƒกแƒขแƒแƒขแƒ˜แƒ แƒแƒ  แƒ˜แƒแƒ แƒกแƒ”แƒ‘แƒ”แƒ‘แƒ“แƒ.

แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜แƒ แƒ˜แƒ›แƒ˜แƒก แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒ•แƒ, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒก แƒžแƒแƒกแƒขแƒ’แƒ แƒ”แƒกแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒก แƒ“แƒ˜แƒกแƒขแƒแƒœแƒชแƒ˜แƒฃแƒ  แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ–แƒ”. แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒ”แƒก แƒšแƒแƒ’แƒ˜แƒ™แƒฃแƒ แƒ˜แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒแƒ“แƒแƒ›แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜ แƒแƒ›แƒแƒก แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒแƒก แƒแƒ  แƒแƒฅแƒชแƒ”แƒ•แƒ”แƒœ: postgres แƒงแƒแƒคแƒก แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒแƒก แƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒแƒ“, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒšแƒแƒ“ แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒ‘แƒ แƒ“แƒ˜แƒกแƒขแƒแƒœแƒชแƒ˜แƒฃแƒ  แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ–แƒ”, แƒแƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒก แƒแƒ› แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก แƒ“แƒ แƒ—แƒแƒ•แƒแƒ“ แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒก แƒกแƒแƒ‘แƒแƒšแƒแƒ แƒ’แƒแƒ›แƒแƒ—แƒ•แƒšแƒ”แƒ‘แƒก, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ” แƒ“แƒ˜แƒ“แƒแƒ“ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒ›แƒแƒ–แƒ”, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ”แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜แƒ. แƒแƒฅแƒ•แƒ” แƒฃแƒœแƒ“แƒ แƒแƒฆแƒ˜แƒœแƒ˜แƒจแƒœแƒแƒก: แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒ“แƒ˜แƒกแƒขแƒแƒœแƒชแƒ˜แƒฃแƒ แƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒ“แƒแƒœ แƒ›แƒแƒ“แƒ˜แƒก, แƒ›แƒแƒ— แƒแƒฆแƒแƒ  แƒแƒฅแƒ•แƒ— แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ”แƒ‘แƒ˜, แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒแƒ แƒแƒคแƒ”แƒ แƒ˜, แƒ แƒแƒช แƒฎแƒ”แƒšแƒก แƒจแƒ”แƒฃแƒฌแƒงแƒแƒ‘แƒก แƒ’แƒแƒœแƒ แƒ˜แƒ’แƒก, แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“, แƒ›แƒฎแƒแƒšแƒแƒ“ แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ“แƒแƒ’แƒ”แƒฎแƒ›แƒแƒ แƒแƒ— แƒ“แƒ แƒจแƒ”แƒ›แƒแƒ’แƒ—แƒแƒ•แƒแƒ–แƒแƒ— แƒ˜แƒ’แƒ˜. แƒ“แƒ แƒกแƒฌแƒแƒ แƒ”แƒ“ แƒแƒ›แƒแƒ–แƒ” แƒ›แƒ˜แƒœแƒ“แƒ แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒ แƒฃแƒคแƒ แƒ แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ แƒแƒ“.

แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒ“แƒ แƒ’แƒ”แƒ’แƒ›แƒ แƒ›แƒแƒกแƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“

แƒ˜แƒ›แƒ˜แƒก แƒกแƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ˜แƒ—แƒฎแƒแƒ•แƒก 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 string).

แƒ›แƒแƒ“แƒ˜แƒ— แƒฌแƒแƒ•แƒ˜แƒ“แƒ”แƒ— แƒชแƒแƒขแƒ แƒฃแƒคแƒ แƒ แƒฌแƒ˜แƒœ แƒ“แƒ แƒ“แƒแƒ•แƒแƒ›แƒแƒขแƒแƒ— แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒคแƒ˜แƒšแƒขแƒ แƒ˜ แƒฉแƒ•แƒ”แƒœแƒก แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒแƒก: แƒ”แƒ แƒ—แƒ˜ แƒšแƒแƒ’แƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ•แƒ”แƒšแƒ˜, แƒ”แƒ แƒ—แƒ˜ แƒจแƒ”แƒกแƒ•แƒšแƒ˜แƒ— แƒœแƒ˜แƒจแƒœแƒฃแƒšแƒ˜แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒ•แƒแƒšแƒ˜แƒ— แƒ“แƒ แƒ”แƒ แƒ—แƒ˜แƒ— 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

แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ˜แƒก แƒ›แƒแƒ›แƒ”แƒœแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ แƒฃแƒœแƒ“แƒ แƒ›แƒ˜แƒแƒฅแƒชแƒ˜แƒแƒ— แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒ‘แƒ˜แƒก แƒฌแƒ”แƒ แƒ˜แƒกแƒแƒก. แƒคแƒ˜แƒšแƒขแƒ แƒ”แƒ‘แƒ˜ แƒแƒ  แƒ˜แƒงแƒ แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ แƒ“แƒ˜แƒกแƒขแƒแƒœแƒชแƒ˜แƒฃแƒ  แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”, แƒ แƒแƒช แƒ˜แƒ›แƒแƒก แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก, แƒ แƒแƒ› แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒšแƒแƒ“, postgres แƒ˜แƒญแƒ”แƒ แƒก แƒงแƒ•แƒ”แƒšแƒ 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 แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ“แƒ”แƒ‘แƒ แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜แƒกแƒ’แƒแƒœ = แƒ˜แƒก, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ Null แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒ—. แฒ”แƒก แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก, แƒ แƒแƒ› แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒ˜แƒ›แƒแƒ แƒ—แƒšแƒ” แƒคแƒ˜แƒšแƒขแƒ แƒจแƒ˜ แƒ“แƒแƒขแƒแƒ•แƒ”แƒ‘แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒก False แƒ“แƒ Null, แƒฎแƒแƒšแƒ != แƒ›แƒแƒ แƒ—แƒแƒšแƒ˜แƒ แƒ“แƒแƒขแƒแƒ•แƒ”แƒ‘แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒชแƒ แƒฃ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒก. แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒกแƒแƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ“แƒแƒกแƒชแƒ”แƒ— แƒคแƒ˜แƒšแƒขแƒ แƒก แƒแƒ แƒ˜ แƒžแƒ˜แƒ แƒแƒ‘แƒ OR แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜แƒ—, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, WHERE (col != True) OR (col แƒแƒ แƒ˜แƒก null).

แƒšแƒแƒ’แƒ˜แƒ™แƒฃแƒ แƒแƒ“ แƒ’แƒแƒแƒ–แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜, แƒ’แƒแƒ“แƒแƒ“แƒ˜แƒก. แƒ˜แƒ›แƒแƒ•แƒ“แƒ แƒแƒฃแƒšแƒแƒ“, แƒ“แƒแƒ•แƒฃแƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ— แƒคแƒ˜แƒšแƒขแƒ แƒก แƒšแƒแƒ’แƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒ— แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒคแƒแƒ แƒ›แƒแƒจแƒ˜, แƒ แƒแƒ—แƒ แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒšแƒแƒ“ แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ— แƒกแƒฎแƒ•แƒ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ”แƒคแƒ”แƒฅแƒขแƒ˜.

timestamptz? แƒฐแƒช

แƒ–แƒแƒ’แƒแƒ“แƒแƒ“, แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒ’แƒ˜แƒฌแƒ”แƒ•แƒ— แƒ”แƒฅแƒกแƒžแƒ”แƒ แƒ˜แƒ›แƒ”แƒœแƒขแƒ˜ แƒ˜แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒกแƒฌแƒแƒ แƒแƒ“ แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒแƒ˜แƒชแƒแƒ•แƒก แƒ“แƒ˜แƒกแƒขแƒแƒœแƒชแƒ˜แƒฃแƒ  แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒก แƒ“แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ›แƒแƒซแƒ”แƒ‘แƒœแƒแƒ— แƒแƒฎแƒกแƒœแƒ, แƒ—แƒฃ แƒ แƒแƒขแƒแƒ› แƒฎแƒ“แƒ”แƒ‘แƒ แƒ”แƒก. แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒซแƒแƒšแƒ˜แƒแƒœ แƒชแƒแƒขแƒ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒ›แƒแƒ˜แƒซแƒ”แƒ‘แƒœแƒ”แƒ‘แƒ แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒขแƒจแƒ˜. แƒแƒกแƒ” แƒ แƒแƒ›, แƒ”แƒฅแƒกแƒžแƒ”แƒ แƒ˜แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒจแƒ˜ แƒแƒฆแƒ›แƒแƒ•แƒแƒฉแƒ˜แƒœแƒ”แƒ—, แƒ แƒแƒ› แƒคแƒ˜แƒฅแƒกแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ—แƒแƒ แƒ˜แƒฆแƒ˜แƒก แƒคแƒ˜แƒšแƒขแƒ แƒ˜ แƒแƒคแƒ”แƒ—แƒฅแƒ”แƒ‘แƒ˜แƒ— แƒ›แƒ˜แƒคแƒ แƒ˜แƒœแƒแƒ•แƒก แƒ“แƒ˜แƒกแƒขแƒแƒœแƒชแƒ˜แƒฃแƒ  แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ’แƒ•แƒ˜แƒœแƒ“แƒ แƒ—แƒแƒ แƒ˜แƒฆแƒ˜แƒก แƒ“แƒ˜แƒœแƒแƒ›แƒ˜แƒฃแƒ แƒแƒ“ แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, now() แƒแƒœ CURRENT_DATE, แƒ”แƒก แƒแƒ  แƒฎแƒ“แƒ”แƒ‘แƒ. แƒฉแƒ•แƒ”แƒœแƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜ แƒ“แƒแƒ•แƒแƒ›แƒแƒขแƒ”แƒ— แƒคแƒ˜แƒšแƒขแƒ แƒ˜ แƒ˜แƒกแƒ”, แƒ แƒแƒ› แƒกแƒ•แƒ”แƒขแƒ˜ create_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-แƒฏแƒ”แƒ  แƒฃแƒคแƒ แƒ แƒกแƒฌแƒ แƒแƒคแƒ˜ แƒ’แƒแƒฎแƒ“แƒ!

แƒแƒฅ แƒ™แƒ•แƒšแƒแƒ• แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜แƒ แƒกแƒ˜แƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”: แƒฅแƒ•แƒ”แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒแƒจแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒขแƒ˜แƒžแƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒ˜แƒ’แƒ˜แƒ•แƒ”, แƒ แƒแƒช แƒ˜แƒ› แƒ•แƒ”แƒšแƒ˜แƒก, แƒ แƒแƒ›แƒšแƒ˜แƒ—แƒแƒช แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ•แƒคแƒ˜แƒšแƒขแƒ แƒแƒ•แƒ—, แƒฌแƒ˜แƒœแƒแƒแƒฆแƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ“แƒแƒ›แƒ’แƒ”แƒ’แƒ›แƒแƒ•แƒ˜ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒก, แƒ แƒแƒ› แƒ แƒแƒ“แƒ’แƒแƒœ แƒขแƒ˜แƒžแƒ”แƒ‘แƒ˜ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ“แƒ แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ แƒ˜แƒ’แƒจแƒ˜ แƒฃแƒœแƒ“แƒ แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒแƒ— แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ’แƒแƒคแƒ˜แƒšแƒขแƒ แƒ”แƒ— แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒแƒ“แƒ’แƒ˜แƒšแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“.

แƒ“แƒแƒ•แƒฃแƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ— แƒคแƒ˜แƒšแƒขแƒ แƒก แƒ—แƒแƒ แƒ˜แƒฆแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒ›แƒ“แƒ”.

แƒคแƒ แƒ”แƒ“แƒ˜ 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-แƒฏแƒ”แƒ  แƒฃแƒคแƒ แƒ แƒกแƒฌแƒ แƒแƒคแƒ˜แƒ! แƒ“แƒ แƒฉแƒ•แƒ”แƒœ แƒ•แƒกแƒแƒฃแƒ‘แƒ แƒแƒ‘แƒ— แƒ›แƒแƒ แƒขแƒ˜แƒ• แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒแƒ–แƒ” แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ˜แƒ— แƒ›แƒชแƒ˜แƒ แƒ” แƒ™แƒแƒ›แƒžแƒšแƒ”แƒฅแƒขแƒ–แƒ”. แƒ แƒ”แƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒ— แƒฉแƒ•แƒ”แƒœ แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒ”แƒ— แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒแƒกแƒ”แƒฃแƒšแƒฏแƒ”แƒ  แƒ’แƒแƒ–แƒ แƒ“แƒ.

แƒจแƒ”แƒฏแƒแƒ›แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก: แƒ—แƒฃ แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— PostgreSQL-แƒก FDW-แƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“, แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ—, แƒ˜แƒ’แƒ–แƒแƒ•แƒœแƒ”แƒ‘แƒ แƒ—แƒฃ แƒแƒ แƒ แƒงแƒ•แƒ”แƒšแƒ แƒคแƒ˜แƒšแƒขแƒ แƒ˜ แƒ“แƒ˜แƒกแƒขแƒแƒœแƒชแƒ˜แƒฃแƒ  แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒ“แƒ แƒ™แƒ›แƒแƒงแƒแƒคแƒ˜แƒšแƒ˜ แƒ“แƒแƒ แƒฉแƒ”แƒ‘แƒ˜แƒ—... แƒงแƒแƒ•แƒ”แƒš แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ›แƒแƒœแƒแƒ›, แƒกแƒแƒœแƒแƒ› แƒแƒ  แƒจแƒ”แƒแƒ”แƒ แƒ—แƒ”แƒ‘แƒ— แƒชแƒฎแƒ แƒ˜แƒšแƒ”แƒ‘แƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒกแƒฎแƒ•แƒ แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก แƒแƒ›แƒ‘แƒแƒ•แƒ˜แƒ.

แฒ’แƒ›แƒแƒ“แƒšแƒแƒ‘แƒ— แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก! แƒกแƒ˜แƒแƒ›แƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒ— แƒ›แƒแƒ•แƒ˜แƒกแƒ›แƒ˜แƒœแƒ” แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒ‘แƒ˜, แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ”แƒ‘แƒ˜ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ”แƒ‘แƒจแƒ˜.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ