ืึทืคึผื’ืจื™ื™ื“ ืคึฟืึทืจ ืคื•ื™ืœ: ื•ื•ื™ PostgreSQL 12 ื™ืžืคึผืจื•ื•ื•ื– ืคืึธืจืฉื˜ืขืœื•ื ื’

ืึทืคึผื’ืจื™ื™ื“ ืคึฟืึทืจ ืคื•ื™ืœ: ื•ื•ื™ PostgreSQL 12 ื™ืžืคึผืจื•ื•ื•ื– ืคืึธืจืฉื˜ืขืœื•ื ื’

ืคึผืึธืกื˜ื’ืจืขืกืงืœ 12, ื“ื™ ืœืขืฆื˜ืข ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹"ื“ื™ ื•ื•ืขืœื˜ 'ืก ื‘ืขืกื˜ืขืจ ืึธืคึฟืŸ ืžืงื•ืจ ืจื™ืœื™ื™ืฉืึทื ืึทืœ ื“ืึทื˜ืึทื‘ื™ื™ืก," ืงื•ืžื˜ ืื•ื™ืก ืื™ืŸ ืึท ืคึผืึธืจ ืคื•ืŸ ื•ื•ืึธื›ืŸ (ืื•ื™ื‘ ืึทืœืฅ ื’ื™ื™ื˜ ืœื•ื™ื˜ ืฆื• ืคึผืœืึทืŸ). ื“ืึธืก ื’ื™ื™ื˜ ื“ื™ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš ืคึผืœืึทืŸ ืคื•ืŸ ืจื™ืœื™ืกื™ื ื’ ืึท ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืข ืžื™ื˜ ืึท ืคึผืœืึทืฅ ืคื•ืŸ ื ื™ื™ึทืข ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืึทืžืึธืœ ืึท ื™ืึธืจ, ืื•ืŸ ืคืจืึทื ื’ืงืœื™, ื“ืึธืก ืื™ื– ื™ืžืคึผืจืขืกื™ื•ื•. ืึทื– ืก ื•ื•ืึธืก ืื™ืš ื’ืขื•ื•ืืจืŸ ืึทืŸ ืึทืงื˜ื™ื•ื• ืžื™ื˜ื’ืœื™ื“ ืคื•ืŸ ื“ื™ PostgreSQL ืงื”ืœ.

ืื™ืŸ ืžื™ื™ืŸ ืžื™ื™ื ื•ื ื’, ื ื™ื˜ ืขื ืœืขืš ืคืจื™ืขืจื“ื™ืงืŸ ืจื™ืœื™ืกื™ื–, PostgreSQL 12 ื˜ื•ื˜ ื ื™ืฉื˜ ืึทื ื˜ื”ืึทืœื˜ืŸ ืื™ื™ืŸ ืึธื“ืขืจ ืฆื•ื•ื™ื™ ืจืขื•ื•ืึธืœื•ื˜ื™ืึธื ืึทืจื™ ืคึฟืขื™ึดืงื™ื™ื˜ืŸ (ื•ื•ื™ ืคึผืึทืจื˜ื™ืฉืึทื ื™ื ื’ ืึธื“ืขืจ ืึธื ืคึฟืจืขื’ ืคึผืึทืจืึทืœืขืœื™ื–ืึทื). ืื™ืš ืึทืžืึธืœ ื“ื–ืฉืึธื•ืงื˜ ืึทื– ื“ื™ ื”ื•ื™ืคึผื˜ ืฉื˜ืจื™ืš ืคื•ืŸ PostgreSQL 12 ืื™ื– ื’ืจืขืกืขืจ ืคืขืกื˜ืงื™ื™ึทื˜. ืื™ื– ื“ืึธืก ื ื™ืฉื˜ ื•ื•ืึธืก ืื™ืจ ื“ืึทืจืคึฟืŸ ื•ื•ืขืŸ ืื™ืจ ืคื™ืจืŸ ื“ื™ ืงืจื™ื˜ื™ืฉ ื“ืึทื˜ืŸ ืคื•ืŸ ื“ื™ื™ืŸ ื’ืขืฉืขืคื˜?

ืึธื‘ืขืจ PostgreSQL 12 ื˜ื•ื˜ ื ื™ืฉื˜ ื”ืึทืœื˜ืŸ ื“ืึธืจื˜: ืžื™ื˜ ื ื™ื™ึทืข ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืื•ืŸ ื™ืžืคึผืจื•ื•ื•ืžืึทื ืฅ, ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ื•ื•ืขื˜ ื“ื•ืจื›ืคื™ืจืŸ ื‘ืขืกืขืจ, ืื•ืŸ ืึทืœืข ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื˜ืึธืŸ ืื™ื– ืึทืคึผื’ืจื™ื™ื“!

