Π‘ΠΏΠΎΡΠ΅Π΄ ΠΌΠΎΠ΅ ΠΌΠΈΡΠ»Π΅ΡΠ΅, Π·Π° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΎΠ΄ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΈΡΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΡΠ°, 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 ΠΈΠΌΠ°Π°Ρ Π΅Π΄Π΅Π½ ΠΏΡΠΎΠ±Π»Π΅ΠΌ - ΡΠΈΠ΅
PostgreSQL 12 Π²ΠΎ Π³ΠΎΠ»Π΅ΠΌΠ° ΠΌΠ΅ΡΠ° Π³ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ Π½Π° Π-Π΄ΡΠ²ΠΎΡΠΎ, Π° Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠ΅ ΡΠΎ ΡΠ΅ΠΏΠ΅ΡΠΈ ΠΊΠ°ΠΊΠΎ TPC-C ΠΏΠΎΠΊΠ°ΠΆΠ°Π° Π΄Π΅ΠΊΠ° ΡΠ΅Π³Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π²ΠΎ ΠΏΡΠΎΡΠ΅ΠΊ 40% ΠΏΠΎΠΌΠ°Π»ΠΊΡ ΠΏΡΠΎΡΡΠΎΡ. Π‘Π΅Π³Π° ΡΡΠΎΡΠΈΠΌΠ΅ ΠΏΠΎΠΌΠ°Π»ΠΊΡ Π²ΡΠ΅ΠΌΠ΅ Π½Π΅ ΡΠ°ΠΌΠΎ Π½Π° ΠΎΠ΄ΡΠΆΡΠ²Π°ΡΠ΅ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ Π½Π° Π-Π΄ΡΠ²ΠΎΡΠΎ (Ρ.Π΅. Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π° Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠ΅), ΡΡΠΊΡ ΠΈ Π½Π° ΠΏΡΠ΅Π·Π΅ΠΌΠ°ΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, Π±ΠΈΠ΄Π΅ΡΡΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ ΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠΌΠ°Π»ΠΈ.
ΠΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠΎΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎ Π³ΠΈ Π°ΠΆΡΡΠΈΡΠ°Π°Ρ ΡΠ²ΠΎΠΈΡΠ΅ ΡΠ°Π±Π΅Π»ΠΈ - ΠΎΠ±ΠΈΡΠ½ΠΎ OLTP Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ (
ΠΠ΅ΠΊΠΎΠΈ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ Π·Π° Π½Π°Π΄Π³ΡΠ°Π΄Π±Π° Π±Π°ΡΠ°Π°Ρ ΠΎΠ±Π½ΠΎΠ²Π° Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ Π½Π° Π-Π΄ΡΠ²ΠΎΡΠΎ Π·Π° Π΄Π° ΡΠ΅ ΠΈΡΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΈΠ΄ΠΎΠ±ΠΈΠ²ΠΊΠΈ (Π½Π° ΠΏΡ.
ΠΠΌΠ° ΠΈ Π΄ΡΡΠ³ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°ΡΠ° Π½Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π·Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ°ΡΠ΅ Π²ΠΎ PostgreSQL 12. ΠΡΡΠ³Π° ΡΠ°Π±ΠΎΡΠ° ΠΊΠ°Π΄Π΅ ΡΡΠΎ ΠΈΠΌΠ°ΡΠ΅ Π½Π΅ΠΊΠΎΡΠ° ΠΌΠ°Π³ΠΈΡΠ° -
PostgreSQL 12 Π³ΠΈ Π½Π°ΠΌΠ°Π»ΠΈ ΡΡΠΎΡΠΎΡΠΈΡΠ΅ Π·Π° WAL Π·Π°ΠΏΠΈΡΠΈΡΠ΅ ΡΡΠΎ ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°Π½ΠΈ ΠΎΠ΄ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ GiST, GIN ΠΈ SP-GiST Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·Π³ΡΠ°Π΄Π±Π°ΡΠ° Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΎΡ. ΠΠ²Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΎΠΏΠΈΠΏΠ»ΠΈΠ²ΠΈ ΠΏΡΠΈΠ΄ΠΎΠ±ΠΈΠ²ΠΊΠΈ: Π·Π°ΠΏΠΈΡΠΈΡΠ΅ Π½Π° WAL Π·Π°Π·Π΅ΠΌΠ°Π°Ρ ΠΏΠΎΠΌΠ°Π»ΠΊΡ ΠΏΡΠΎΡΡΠΎΡ Π½Π° Π΄ΠΈΡΠΊΠΎΡ, Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΡΠ΅ ΡΠ΅ΠΏΡΠΎΠ΄ΡΡΠΈΡΠ°Π°Ρ ΠΏΠΎΠ±ΡΠ·ΠΎ, ΠΊΠ°ΠΊΠΎ Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π²ΡΠ°ΡΠ°ΡΠ΅ ΠΎΠ΄ ΠΊΠ°ΡΠ°ΡΡΡΠΎΡΠΈ ΠΈΠ»ΠΈ Π·Π° ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π°ΡΠ΅ Π½Π° Π²ΡΠ΅ΠΌΠ΅. ΠΠΊΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΡΠ°ΠΊΠ²ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ Π²ΠΎ Π²Π°ΡΠΈΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π³Π΅ΠΎΠΏΡΠΎΡΡΠΎΡΠ½ΠΈΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° PostGIS ΠΌΠ½ΠΎΠ³Ρ Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΡ GiST), ΠΎΠ²Π° Π΅ ΡΡΡΠ΅ Π΅Π΄Π½Π° ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° ΡΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ΅ Π³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ ΠΈΡΠΊΡΡΡΠ²ΠΎΡΠΎ Π±Π΅Π· Π²Π°ΡΠ° Π½Π°ΠΏΠΎΡ.
ΠΠΎΠ΄Π΅Π»Π±Π° - ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠ°, ΠΏΠΎΠ΄ΠΎΠ±ΡΠ°, ΠΏΠΎΠ±ΡΠ·ΠΎ
ΠΠΎΠ²Π΅Π΄Π΅Π½ Π΅ PostgreSQL 10
ΠΠΎ PostgreSQL 12, ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΎΡ Π·Π° ΠΏΠ°ΡΡΠΈΡΠΈΠΎΠ½ΠΈΡΠ°ΡΠ΅ ΡΡΠ°Π½Π°Π° Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ, ΠΎΡΠΎΠ±Π΅Π½ΠΎ Π°ΠΊΠΎ ΠΈΠΌΠ° ΠΈΠ»ΡΠ°Π΄Π½ΠΈΡΠΈ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ Π²ΠΎ ΡΠ°Π±Π΅Π»Π°ΡΠ°. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ Π±Π°ΡΠ°ΡΠ΅ΡΠΎ Π²Π»ΠΈΡΠ°Π΅ Π½Π° ΡΠ°ΠΌΠΎ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ Π²ΠΎ ΡΠ°Π±Π΅Π»Π° ΡΠΎ ΠΈΠ»ΡΠ°Π΄Π½ΠΈΡΠΈ ΠΎΠ΄ Π½ΠΈΠ², ΡΠΎΠ° ΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈ ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠ±ΡΠ·ΠΎ. ΠΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅ Π½Π΅ ΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈ ΡΠ°ΠΌΠΎ Π·Π° ΠΎΠ²ΠΈΠ΅ ΡΠΈΠΏΠΎΠ²ΠΈ ΠΏΡΠ°ΡΠ°ΡΠ°. ΠΡΡΠΎ ΡΠ°ΠΊΠ°, ΡΠ΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡΠ΅ ΠΊΠΎΠ»ΠΊΡ ΡΠ΅ ΠΏΠΎΠ±ΡΠ·ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ INSERT Π½Π° ΡΠ°Π±Π΅Π»ΠΈ ΡΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ.
Π‘Π½ΠΈΠΌΠ°ΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ²ΠΈΠ΅ ΠΏΡΠ΅Π΄Π½ΠΎΡΡΠΈ, PostgreSQL Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ ΡΡΡΠ΅ ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠΈ Π·Π±ΠΈΡΠΊΠΈ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΈ Π΄Π° Π³ΠΎ ΠΎΠ»Π΅ΡΠ½ΠΈΡΠ΅ Π½ΠΈΠ²Π½ΠΎΡΠΎ Π²ΡΠ°ΡΠ°ΡΠ΅. Π Π±Π΅Π· Π½Π°ΠΏΠΎΡ ΠΎΠ΄ Π²Π°ΡΠ° ΡΡΡΠ°Π½Π°. ΠΠΊΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³Ρ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π΅ ΡΠ½ΠΈΠΌΠ°ΡΠ΅ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π·Π° Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠΈ ΡΠ΅ΡΠΈΠΈ, Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π°ΡΠ° Π½Π°Π΄Π³ΡΠ°Π΄Π±Π° Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ΅ Π³ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ Π½Π΅ΡΠ·ΠΈΠ½ΠΈΡΠ΅ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ.
ΠΠ°ΠΊΠΎ ΠΎΠ²Π° Π½Π΅ Π΅ Π±Π°Ρ ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°ΡΠ΅ Π·Π° βΠ½Π°Π΄Π³ΡΠ°Π΄Π±Π° ΠΈ ΡΠΆΠΈΠ²Π°ΡΠ΅β, PostgreSQL 12 Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΡΡΡΠ°Π½ΡΠΊΠΈ ΠΊΠ»ΡΡΠ΅Π²ΠΈ ΠΊΠΎΠΈ ΡΠΏΠ°ΡΡΠ²Π°Π°Ρ Π½Π° ΠΏΠ°ΡΡΠΈΡΠΈΠΎΠ½ΠΈΡΠ°Π½ΠΈ ΡΠ°Π±Π΅Π»ΠΈ, ΠΏΡΠ°Π²Π΅ΡΡΠΈ ΡΠ° ΠΏΠ°ΡΡΠΈΡΠΈΠΎΠ½ΠΈΡΠ°ΡΠ΅ΡΠΎ Π·Π°Π΄ΠΎΠ²ΠΎΠ»ΡΡΠ²ΠΎ Π·Π° ΡΠ°Π±ΠΎΡΠ°.
Π‘Π ΠΏΡΠ°ΡΠ°ΡΠ° ΡΠ°ΠΌΠΎ ΡΡΠΎ ΡΡΠ°Π½Π° ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΎ
ΠΠΎΠ³Π°
Π§Π΅ΡΡΠΎ ΠΎΡΠΊΡΠΈΠ²Π°ΠΌ Π΄Π΅ΠΊΠ° ΠΏΠΎΡΠ΅ΡΠ½ΠΈΡΠΈΡΠ΅ Π²ΠΎ SQL ΡΠ°ΠΊΠ°Π°Ρ Π΄Π° ΠΊΠΎΡΠΈΡΡΠ°Ρ CTE; Π°ΠΊΠΎ Π³ΠΈ ΠΏΠΈΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ Π½Π°ΡΠΈΠ½, Π½Π°Π²ΠΈΡΡΠΈΠ½Π° ΡΠ΅ ΡΡΠ²ΡΡΠ²ΡΠ²Π°ΡΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΏΠΈΡΡΠ²Π°ΡΠ΅ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°. ΠΠΈΡΠ½ΠΎ, ΠΌΠΈ ΡΠ΅ Π΄ΠΎΠΏΠ°Π΄Π½Π° Π΄Π° Π³ΠΈ ΠΏΡΠ΅ΠΏΠΈΡΡΠ²Π°ΠΌ ΠΎΠ²ΠΈΠ΅ ΠΏΡΠ°ΡΠ°ΡΠ° Π·Π° Π΄Π° ΡΠ΅ Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»Π°ΠΌ Π±Π΅Π· CTE ΠΈ Π·Π³ΠΎΠ»Π΅ΠΌΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΠΎΡΡΠ°. Π‘Π΅Π³Π° ΡΠ΅ Π΅ ΠΏΠΎΠΈΠ½Π°ΠΊΡ.
PostgreSQL 12 Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° Π²Π½Π΅ΡΠ΅ΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅Π½ ΡΠΈΠΏ Π½Π° CTE Π±Π΅Π· Π½Π΅ΡΠ°ΠΊΠ°Π½ΠΈ Π΅ΡΠ΅ΠΊΡΠΈ (SELECT
), ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΡΠ°ΠΌΠΎ Π΅Π΄Π½Π°Ρ ΠΏΡΠΈ ΠΊΡΠ°ΡΠΎΡ Π½Π° Π±Π°ΡΠ°ΡΠ΅ΡΠΎ. ΠΠΊΠΎ Π³ΠΈ ΡΠ»Π΅Π΄Π΅Π² ΠΏΡΠ°ΡΠ°ΡΠ°ΡΠ° Π·Π° CTE ΡΡΠΎ Π³ΠΈ ΠΏΡΠ΅ΠΏΠΈΡΠ°Π², ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΎΠ΄ Π½ΠΈΠ² ΡΠ΅ ΡΠΏΠ°ΡΠ°Π°Ρ Π²ΠΎ ΠΎΠ²Π°Π° ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΠ°. ΠΠ²Π° ΠΈΠΌ ΠΏΠΎΠΌΠ°Π³Π° Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈΡΠ΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ°Ρ ΡΠ°ΡΠ΅Π½ ΠΊΠΎΠ΄ ΠΊΠΎΡ ΡΠ΅Π³Π° ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ°Π±ΠΎΡΠΈ Π±ΡΠ·ΠΎ.
ΠΠΎΠΊΡΠ°Ρ ΡΠΎΠ°, PostgreSQL 12 Π³ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ° ΡΠ°ΠΌΠΎΡΠΎ ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π½Π° SQL, Π±Π΅Π· Π΄Π° ΠΌΠΎΡΠ°ΡΠ΅ Π΄Π° ΠΏΡΠ°Π²ΠΈΡΠ΅ Π½ΠΈΡΡΠΎ. Π ΠΈΠ°ΠΊΠΎ Π²Π΅ΡΠΎΡΠ°ΡΠ½ΠΎ Π½Π΅ΠΌΠ° Π΄Π° ΠΈΠΌΠ°ΠΌ ΠΏΠΎΡΡΠ΅Π±Π° Π΄Π° Π³ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΠΌ ΡΠ°ΠΊΠ²ΠΈΡΠ΅ ΠΏΡΠ°ΡΠ°ΡΠ° ΡΠ΅Π³Π°, ΠΎΠ΄Π»ΠΈΡΠ½ΠΎ Π΅ ΡΡΠΎ PostgreSQL ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΡΠ²Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠ° Π½Π° Π±Π°ΡΠ°ΡΠ°ΡΠ°.
Just-in-Time (JIT) - ΡΠ΅Π³Π° ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ
ΠΠ° ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ PostgreSQL 12 ΡΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ°
ΠΠΈΠ΄Π΅ΡΡΠΈ 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