ืฉื“ืจื•ื’ ืœืขืฆืœื ื™ื: ื›ื™ืฆื“ 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 ื ืงืจืืช B-ืขืฅ. ืกื•ื’ ื–ื” ืฉืœ ืื™ื ื“ืงืก ืžื•ืชืื ืœืžืขืจื›ื•ืช ืื—ืกื•ืŸ.

ืื ื—ื ื• ืคืฉื•ื˜ ืžืฉืชืžืฉื™ื ื‘ืื•ืคืจื˜ื•ืจ CREATE INDEX ON some_table (some_column), ื•-PostgreSQL ืขื•ืฉื” ืขื‘ื•ื“ื” ืจื‘ื” ื›ื“ื™ ืœืฉืžื•ืจ ืขืœ ื”ืื™ื ื“ืงืก ืžืขื•ื“ื›ืŸ ื‘ื–ืžืŸ ืฉืื ื• ื›ืœ ื”ื–ืžืŸ ืžื›ื ื™ืกื™ื, ืžืขื“ื›ื ื™ื ื•ืžื•ื—ืงื™ื ืขืจื›ื™ื. ื”ื›ืœ ืขื•ื‘ื“ ืœื‘ื“, ื›ืžื• ื‘ืงืกื.

ืื‘ืœ ืœืื™ื ื“ืงืกื™ื ืฉืœ PostgreSQL ื™ืฉ ื‘ืขื™ื” ืื—ืช - ื”ื ื”ื ืžื ื•ืคื—ื™ื ื•ืชื•ืคืกื™ื ืฉื˜ื— ื“ื™ืกืง ื ื•ืกืฃ ื•ืžืคื—ื™ืชื™ื ืืช ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ืื—ื–ื•ืจ ื•ืขื“ื›ื•ืŸ ื ืชื•ื ื™ื. ื‘"ื ืคื™ื—ื•ืช" ืื ื™ ืžืชื›ื•ื•ืŸ ืœืฉืžื™ืจื” ืœื ื™ืขื™ืœื” ืขืœ ืžื‘ื ื” ื”ืื™ื ื“ืงืก. ื–ื” ืขืฉื•ื™ - ืื• ืœื - ืงืฉื•ืจ ืœื˜ืคื•ืœื•ืช ื”ืืฉืคื” ืฉื”ื™ื ืžืกื™ืจื” ืœึดืฉืึฐืื•ึนื‘ (ืชื•ื“ื” ืœืคื™ื˜ืจ ื’ืื’ืืŸ ืขืœ ื”ืžื™ื“ืข)ืคื™ื˜ืจ ื’'ื•ื’ื”ื’ืŸ)). ื ืคื™ื—ื•ืช ื”ืื™ื ื“ืงืก ื‘ื•ืœื˜ืช ื‘ืžื™ื•ื—ื“ ื‘ืขื•ืžืกื™ ืขื‘ื•ื“ื” ืฉื‘ื”ื ื”ืื™ื ื“ืงืก ืžืฉืชื ื” ื‘ืื•ืคืŸ ืืงื˜ื™ื‘ื™.

PostgreSQL 12 ืžืฉืคืจ ืžืื•ื“ ืืช ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ืื™ื ื“ืงืกื™ื ืฉืœ ืขืฅ B, ื•ื ื™ืกื•ื™ื™ื ืขื ืืžื•ืช ืžื™ื“ื” ื›ืžื• TPC-C ื”ืจืื• ืฉื‘ืžืžื•ืฆืข ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘-40% ืคื—ื•ืช ืžืงื•ื. ื›ืขืช ืื ื• ืžื‘ืœื™ื ืคื—ื•ืช ื–ืžืŸ ืœื ืจืง ื‘ืฉืžื™ืจื” ืขืœ ืื™ื ื“ืงืกื™ื ืฉืœ B-tree (ื›ืœื•ืžืจ, ื‘ืคืขื•ืœื•ืช ื›ืชื™ื‘ื”), ืืœื ื’ื ื‘ืฉืœื™ืคืช ื ืชื•ื ื™ื, ืžื›ื™ื•ื•ืŸ ืฉื”ืื™ื ื“ืงืกื™ื ื”ืจื‘ื” ื™ื•ืชืจ ืงื˜ื ื™ื.