(ื ื•, ืืคึฟืฉืจ ืจื™ื‘ื™ืœื“ ื“ื™ ื™ื ื“ืขืงืกื™ื–, ืึธื‘ืขืจ ืื™ืŸ ื“ืขื ืžืขืœื“ื•ื ื’ ืขืก ืื™ื– ื ื™ืฉื˜ ื•ื•ื™ ืกืงืขืจื™ ื•ื•ื™ ืžื™ืจ ื–ืขื ืขืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืฆื•.)

ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืจื•ื™ืก ืฆื• ืึทืคึผื’ืจื™ื™ื“ PostgreSQL ืื•ืŸ ื’ืœื™ื™ืš ื”ื ืื” ื‘ืึทื˜ื™ื™ึทื˜ื™ืง ื™ืžืคึผืจื•ื•ื•ืžืึทื ืฅ ืึธืŸ ื•ืžื ื™ื™ื˜ื™ืง ื˜ืึทืจืขืจืึทื. ืžื™ื˜ ืขื˜ืœืขื›ืข ื™ืึธืจ ืฆื•ืจื™ืง, ืื™ืš ืจื™ื•ื•ื™ื•ื“ ืึท ืึทืคึผื’ืจื™ื™ื“ ืคื•ืŸ PostgreSQL 9.4 ืฆื• PostgreSQL 10 ืื•ืŸ ื’ืขื–ืขืŸ ื•ื•ื™ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ื– ืคืืจืฉืคืจื™ื™ื˜ ื“ืึทื ืง ืฆื• ื“ื™ ื™ืžืคึผืจื•ื•ื•ื“ ืึธื ืคึฟืจืขื’ ืคึผืึทืจืึทืœืขืœื™ื–ืึทื ืื™ืŸ PostgreSQL 10. ืื•ืŸ, ืจื•ื‘ึฟ ื™ืžืคึผืึธืจื˜ืึทื ื˜ืœื™, ื›ึผืžืขื˜ ื’ืึธืจื ื™ืฉื˜ ืื™ื– ืคืืจืœืื ื’ื˜ ืคื•ืŸ ืžื™ืจ (ื ืึธืจ ืฉื˜ืขืœืŸ ืึท ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืคึผืึทืจืึทืžืขื˜ืขืจ max_parallel_workers).

ืฉื˜ื™ืžืขืŸ, ืขืก ืื™ื– ื‘ืึทืงื•ื•ืขื ื•ื•ืขืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืึทืจื‘ืขื˜ ื‘ืขืกืขืจ ืžื™ื“ ื ืึธืš ืึท ืึทืคึผื’ืจื™ื™ื“. ืื•ืŸ ืžื™ืจ ืคึผืจื•ื‘ื™ืจืŸ ื–ื™ื™ืขืจ ืฉื•ื•ืขืจ ืฆื• ื‘ื™ื˜ืข ื ื™ืฆืขืจืก, ื•ื•ื™ื™ึทืœ PostgreSQL ื”ืื˜ ืžืขืจ ืื•ืŸ ืžืขืจ ืคื•ืŸ ื–ื™ื™.

ืึทื–ื•ื™ ื•ื•ื™ ืงืขื ืขืŸ ืึท ืคึผืฉื•ื˜ ืึทืคึผื’ืจื™ื™ื“ ืฆื• PostgreSQL 12 ืžืึทื›ืŸ ืื™ืจ ืฆื•ืคืจื™ื“ืŸ? ืื™ืš ืฐืขืœ ืืฒึทืš ืื™ืฆื˜ ื–ืึธื’ืŸ.

ื”ื•ื™ืคึผื˜ ื™ื ื“ืขืงืกื™ื ื’ ื™ืžืคึผืจื•ื•ื•ืžืึทื ืฅ

ืึธืŸ ื™ื ื“ืขืงืกื™ื ื’, ืึท ื“ืึทื˜ืึทื‘ื™ื™ืก ื•ื•ืขื˜ ื ื™ืฉื˜ ื’ื™ื™ืŸ ื•ื•ื™ื™ึทื˜. ื•ื•ื™ ืึทื ื“ืขืจืฉ ืงืขื ืขืŸ ืื™ืจ ื’ืขืฉื•ื•ื™ื ื“ ื’ืขืคึฟื™ื ืขืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข? ื“ื™ ืคื•ื ื“ืึทืžืขื ื˜ืึทืœ ื™ื ื“ืขืงืกื™ื ื’ ืกื™ืกื˜ืขื ืคื•ืŸ PostgreSQL ืื™ื– ื’ืขืจื•ืคืŸ ื‘-ื‘ื•ื™ื. ื“ืขื ื˜ื™ืคึผ ืคื•ืŸ ืื™ื ื“ืขืงืก ืื™ื– ืึธืคึผื˜ื™ืžื™ื–ืขื“ ืคึฟืึทืจ ืกื˜ืึธืจื™ื“ื–ืฉ ืกื™ืกื˜ืขืžืขืŸ.

ืžื™ืจ ืคืฉื•ื˜ ื ื•ืฆืŸ ื“ื™ ืึธืคึผืขืจืึทื˜ืึธืจ CREATE INDEX ON some_table (some_column), ืื•ืŸ PostgreSQL ื˜ื•ื˜ ืึท ืคึผืœืึทืฅ ืคื•ืŸ ืึทืจื‘ืขื˜ ืฆื• ื”ืึทืœื˜ืŸ ื“ื™ ืื™ื ื“ืขืงืก ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื˜ ื‘ืฉืขืช ืžื™ืจ ืงืขืกื™ื™ื“ืขืจ ืึทืจื™ื™ึทื ืœื™ื™ื’ืŸ, ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ืื•ืŸ ื•ื™ืกืžืขืงืŸ ื•ื•ืึทืœื•ืขืก. ืึทืœืฅ ืึทืจื‘ืขื˜ ืื•ื™ืฃ ื–ื™ืš, ื•ื•ื™ ื“ื•ืจืš ืžืึทื’ื™ืฉ.

