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