ื™ื™ืฉื•ืžื™ื ืฉืžืขื“ื›ื ื™ื ื‘ืื•ืคืŸ ืคืขื™ืœ ืืช ื”ื˜ื‘ืœืื•ืช ืฉืœื”ื - ื‘ื“ืจืš ื›ืœืœ ื™ื™ืฉื•ืžื™ OLTP (ืขื™ื‘ื•ื“ ืขืกืงืื•ืช ื‘ื–ืžืŸ ืืžืช) - ื™ืฉืชืžืฉ ื‘ื“ื™ืกืง ื•ื™ืขื‘ื“ ื‘ืงืฉื•ืช ื‘ืฆื•ืจื” ื”ืจื‘ื” ื™ื•ืชืจ ื™ืขื™ืœื”. ื›ื›ืœ ืฉื™ืฉ ื™ื•ืชืจ ืฉื˜ื— ื“ื™ืกืง, ื›ืš ื™ืฉ ื™ื•ืชืจ ืžืงื•ื ืœื‘ืกื™ืก ื”ื ืชื•ื ื™ื ืœื’ื“ื•ืœ ืžื‘ืœื™ ืœืฉื“ืจื’ ืืช ื”ืชืฉืชื™ืช.

ืืกื˜ืจื˜ื’ื™ื•ืช ืฉื“ืจื•ื’ ืžืกื•ื™ืžื•ืช ื“ื•ืจืฉื•ืช ื‘ื ื™ื™ื” ืžื—ื“ืฉ ืฉืœ ืื™ื ื“ืงืกื™ B-tree ื›ื“ื™ ืœื ืฆืœ ืืช ื”ื™ืชืจื•ื ื•ืช ื”ืœืœื• (ืœืžืฉืœ. 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 ืžื”ื™ืจื•ืช ื™ื•ืชืจ ื‘ื˜ื‘ืœืื•ืช ืขื ืžื—ื™ืฆื•ืช ืžืจื•ื‘ื•ืช.

ื”ืงืœื˜ืช ื ืชื•ื ื™ื ื‘ืืžืฆืขื•ืช COPY - ื“ืจืš ืื’ื‘, ื–ื• ื“ืจืš ืžืฆื•ื™ื ืช ื”ื•ืจื“ืช ื ืชื•ื ื™ื ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ื•ื”ื ื” ื“ื•ื’ืžื” ืžืงื‘ืœ JSON - ื’ื ื˜ื‘ืœืื•ืช ืžื—ื•ืœืงื•ืช ื‘-PostgreSQL 12 ื”ืคื›ื• ืœื™ืขื™ืœื•ืช ื™ื•ืชืจ. ืขื COPY ื”ื›ืœ ื›ื‘ืจ ื”ื™ื” ืžื”ื™ืจ, ืื‘ืœ ื‘-PostgreSQL 12 ื–ื” ื˜ืก ืœื—ืœื•ื˜ื™ืŸ.

ื”ื•ื“ื•ืช ืœื™ืชืจื•ื ื•ืช ืืœื•, PostgreSQL ืžืืคืฉืจ ืœืš ืœืื—ืกืŸ ืžืขืจื›ื™ ื ืชื•ื ื™ื ื’ื“ื•ืœื™ื ืขื•ื“ ื™ื•ืชืจ ื•ืœื”ืคื•ืš ืื•ืชื ืœืงืœื™ื ื™ื•ืชืจ ืœืื—ื–ื•ืจ. ื•ืœืœื ืžืืžืฅ ืžืฆื™ื“ืš. ืื ืœืืคืœื™ืงืฆื™ื” ื™ืฉ ืžื—ื™ืฆื•ืช ืจื‘ื•ืช, ื›ื’ื•ืŸ ื”ืงืœื˜ืช ื ืชื•ื ื™ ืกื“ืจื•ืช ื–ืžืŸ, ืฉื“ืจื•ื’ ืคืฉื•ื˜ ื™ืฉืคืจ ืžืฉืžืขื•ืชื™ืช ืืช ื”ื‘ื™ืฆื•ืขื™ื ืฉืœื”.

ืœืžืจื•ืช ืฉื–ื” ืœื ื‘ื“ื™ื•ืง ืฉื™ืคื•ืจ "ืฉื“ืจื’ ื•ืชื™ื”ื ื”", PostgreSQL 12 ืžืืคืฉืจ ืœืš ืœื™ืฆื•ืจ ืžืคืชื—ื•ืช ื–ืจื™ื ืฉืžืชื™ื™ื—ืกื™ื ืœื˜ื‘ืœืื•ืช ืžื—ื•ืœืงื•ืช, ืžื” ืฉื”ื•ืคืš ืืช ื”ืžื—ื™ืฆื” ืœืชืขื ื•ื’ ืœืขื‘ื•ื“ ืื™ืชื.

ืขื ืฉืื™ืœืชื•ืช ืคืฉื•ื˜ ื”ืฉืชืคืจ ื‘ื”ืจื‘ื”

ื›ืืฉืจ ื”ื•ื—ืœ ืชื™ืงื•ืŸ ืขื‘ื•ืจ ื‘ื™ื˜ื•ื™ื™ ื˜ื‘ืœื” ื ืคื•ืฆื™ื ืžื•ื‘ื ื™ื (aka CTE, aka WITH queries), ืœื ื™ื›ื•ืœืชื™ ืœื—ื›ื•ืช ืœื›ืชื•ื‘ ืขืœ ืžืืžืจ ื›ืžื” ืฉืžื—ื™ื ื”ื™ื• ืžืคืชื—ื™ ืืคืœื™ืงืฆื™ื•ืช ืขื PostgreSQL. ื–ื• ืื—ืช ืžืื•ืชืŸ ืชื›ื•ื ื•ืช ืฉื™ืื™ืฆื• ืืช ื”ื™ื™ืฉื•ื. ืืœื ืื ื›ืŸ, ื›ืžื•ื‘ืŸ, ืืชื” ืžืฉืชืžืฉ ื‘-CTE.

ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืื ื™ ืžื•ืฆื ืฉืžืชื—ื™ืœื™ื ื‘-SQL ืื•ื”ื‘ื™ื ืœื”ืฉืชืžืฉ ื‘-CTE; ืื ืืชื” ื›ื•ืชื‘ ืื•ืชื ื‘ืฆื•ืจื” ืžืกื•ื™ืžืช, ื–ื” ื‘ืืžืช ืžืจื’ื™ืฉ ื›ืื™ืœื• ืืชื” ื›ื•ืชื‘ ืชื•ื›ื ื™ืช ื”ื›ืจื—ื™. ื‘ืื•ืคืŸ ืื™ืฉื™, ืื”ื‘ืชื™ ืœืฉื›ืชื‘ ืืช ื”ืฉืื™ืœืชื•ืช ื”ืืœื” ื›ื“ื™ ืœื”ืชืžืฆื ะฑะตะท CTE ื•ื”ื’ื“ืœืช ื”ืคืจื•ื“ื•ืงื˜ื™ื‘ื™ื•ืช. ืขื›ืฉื™ื• ื”ื›ืœ ืฉื•ื ื”.

PostgreSQL 12 ืžืืคืฉืจ ืœืš ืœื”ื˜ืžื™ืข ืกื•ื’ ืžืกื•ื™ื ืฉืœ CTE ืœืœื ืชื•ืคืขื•ืช ืœื•ื•ืื™ (SELECT), ืฉื‘ื• ื ืขืฉื” ืฉื™ืžื•ืฉ ืคืขื ืื—ืช ื‘ืœื‘ื“ ืœืงืจืืช ืกื•ืฃ ื”ื‘ืงืฉื”. ืื ื”ื™ื™ืชื™ ืขื•ืงื‘ ืื—ืจ ืฉืื™ืœืชื•ืช ื”-CTE ืฉื›ืชื‘ืชื™ ืžื—ื“ืฉ, ืจื•ื‘ืŸ ื”ื™ื• ื ื›ื ืกื•ืช ืœืงื˜ื’ื•ืจื™ื” ื”ื–ื•. ื–ื” ืขื•ื–ืจ ืœืžืคืชื—ื™ื ืœื›ืชื•ื‘ ืงื•ื“ ื‘ืจื•ืจ ืฉืขื›ืฉื™ื• ื’ื ืคื•ืขืœ ื‘ืžื”ื™ืจื•ืช.

ื™ืชืจ ืขืœ ื›ืŸ, PostgreSQL 12 ืžื™ื™ืขืœ ืืช ื‘ื™ืฆื•ืข SQL ื‘ืขืฆืžื•, ืžื‘ืœื™ ืฉืชืฆื˜ืจืš ืœืขืฉื•ืช ื“ื‘ืจ. ื•ืœืžืจื•ืช ืฉื›ื ืจืื” ืœื ืืฆื˜ืจืš ืœื‘ืฆืข ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืœ ืฉืื™ืœืชื•ืช ื›ืืœื” ืขื›ืฉื™ื•, ื–ื” ื ื”ื“ืจ ืฉ-PostgreSQL ืžืžืฉื™ืš ืœืขื‘ื•ื“ ืขืœ ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืœ ืฉืื™ืœืชื•ืช.

Just-in-Time (JIT) - ื›ืขืช ื‘ืจื™ืจืช ืžื—ื“ืœ

ื‘ืžืขืจื›ื•ืช PostgreSQL 12 ืขื ืชืžื™ื›ื” Llvm ื”ื™ื“ื•ืจ JIT ืžื•ืคืขืœ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ. ืงื•ื“ื ื›ืœ, ืืชื” ืžืงื‘ืœ ืชืžื™ื›ื” JIT ืขื‘ื•ืจ ื›ืžื” ืคืขื•ืœื•ืช ืคื ื™ืžื™ื•ืช, ื•ืฉื ื™ืช, ืฉืื™ืœืชื•ืช ืขื ื‘ื™ื˜ื•ื™ื™ื (ื”ื“ื•ื’ืžื” ื”ืคืฉื•ื˜ื” ื‘ื™ื•ืชืจ ื”ื™ื 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

ื”ื•ืกืคืช ืชื’ื•ื‘ื”