ืึธื‘ืขืจ PostgreSQL ื™ื ื“ืขืงืกื™ื– ื”ืึธื‘ืŸ ืื™ื™ืŸ ืคึผืจืึธื‘ืœืขื - ื–ื™ื™ ื–ืขื ืขืŸ ื™ื ืคืœื™ื™ื˜ื™ื“ ืื•ืŸ ื ืขืžืขืŸ ืขืงืกื˜ืจืข ื“ื™ืกืง ืคึผืœืึทืฅ ืื•ืŸ ืจืขื“ื•ืฆื™ืจืŸ ื“ื™ ืคืึธืจืฉื˜ืขืœื•ื ื’ ืคื•ืŸ ื“ืึทื˜ืŸ ืจื™ื˜ืจื™ื•ื•ืึทืœ ืื•ืŸ ืึทืคึผื“ื™ื™ื˜ื™ื ื’. ืžื™ื˜ "ื‘ืœื•ื˜" ืื™ืš ืžื™ื™ื ืขืŸ ื™ื ื™ืคืขืงื˜ื™ื•ื•ืœื™ ืžื™ื™ื ื˜ื™ื™ื ื™ื ื’ ื“ื™ ืื™ื ื“ืขืงืก ืกื˜ืจื•ืงื˜ื•ืจ. ื“ืึธืก ืงืขืŸ - ืึธื“ืขืจ ื ื™ืฉื˜ - ื–ื™ื™ืŸ ืฉื™ื™ืš ืฆื• ื“ื™ ืžื™ืกื˜ ื˜ื•ืคึผืœืขืก ื•ื•ืึธืก ืขืก ืจื™ืžื•ื•ื•ื– VACUUM (ื“ืึทื ืง ืฆื• Peter Gaghan ืคึฟืึทืจ ื“ื™ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข)ืคืขื˜ืจื•ืก ื’ืขืึธื’ื”ืขื’ืึทืŸ)). ืื™ื ื“ืขืงืก ื‘ืœืึธื•ื˜ ืื™ื– ืกืคึผืขืฆื™ืขืœ ื‘ืืžืขืจืงื˜ ืื™ืŸ ื•ื•ืขืจืงืœืึธื•ื“ื– ื•ื•ื• ื“ืขืจ ืื™ื ื“ืขืงืก ืื™ื– ืึทืงื˜ื™ื•ื•ืœื™ ื˜ืฉืึทื ื’ื™ื ื’.

PostgreSQL 12 ื™ืžืคึผืจื•ื•ื•ื– ื“ื™ ืคืึธืจืฉื˜ืขืœื•ื ื’ ืคื•ืŸ ื‘-ื‘ื•ื™ื ื™ื ื“ืขืงืกื™ื–, ืื•ืŸ ื™ืงืกืคึผืขืจืึทืžืึทื ืฅ ืžื™ื˜ ื‘ืขื ื˜ืฉืžืึทืจืงืก ื•ื•ื™ TPC-C ื”ืึธื‘ืŸ ื’ืขื•ื•ื™ื–ืŸ ืึทื– ืื™ืŸ ื“ื•ืจื›ืฉื ื™ื˜ืœืขืš 40% ื•ื•ื™ื™ื ื™ืงืขืจ ืคึผืœืึทืฅ ืื™ื– ืื™ืฆื˜ ื’ืขื ื™ืฆื˜. ืื™ืฆื˜ ืžื™ืจ ืคืึทืจื‘ืจืขื ื’ืขืŸ ื•ื•ื™ื™ื ื™ืงืขืจ ืฆื™ื™ึทื˜ ื ื™ื˜ ื‘ืœื•ื™ื– ืื•ื™ืฃ ืžื™ื™ื ื˜ื™ื™ื ื™ื ื’ ื‘-ื‘ื•ื™ื ื™ื ื“ืขืงืกื™ื– (ื“ืึธืก ืื™ื–, ืื•ื™ืฃ ืฉืจื™ื™ึทื‘ืŸ ืึทืคึผืขืจื™ื™ืฉืึทื ื–), ืึธื‘ืขืจ ืื•ื™ืš ืื•ื™ืฃ ืจื™ื˜ืจื™ื•ื•ื™ื ื’ ื“ืึทื˜ืŸ, ื•ื•ื™ื™ึทืœ ื“ื™ ื™ื ื“ืขืงืกื™ื– ื–ืขื ืขืŸ ืคื™ืœ ืงืœืขื ืขืจืขืจ.

ืึทืคึผืคึผืœื™ืงืึทื˜ื™ืึธื ืก ื•ื•ืึธืก ืึทืงื˜ื™ื•ื•ืœื™ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ื–ื™ื™ืขืจ ื˜ื™ืฉืŸ - ื˜ื™ืคึผื™ืงืœื™ OLTP ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– (ืคืึทืงื˜ื™ืฉ-ืฆื™ื™ื˜ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ืคึผืจืึทืกืขืกื™ื ื’) - ื•ื•ืขื˜ ื ื•ืฆืŸ ื“ื™ืกืง ืื•ืŸ ืคึผืจืึธืฆืขืก ืจื™ืงื•ื•ืขืก ืคื™ืœ ืžืขืจ ื™ืคื™ืฉืึทื ื˜ืœื™. ื“ื™ ืžืขืจ ื“ื™ืกืง ืคึผืœืึทืฅ, ื“ื™ ืžืขืจ ืคึผืœืึทืฅ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ื”ืื˜ ืฆื• ื•ื•ืึทืงืกืŸ ืึธืŸ ืึทืคึผื’ืจื™ื™ื“ื™ื ื’ ื“ื™ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ.

ืขื˜ืœืขื›ืข ืึทืคึผื’ืจื™ื™ื“ ืกื˜ืจืึทื˜ืขื’ื™ืขืก ื“ืึทืจืคืŸ ืจื™ื‘ื™ืœื“ื™ื ื’ ื‘-ื‘ื•ื™ื ื™ื ื“ืขืงืกื™ื– ืฆื• ื ื•ืฆืŸ ื“ื™ ื‘ืขื ืขืคื™ืฅ (ืœืžืฉืœ. pg_upgrade ื•ื•ืขื˜ ื ื™ืฉื˜ ืจื™ื‘ื™ืœื“ ื™ื ื“ืขืงืกื™ื– ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ). ืื™ืŸ ืคืจื™ืขืจื“ื™ืงืข ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ PostgreSQL, ืจื™ื‘ื™ืœื“ื™ื ื’ ื’ืจื•ื™ืก ื™ื ื“ืขืงืกื™ื– ืื•ื™ืฃ ื˜ื™ืฉืŸ ืจื™ื–ืึทืœื˜ื™ื“ ืื™ืŸ ื‘ืึทื˜ื™ื™ื˜ื™ืง ื“ืึทื•ื ื˜ื™ื™ื ื•ื•ื™ื™ึทืœ ืขื ื“ืขืจื•ื ื’ืขืŸ ืงืขืŸ ื ื™ืฉื˜ ื–ื™ื™ืŸ ื’ืขืžืื›ื˜ ืื™ืŸ ื“ืขืจ ื“ืขืจื•ื•ื™ื™ืœ. ืึธื‘ืขืจ PostgreSQL 12 ื”ืื˜ ืืŸ ืื ื“ืขืจ ืงื™ืœ ืฉื˜ืจื™ืš: ืื™ืฆื˜ ืื™ืจ ืงืขื ืขืŸ ืจื™ื‘ื™ืœื“ ื™ื ื“ืขืงืกื™ื– ืื™ืŸ ืคึผืึทืจืึทืœืขืœ ืžื™ื˜ ื“ื™ ื‘ืึทืคึฟืขืœ ืจื™ื™ื ื“ืขืงืก ืงืึทื ืงืขืจืึทื ื˜ืœื™ืฆื• ื’ืึธืจ ื•ื™ืกืžื™ื™ื“ืŸ ื“ืึทื•ื ื˜ื™ื™ื.

ืขืก ื–ืขื ืขืŸ ืื ื“ืขืจืข ื™ืžืคึผืจื•ื•ื•ืžืึทื ืฅ ืฆื• ื“ื™ ื™ื ื“ืขืงืกื™ื ื’ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ืื™ืŸ PostgreSQL 12. ืืŸ ืื ื“ืขืจ ื–ืึทืš ื•ื•ื• ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืขื˜ืœืขื›ืข ืžืึทื’ื™ืฉ - ืฉืจื™ื™ึทื‘ืŸ ืคืึธืจื•ื™ืก ืงืœืึธืฅ, aka WAL (ืฉืจื™ื™ึทื‘ืŸ-ืคืึธืจื•ื™ืก ืงืœืึธืฅ). ื ืฉืจื™ื™ึทื‘ืŸ ืคืึธืจื•ื™ืก ืงืœืึธืฅ ืจืขืงืึธืจื“ืก ื™ืขื“ืขืจ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ืื™ืŸ PostgreSQL ืื™ืŸ ืคืึทืœ ืคื•ืŸ ื“ื•ืจื›ืคืึทืœ ืื•ืŸ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ. ืึทืคึผืคึผืœื™ืงืึทื˜ื™ืึธื ืก ื ื•ืฆืŸ ืขืก ืคึฟืึทืจ ืึทืจืงื™ื™ื•ื•ื™ื ื’ ืื•ืŸ ืคื•ื ื˜-ืื™ืŸ-ืฆื™ื™ึทื˜ ืึธืคึผื–ื•ืš. ืคื•ืŸ ืงื•ืจืก, ื“ื™ ืฉืจื™ื™ึทื‘ืŸ-ืคืึธืจื•ื™ืก ืงืœืึธืฅ ืื™ื– ื’ืขืฉืจื™ื‘ืŸ ืฆื• ื“ื™ืกืง, ื•ื•ืึธืก ืงืขื ืขืŸ ืคึผืจืึทืœ ืื•ื™ืฃ ืคืึธืจืฉื˜ืขืœื•ื ื’.

PostgreSQL 12 ื”ืื˜ ืจื™ื“ื•ืกื˜ ื“ื™ ืึธื•ื•ื•ืขืจื›ืขื“ ืคื•ืŸ WAL ืจืขืงืึธืจื“ืก ื•ื•ืึธืก ื–ืขื ืขืŸ ื‘ืืฉืืคืŸ ื“ื•ืจืš ื“ื™ GiST, GIN ืื•ืŸ SP-GiST ื™ื ื“ืขืงืกื™ื– ื‘ืขืฉืึทืก ืื™ื ื“ืขืงืก ืงืึทื ืกื˜ืจืึทืงืฉืึทืŸ. ื“ืึธืก ื’ื™ื˜ ืขื˜ืœืขื›ืข ืžืึทืžืึธืฉืขืกื“ื™ืง ื‘ืขื ืขืคื™ืฅ: WAL ืจืขืงืึธืจื“ืก ื ืขืžืขืŸ ื•ื•ื™ื™ื ื™ืงืขืจ ื“ื™ืกืง ืคึผืœืึทืฅ, ืื•ืŸ ื“ืึทื˜ืŸ ื–ืขื ืขืŸ ืจื™ืคึผืœื™ื™ื“ ืคืึทืกื˜ืขืจ, ืึทื–ืึท ื•ื•ื™ ื‘ืขืฉืึทืก ื•ืžื’ืœื™ืง ืึธืคึผื–ื•ืš ืึธื“ืขืจ ืคื•ื ื˜-ืื™ืŸ-ืฆื™ื™ื˜ ืึธืคึผื–ื•ืš. ืื•ื™ื‘ ืื™ืจ ื ื•ืฆืŸ ืึทื–ืึท ื™ื ื“ืขืงืกื™ื– ืื™ืŸ ื“ื™ื™ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– (ืœืžืฉืœ, PostGIS-ื‘ืื–ื™ืจื˜ ื“ื–ืฉื™ืึธืกืคึผืึทื˜ื™ืึทืœ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ื ื•ืฆืŸ ื“ื™ GiST ืื™ื ื“ืขืงืก ืคื™ืœ), ื“ืึธืก ืื™ื– ืืŸ ืื ื“ืขืจ ืฉื˜ืจื™ืš ื•ื•ืึธืก ื•ื•ืขื˜ ื‘ืื˜ื™ื™ื˜ื™ืง ืคึฟืึทืจื‘ืขืกืขืจืŸ ื“ื™ ื“ืขืจืคืึทืจื•ื ื’ ืึธืŸ ืงื™ื™ืŸ ืžื™ ืคื•ืŸ ื“ื™ื™ืŸ ื˜ื™ื™ืœ.

ืฆืขื˜ื™ื™ืœื•ื ื’ - ื‘ื™ื’ืขืจ, ื‘ืขืกืขืจ, ืคืึทืกื˜ืขืจ

PostgreSQL 10 ื‘ืึทืงืขื ืขื  ื“ืขืงืœืึทืจืึทื˜ื™ื•ื•ืข ืฆืขื˜ื™ื™ืœื•ื ื’. ืื™ืŸ PostgreSQL 11 ืขืก ืื™ื– ื’ืขื•ื•ืืจืŸ ืคื™ืœ ื’ืจื™ื ื’ืขืจ ืฆื• ื ื•ืฆืŸ. ืื™ืŸ PostgreSQL 12 ืื™ืจ ืงืขื ืขืŸ ื˜ื•ื™ืฉืŸ ื“ื™ ื•ื•ืึธื’ ืคื•ืŸ ืกืขืงืฉืึทื ื–.

ืื™ืŸ PostgreSQL 12, ื“ื™ ืคืึธืจืฉื˜ืขืœื•ื ื’ ืคื•ืŸ ื“ื™ ืคึผืึทืจื˜ื™ืฉืึทื ื– ืกื™ืกื˜ืขื ืื™ื– ื’ืขื•ื•ืืจืŸ ื‘ืื˜ื™ื™ื˜ื™ืง ื‘ืขืกืขืจ, ืกืคึผืขืฆื™ืขืœ ืื•ื™ื‘ ืขืก ื–ืขื ืขืŸ ื˜ื•ื™ื–ื ื˜ืขืจ ืคื•ืŸ ืคึผืึทืจื˜ื™ืฉืึทื ื– ืื™ืŸ ื“ื™ ื˜ื™ืฉ. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืื•ื™ื‘ ืึท ืึธื ืคึฟืจืขื’ ืึทืคืขืงืฅ ื‘ืœื•ื™ื– ืึท ื‘ื™ืกืœ ืคึผืึทืจื˜ื™ืฉืึทื ื– ืื™ืŸ ืึท ื˜ื™ืฉ ืžื™ื˜ ื˜ื•ื™ื–ื ื˜ืขืจ ืคื•ืŸ ื–ื™ื™, ืขืก ื•ื•ืขื˜ ื•ื™ืกืคื™ืจืŸ ืคื™ืœ ืคืึทืกื˜ืขืจ. ืคืึธืจืฉื˜ืขืœื•ื ื’ ืื™ื– ื ื™ืฉื˜ ื‘ืœื•ื™ื– ื™ืžืคึผืจื•ื•ื•ื“ ืคึฟืึทืจ ื“ื™ ื˜ื™ื™ืคึผืก ืคื•ืŸ ืคึฟืจืื’ืŸ. ืื™ืจ ื•ื•ืขื˜ ืื•ื™ืš ื‘ืึทืžืขืจืงืŸ ื•ื•ื™ ืคืึทืกื˜ืขืจ INSERT ืึทืคึผืขืจื™ื™ืฉืึทื ื– ื–ืขื ืขืŸ ืื•ื™ืฃ ื˜ื™ืฉืŸ ืžื™ื˜ ืงื™ื™ืคืœ ืคึผืึทืจื˜ื™ืฉืึทื ื–.

ืจืขืงืึธืจื“ื™ื ื’ ื“ืึทื˜ืŸ ื ื™ืฆืŸ ืงืึธืคึผื™ - ื“ื•ืจืš ื“ืขื ื•ื•ืขื’, ื“ืึธืก ืื™ื– ืึท ื’ืจื•ื™ืก ื•ื•ืขื’ ืคืึทืจื ืขื ื“ืึทื˜ืŸ ืืจืืคืงืืคื™ืข ืื•ืŸ ื“ืึธ ืื™ื– ืึท ื‘ื™ื™ึทืฉืคึผื™ืœ ื‘ืึทืงื•ืžืขืŸ JSON - ืคึผืึทืจื˜ื™ืฉืึทื ื“ ื˜ื™ืฉืŸ ืื™ืŸ PostgreSQL 12 ื”ืึธื‘ืŸ ืื•ื™ืš ื•ื•ืขืจืŸ ืžืขืจ ืขืคืขืงื˜ื™ื•ื•. ืžื™ื˜ COPY ืึทืœืฅ ืื™ื– ืฉื•ื™ืŸ ืฉื ืขืœ, ืึธื‘ืขืจ ืื™ืŸ PostgreSQL 12 ืขืก ืคืœื™ืขืก ืœืขื’ืึทืžืจืข.

ื“ืึทื ืง ืฆื• ื“ื™ ืึทื“ื•ื•ืึทื ื˜ื™ื“ื–ืฉื™ื–, PostgreSQL ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืงืจืึธื ืืคื™ืœื• ื’ืจืขืกืขืจืข ื“ืึทื˜ืŸ ืฉื˜ืขืœื˜ ืื•ืŸ ืžืึทื›ืŸ ื–ื™ื™ ื’ืจื™ื ื’ืขืจ ืฆื• ืฆื•ืจื™ืงืงืจื™ื’ืŸ. ืื•ืŸ ืงื™ื™ืŸ ืžื™ ืคื•ืŸ ื“ื™ื™ืŸ ื–ื™ื™ึทื˜. ืื•ื™ื‘ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื”ืื˜ ืคื™ืœืข ืคึผืึทืจื˜ื™ืฉืึทื ื–, ืึทื–ืึท ื•ื•ื™ ืจืขืงืึธืจื“ื™ื ื’ ืฆื™ื™ื˜ ืกืขืจื™ืข ื“ืึทื˜ืŸ, ืึท ืคึผืฉื•ื˜ ืึทืคึผื’ืจื™ื™ื“ ื•ื•ืขื˜ ื‘ืื˜ื™ื™ื˜ื™ืง ืคึฟืึทืจื‘ืขืกืขืจืŸ ื–ื™ื™ึทืŸ ืคืึธืจืฉื˜ืขืœื•ื ื’.

ื›ืึธื˜ืฉ ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ืคึผื•ื ืงื˜ ืึท "ืึทืคึผื’ืจื™ื™ื“ ืื•ืŸ ื”ื ืื”" ืคึฟืึทืจื‘ืขืกืขืจื•ื ื’, PostgreSQL 12 ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืฉืึทืคึฟืŸ ืคืจืขืžื“ ืฉืœื™ืกืœืขืŸ ื•ื•ืึธืก ื“ืขืจืžืึธื ืขืŸ ืคึผืึทืจื˜ื™ืฉืึทื ื“ ื˜ื™ืฉืŸ, ื•ื•ืึธืก ืžืื›ื˜ ืคึผืึทืจื˜ื™ืฉืึทื ื™ื ื’ ืึท ืคืึทืจื’ืขื ื™ื’ืŸ ืฆื• ืึทืจื‘ืขื˜ืŸ ืžื™ื˜.

ืžื™ื˜ ืคึฟืจืื’ืŸ ื ืึธืจ ื’ืึทื˜ ืึท ืคึผืœืึทืฅ ื‘ืขืกืขืจ

ื•ื•ืขืŸ ืึท ืœืึทื˜ืข ืื™ื– ื’ืขื•ื•ืขืŸ ื’ืขื•ื•ืขื ื“ื˜ ืคึฟืึทืจ ื’ืขื‘ื•ื™ื˜-ืื™ืŸ ืคึผืจืึธืกื˜ ื˜ื™ืฉ ืื•ื™ืกื“ืจื•ืงืŸ (aka CTE, aka WITH ืงื•ื•ื™ืจื™ื–), ืื™ืš ืงืขืŸ ื ื™ืฉื˜ ื•ื•ืึทืจื˜ืŸ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ืึทืŸ ืึทืจื˜ื™ืงืœ ื•ื•ืขื’ืŸ ื•ื•ื™ ืฆื•ืคืจื™ื“ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ืžื™ื˜ PostgreSQL ื–ืขื ืขืŸ. ื“ืึธืก ืื™ื– ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ื•ื•ืึธืก ื•ื•ืขื˜ ืคืึทืจื’ื™ื›ืขืจืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ. ืกื™ื™ึทื“ืŸ, ืคื•ืŸ ืงื•ืจืก, ืื™ืจ ื ื•ืฆืŸ CTE.

ืื™ืš ืึธืคื˜ ื’ืขืคึฟื™ื ืขืŸ ืึทื– ื ืขื•ื•ื‘ื™ืขืก ืฆื• SQL ืœื™ื‘ืข ืฆื• ื ื•ืฆืŸ CTEs; ืื•ื™ื‘ ืื™ืจ ืฉืจื™ื™ึทื‘ืŸ ื–ื™ื™ ืึท ื–ื™ื›ืขืจ ื•ื•ืขื’, ืขืก ื˜ืึทืงืข ืคื™ืœื– ื•ื•ื™ ืื™ืจ ืฉืจื™ื™ึทื‘ืŸ ืึท ื™ืžืคึผืขืจืึทื˜ื™ื•ื• ืคึผืจืึธื’ืจืึทื. ืคึผืขืจืกื ืึทืœื™, ืื™ืš ืœื™ื™ืงื˜ ืฆื• ืจื™ืจื™ื™ื˜ ื“ื™ ืคึฟืจืื’ืŸ ืฆื• ื‘ืึทืงื•ืžืขืŸ ืึทืจื•ื ืึธืŸ CTE ืื•ืŸ ืคืึทืจื’ืจืขืกืขืจืŸ ืคึผืจืึธื•ื“ืึทืงื˜ื™ื•ื•ื™ื˜ื™. ืื™ืฆื˜ ืึทืœืฅ ืื™ื– ืึทื ื“ืขืจืฉ.

PostgreSQL 12 ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื™ื ืœื™ื ืข ืึท ืกืคึผืขืฆื™ืคื™ืฉ ื˜ื™ืคึผ ืคื•ืŸ CTE ืึธืŸ ื–ื™ื™ึทื˜ ื™ืคืขืงืฅ (SELECT), ื•ื•ืึธืก ืื™ื– ื’ืขื ื™ืฆื˜ ื‘ืœื•ื™ื– ืึทืžืึธืœ ืœืขื‘ืŸ ื“ื™ ืกื•ืฃ ืคื•ืŸ ื“ื™ ื‘ืงืฉื”. ืื•ื™ื‘ ืื™ืš ื”ืึทืœื˜ืŸ ืฉืคึผื•ืจ ืคื•ืŸ ื“ื™ CTE ืคึฟืจืื’ืŸ ื•ื•ืึธืก ืื™ืš ืจื™ืจืึธื•ื˜, ืจื•ื‘ึฟ ืคื•ืŸ ื–ื™ื™ ื•ื•ืึธืœื˜ ืคืึทืœืŸ ืื™ืŸ ื“ืขื ืงืึทื˜ืขื’ืึธืจื™ืข. ื“ืึธืก ื”ืขืœืคึผืก ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ืฆื• ืฉืจื™ื™ึทื‘ืŸ ืงืœืึธืจ ืงืึธื“ ื•ื•ืึธืก ืื™ืฆื˜ ืื•ื™ืš ืœื•ื™ืคื˜ ื’ืขืฉื•ื•ื™ื ื“.

ื“ืขืจืฆื•, PostgreSQL 12 ืึธืคึผื˜ื™ืžื™ื–ืขืก ื“ื™ SQL ื“ื•ืจื›ืคื™ืจื•ื ื’ ื–ื™ืš, ืึธืŸ ืื™ืจ ื”ืึธื‘ืŸ ืฆื• ื˜ืึธืŸ ืขืคึผืขืก. ืื•ืŸ ื›ืึธื˜ืฉ ืื™ืš ืžื™ืกื˜ืึธืžืข ื•ื•ืขื˜ ื ื™ืฉื˜ ื“ืึทืจืคึฟืŸ ืฆื• ืึทืคึผื˜ืึทืžื™ื™ื– ืึทื–ืึท ืคึฟืจืื’ืŸ ืื™ืฆื˜, ืขืก ืื™ื– ื’ืจื•ื™ืก ืึทื– PostgreSQL ื”ืืœื˜ ืฆื• ืึทืจื‘ืขื˜ืŸ ืื•ื™ืฃ ืึธื ืคึฟืจืขื’ ืึทืคึผื˜ืึทืžืึทื–ื™ื™ืฉืึทืŸ.

ืคึผื•ื ืงื˜-ืื™ืŸ-ืฆื™ื™ื˜ (JIT) - ืื™ืฆื˜ ืคืขืœื™ืงื™ื™ึทื˜

ืื•ื™ืฃ PostgreSQL 12 ืกื™ืกื˜ืขืžืขืŸ ืžื™ื˜ ืฉื˜ื™ืฆืŸ LLVM ื“ื–ืฉื™ื˜ ื–ืึทืžืœื•ื ื’ ืื™ื– ืขื ื™ื™ื‘ืึทืœื“ ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜. ืขืจืฉื˜ืขืจ ืคื•ืŸ ืึทืœืข, ืื™ืจ ื‘ืึทืงื•ืžืขืŸ ืฉื˜ื™ืฆืŸ HIT ืคึฟืึทืจ ืขื˜ืœืขื›ืข ื™ื ืขืจืœืขืš ืึทืคึผืขืจื™ื™ืฉืึทื ื–, ืื•ืŸ ืฆื•ื•ื™ื™ื˜ื ืก, ืคึฟืจืื’ืŸ ืžื™ื˜ ืื•ื™ืกื“ืจื•ืงืŸ (ื“ื™ ืกื™ืžืคึผืœืึทืกื˜ ื‘ื™ื™ืฉืคึผื™ืœ ืื™ื– X + y) ืื™ืŸ ืกืขืœืขืงื˜ ืจืฉื™ืžื•ืช (ื•ื•ืึธืก ืื™ืจ ื”ืึธื‘ืŸ ื ืึธืš SELECT), ืึทื’ื’ืจืขื’ืึทืฅ, ืื•ื™ืกื“ืจื•ืงืŸ ืžื™ื˜ WHERE ืงืœืึธื–ื™ื– ืื•ืŸ ืื ื“ืขืจืข ืงืขื ืขืŸ ื ื•ืฆืŸ JIT ืฆื• ืคึฟืึทืจื‘ืขืกืขืจืŸ ืคืึธืจืฉื˜ืขืœื•ื ื’.

ื–ื™ื ื˜ JIT ืื™ื– ืขื ื™ื™ื‘ืึทืœื“ ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜ ืื™ืŸ PostgreSQL 12, ืคืึธืจืฉื˜ืขืœื•ื ื’ ื•ื•ืขื˜ ืคึฟืึทืจื‘ืขืกืขืจืŸ ื–ื™ืš, ืึธื‘ืขืจ ืื™ืš ืจืขืงืึธืžืขื ื“ื™ืจืŸ ื˜ืขืกื˜ื™ื ื’ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ืŸ PostgreSQL 11, ื•ื•ืึธืก ื™ื ื˜ืจืึธื•ื“ื•ืกื˜ JIT, ืฆื• ืžืขืกื˜ืŸ ืึธื ืคึฟืจืขื’ ืคืึธืจืฉื˜ืขืœื•ื ื’ ืื•ืŸ ื–ืขืŸ ืื•ื™ื‘ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื ื™ื’ืŸ ืขืคึผืขืก.

ื•ื•ืึธืก ื•ื•ืขื’ืŸ ื“ื™ ืจืขืฉื˜ ืคื•ืŸ ื“ื™ ื ื™ื™ึทืข ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืื™ืŸ PostgreSQL 12?

PostgreSQL 12 ื”ืื˜ ืึท ืคึผืœืึทืฅ ืคื•ืŸ ืงื™ืœ ื ื™ื™ึท ืคึฟืขื™ึดืงื™ื™ื˜ืŸ, ืคึฟื•ืŸ ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ื•ื ื˜ืขืจื–ื•ื›ืŸ JSON ื“ืึทื˜ืŸ ืžื™ื˜ ื ืึธืจืžืึทืœ SQL / JSON ืžืึทืจืฉืจื•ื˜ ืื•ื™ืกื“ืจื•ืงืŸ ืฆื• ืžื•ืœื˜ื™-ืคืึทืงื˜ืึธืจ ืึธื˜ืขื ื˜ืึทืงื™ื™ืฉืึทืŸ ืžื™ื˜ ืึท ืคึผืึทืจืึทืžืขื˜ืขืจ clientcert=verify-full, ื‘ืืฉืืคืŸ ืฉืคืืœื˜ืŸ ืื•ืŸ ืคื™ืœ ืžืขืจ. ื’ืขื ื•ื’ ืคึฟืึทืจ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ืคึผืึธืกื˜ืŸ.

ื•ื•ื™ PostgreSQL 10, PostgreSQL 12 ื•ื•ืขื˜ ืคึฟืึทืจื‘ืขืกืขืจืŸ ื“ื™ ืงื•ื™ืœืขืœื“ื™ืง ืคืึธืจืฉื˜ืขืœื•ื ื’ ื’ืœื™ื™ืš ื ืึธืš ื“ื™ ืึทืคึผื’ืจื™ื™ื“. ืื™ืจ, ืคื•ืŸ ืงื•ืจืก, ืงืขื ืขืŸ ื”ืึธื‘ืŸ ื“ื™ื™ืŸ ืื™ื™ื’ืŸ ื•ื•ืขื’ - ืคึผืจื•ื‘ื™ืจืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื•ื ื˜ืขืจ ืขื ืœืขืš ื˜ื ืึธื™ื ืื•ื™ืฃ ื“ื™ ืคึผืจืึธื“ื•ืงืฆื™ืข ืกื™ืกื˜ืขื ืื™ื™ื“ืขืจ ื’ืขื‘ืŸ ื™ืžืคึผืจื•ื•ื•ืžืึทื ืฅ, ื•ื•ื™ ืื™ืš ื”ืึธื‘ ืžื™ื˜ PostgreSQL 10. ืืคื™ืœื• ืื•ื™ื‘ PostgreSQL 12 ืื™ื– ืฉื•ื™ืŸ ืžืขืจ ืกื˜ืึทื‘ื™ืœ ื•ื•ื™ ืื™ืš ื“ืขืจื•ื•ืึทืจื˜, ื˜ืึธืŸ ื ื™ื˜ ื–ื™ื™ืŸ ืคื•ื™ืœ ืื™ืŸ ื˜ืขืกื˜ื™ื ื’ ืคึผืจืึธื’ืจืึทืžืขืŸ ื•ื  ื“ื•ืจืš, ืื™ื™ื“ืขืจ ืจื™ืœื™ืกื™ื ื’ ื–ื™ื™ ืื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’