ΠΠ°Π·Ρ Π΄Π°Π½Π½ΡΡ Π½Π° PostgreSQL Π΄Π°Π²Π½ΠΎ ΡΡΠ°Π»ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ 1Π‘:ΠΡΠ΅Π΄ΠΏΡΠΈΡΡΠΈΠ΅ β ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΈ Π²ΡΡΠΎΠΊΠΎΠ½Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ . ΠΠ΄Π½Π°ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡ ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ 1Π‘ Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π‘Π£ΠΠ ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, ΠΎΡΠΊΠ»Π°Π΄ΡΠ²Π°Ρ ΠΈΡ "Π½Π° ΠΏΠΎΡΠΎΠΌ". ΠΡΠ° ΠΎΡΠΈΠ±ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΎΠΈΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π½ΠΎ ΠΈ ΠΏΠΎΡΠ΅ΡΠΈ ΠΊΡΠΈΡΠΈΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ ΡΡΠ·Π²ΠΈΠΌΡΡ Π²Π΅ΡΡΠΈΠΉ.
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΏΠ°ΡΡΠΈ Π΄Π»Ρ PostgreSQL ΠΏΠΎΠ΄ 1Π‘ β ΡΡΠΎ Π½Π΅ ΠΏΡΠΈΡ
ΠΎΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², Π° ΠΆΠΈΠ·Π½Π΅Π½Π½Π°Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ. ΠΡ ΡΠ·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ΅ΡΠ°ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ (ΠΎΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π² Π·Π°ΠΏΡΠΎΡΠ°Ρ
Π΄ΠΎ ΡΡΠ΅ΡΠ΅ΠΊ ΠΏΠ°ΠΌΡΡΠΈ), ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π²Π»ΠΈΡΡΡ Π½Π° ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠΈΠΏΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΡΡΠ΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ 503 Service Unavailable Π² ΡΠ°ΠΌΡΠΉ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ ΠΌΠ΅ΡΡΡΠ° ΠΈΠ»ΠΈ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ΅Π³Π»Π°ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΎΡΡΠ΅ΡΠ½ΠΎΡΡΠΈ.
ΠΡΠΎΠ±ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ΄Π΅Π»ΠΈΠΌ ΡΠΊΡΡΡΡΠΌ ΡΠΈΡΠΊΠ°ΠΌ: ΠΏΠΎΡΠ΅ΠΌΡ Π΄Π°ΠΆΠ΅ "ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡΠ°Ρ" Π±Π°Π·Π° Π±Π΅Π· ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ "ΡΠΏΠ°ΡΡΡ" ΠΏΡΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠΈ Π½Π°Π³ΡΡΠ·ΠΊΠΈ, ΠΈ ΠΊΠ°ΠΊ ΠΏΠ°ΡΡΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠΈΠΏΠΈΡΠ½ΡΡ
ΠΎΡΠΈΠ±ΠΎΠΊ Π²ΡΠΎΠ΄Π΅ "out of shared memory" ΠΈΠ»ΠΈ "could not extend file". ΠΠ°ΡΠ΅ΡΠΈΠ°Π» Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΈ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠ°ΠΌ, ΠΈ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ
ΠΎΡΡΡ ΠΏΠΎΠ½ΡΡΡ Π±ΠΈΠ·Π½Π΅Ρ-ΡΡΡΠ΅ΠΊΡ ΠΎΡ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ.
1. ΠΠ°ΠΊ ΠΏΠ°ΡΡΠΈ PostgreSQL Π²Π»ΠΈΡΡΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ 1Π‘
ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΈΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ PostgreSQL ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΡ
ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ 1Π‘ β ΡΡΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΈΠΏΠΈΡΠ½ΡΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ 1Π‘ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ SQL-ΠΊΠΎΠ΄ Ρ Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠ½ΡΠΌΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΠΌΠΈ: Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ
ΠΏΠΎΠ΄Π·Π°ΠΏΡΠΎΡΠΎΠ², Π°ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΡΠ°Π±Π»ΠΈΡ ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π²ΡΠΎΠ΄Π΅ WITH (CTE). ΠΠ°ΡΡΠΈ Π‘Π£ΠΠ ΡΠ°ΡΡΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ
ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π².
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Π²Π΅ΡΡΠΈΠΈ PostgreSQL 14.5 Π±ΡΠ»Π° ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π° ΠΎΡΠΈΠ±ΠΊΠ°, ΠΈΠ·-Π·Π° ΠΊΠΎΡΠΎΡΠΎΠΉ Π·Π°ΠΏΡΠΎΡΡ Ρ JOIN LATERAL (ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π² 1Π‘ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ) ΠΌΠΎΠ³Π»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² 3-5 ΡΠ°Π· Π΄ΠΎΠ»ΡΡΠ΅ ΠΈΠ·-Π·Π° Π½Π΅ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½Π°. ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΡΡΠ° Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ»ΠΎΠΆΠ½ΡΡ
ΠΎΡΡΠ΅ΡΠΎΠ² ΡΠΎΠΊΡΠ°ΡΠ°Π»ΠΎΡΡ Π½Π° 40-60% β ΠΊΡΠΈΡΠΈΡΠ½ΠΎ Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌ Ρ Π±Π°Π·ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΌΠΎΠΌ 100+ ΠΠ.
- π Π£ΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ²: ΠΠ°ΡΡΠΈ ΡΠ°ΡΡΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ
GINΠΈGiST, ΠΊΠΎΡΠΎΡΡΠ΅ 1Π‘ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΈ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊΠ°ΠΌΠΈ. - π Π‘Π½ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ: ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π² ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ΅
MVCC(ΠΌΠ½ΠΎΠ³ΠΎΠ²Π΅ΡΡΠΈΠΎΠ½Π½ΠΎΡΡΡ) ΡΠΌΠ΅Π½ΡΡΠ°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² ΠΏΡΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. - πΎ ΠΠΊΠΎΠ½ΠΎΠΌΠΈΡ Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°: ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ°
TOAST(Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ) ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ Π±Π°Π·Ρ Π½Π° 10-15% Π±Π΅Π· ΠΏΠΎΡΠ΅ΡΠΈ Π΄Π°Π½Π½ΡΡ .
ΠΠ°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ 1Π‘ Π½Π° PostgreSQL Π·Π°Π²ΠΈΡΠΈΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡ "ΠΆΠ΅Π»Π΅Π·Π°", Π½ΠΎ ΠΈ ΠΎΡ Π²Π΅ΡΡΠΈΠΈ Π‘Π£ΠΠ. Π’Π΅ΡΡΡ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΡΡ Π±Π°Π·Π°Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Ρ PostgreSQL 12.4 Π½Π° 14.8 Π΄Π°Π΅Ρ ΠΏΡΠΈΡΠΎΡΡ ΡΠΊΠΎΡΠΎΡΡΠΈ Π΄ΠΎ 2 ΡΠ°Π· ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ "ΠΠ°ΠΊΠ°Π· ΠΏΠΎΠΊΡΠΏΠ°ΡΠ΅Π»Ρ" ΠΈ "Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΎΠ²Π°ΡΠΎΠ² ΠΈ ΡΡΠ»ΡΠ³" β Π·Π° ΡΡΠ΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΡΡΠΎΠΊ.
2. ΠΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΠ°ΡΡΠΈ
ΠΠ½ΠΎΠ³ΠΈΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡ ΡΠ·Π½Π°ΡΡ ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±Π°Π·Π° "ΠΏΠ°Π΄Π°Π΅Ρ" Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΎΠΏ-5 ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ Π±Π°Π³ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎ ΠΈΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π² ΠΏΠ°ΡΡΠ°Ρ ΠΈ Π½Π°ΠΏΡΡΠΌΡΡ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ 1Π‘:
| ΠΡΠΈΠ±ΠΊΠ° Π² PostgreSQL | ΠΡΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ Π² 1Π‘ | ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ |
|---|---|---|
"could not write to hash-join temporary file" |
ΠΠ°Π²ΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΈ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΡΡΠ΅ΡΠΎΠ² Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΎΠΊ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, "ΠΠ½Π°Π»ΠΈΠ· ΠΏΡΠΎΠ΄Π°ΠΆ ΠΏΠΎ Π½ΠΎΠΌΠ΅Π½ΠΊΠ»Π°ΡΡΡΠ΅ ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π³Π΅Π½ΡΠ°ΠΌ") | 13.3, 14.2 |
"out of shared memory" |
ΠΡΠ»Π΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° 1Π‘ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ "ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠ°ΠΌΡΡΠΈ" ΠΏΡΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ 50+ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ | 12.7, 14.5 |
"tuple concurrently updated" |
ΠΡΠΈΠ±ΠΊΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΡΠΈ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ² Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΠΌΠ°ΡΡΠΎΠ²ΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ) | 14.1, 15.0 |
"invalid memory alloc request size" |
ΠΠ°Π΄Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΊΡΡΠΏΠ½ΡΡ Π±Π°Π·Ρ (100+ ΠΠ) ΡΠ΅ΡΠ΅Π· pg_dump |
13.6, 14.4 |
ΠΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΎΠΏΠ°ΡΠ½Ρ ΠΎΡΠΈΠ±ΠΊΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π·Π°ΠΏΡΠΎΡΠΎΠ² (ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ max_parallel_workers_per_gather). Π Π²Π΅ΡΡΠΈΡΡ
Π΄ΠΎ 14.3 ΠΏΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ
ΡΡΠ»ΠΎΠ²ΠΈΡΡ
1Π‘ ΠΌΠΎΠ³Π»Π° Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π°ΠΏΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΈ ΠΊ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ. ΠΠ°ΡΡ ΠΈΡΠΏΡΠ°Π²Π»ΡΠ» ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΡΠ·Π½Π°Π²Π°Π»ΠΈ ΠΎ Π½Π΅ΠΉ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±Π°Π·Π° ΠΏΠ΅ΡΠ΅ΡΡΠ°Π²Π°Π»Π° ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π½Π° Π·Π°ΠΏΡΠΎΡΡ.
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΡΠ»ΠΈ Π²Π°ΡΠ° Π±Π°Π·Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° PostgreSQL 12.x ΠΈΠ»ΠΈ ΡΡΠ°ΡΡΠ΅, ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ "relation mapping not found" Π² Π»ΠΎΠ³Π°Ρ
. ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΡΠ²ΠΈΡΡΡΡ ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ 1Π‘ Π΄ΠΎ Π²Π΅ΡΡΠΈΠΈ 8.3.20+ ΠΈ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΏΠΎΡΠ΅ΡΠ΅ ΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠΌΠΈ ΠΈ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ.
3. ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ: ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ PostgreSQL ΠΎΠΏΠ°ΡΠ½Ρ Π΄Π»Ρ 1Π‘
ΠΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ°ΠΌΡΡ Π½Π΅Π΄ΠΎΠΎΡΠ΅Π½Π΅Π½Π½ΡΡ ΠΏΡΠΈΡΠΈΠ½ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΡΡΠ΅ΠΉ ΡΠ²Π»ΡΡΡΡΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ. 1Π‘ ΡΠ°ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΊΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ: ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΎΠ², ΡΠΈΠ½Π°Π½ΡΠΎΠ²ΡΠΌΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΠ°ΠΉΠ½Π°ΠΌΠΈ. Π£ΡΡΠ°ΡΠ΅Π²ΡΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ PostgreSQL ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π±ΡΠ΅ΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΊΠ°ΠΊ ΠΈΠ·Π½ΡΡΡΠΈ ΡΠ΅ΡΠΈ, ΡΠ°ΠΊ ΠΈ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ CVE-2021-32027 (ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π° Π² PostgreSQL 13.3) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ»Π° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎΠ²ΡΡΠΈΡΡ ΡΠ²ΠΎΠΈ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ Π΄ΠΎ ΡΡΠΏΠ΅ΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ΅ΡΠ΅Π· ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΈ Ρ SECURITY DEFINER ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ. Π ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ 1Π‘ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π»ΠΎ, ΡΡΠΎ Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Ρ ΠΏΡΠ°Π²Π°ΠΌΠΈ "Π’ΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡ" ΠΌΠΎΠ³ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ΅Ρ
Π΄Π°Π½Π½ΡΡ
Π±Π°Π·Ρ.
- π Π£ΡΠ΅ΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ : Π Π²Π΅ΡΡΠΈΡΡ Π΄ΠΎ 14.2 ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π»Π° ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ ΡΠ΅ΡΠ΅Π· ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π·Π°ΠΏΡΠΎΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π΄Π°Π½Π½ΡΠΌ Π΄ΡΡΠ³ΠΈΡ ΡΡ Π΅ΠΌ (Π² 1Π‘ β Π΄ΡΡΠ³ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΡ Π±Π°Π· Π½Π° ΡΠΎΠΌ ΠΆΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ΅).
- π΅οΈ ΠΡΠ°ΠΊΠΈ ΡΠ΅ΡΠ΅Π· ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ: ΠΠΎΠΏΡΠ»ΡΡΠ½ΠΎΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅
pg_cron, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ΅ Π΄Π»Ρ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π·Π°Π΄Π°Ρ Π² 1Π‘, ΠΈΠΌΠ΅Π»ΠΎ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ Π² Π²Π΅ΡΡΠΈΡΡ Π΄ΠΎ 1.3-1, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄. - π‘ Π£Π΄Π°Π»Π΅Π½Π½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°: Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΡ
CVE-2022-1552ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ»Π° Π°ΡΠ°ΠΊΡΡΡΠ΅ΠΌΡ ΡΠ΅ΡΠ΅Π· ΡΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ Ρ ΠΏΡΠ°Π²Π°ΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ PostgreSQL.
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ 1Π‘ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ SQL-Π·Π°ΠΏΡΠΎΡΠΎΠ². ΠΡΠΎ ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΈΡΠΊΠΈ: Π΅ΡΠ»ΠΈ Π² Π±Π°Π·Π΅ Π΅ΡΡΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ Π²Π½Π΅Π΄ΡΠΈΡΡ SQL-ΠΊΠΎΠ΄, Π·Π»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠΌΠΈ ΡΠ΅ΡΠ΅Π· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΡΠΎΡΠΌΡ 1Π‘, Π½Π΅ ΠΈΠΌΠ΅Ρ ΠΏΡΡΠΌΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π‘Π£ΠΠ.
ΠΠ΅ΡΠ΅Π΄ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ ΠΏΠ°ΡΡΠ° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Ρ Π²Π°ΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ 1Π‘. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ PostgreSQL ΠΌΠΎΠ³ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ postgresql.conf, ΡΡΠΎ ΠΏΠΎΠ²Π»ΠΈΡΠ΅Ρ Π½Π° ΡΠ°Π±ΠΎΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°.
4. Π‘ΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ ΠΏΠ°ΡΡΠ΅ΠΉ PostgreSQL Ρ Π²Π΅ΡΡΠΈΡΠΌΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ 1Π‘
ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΌΡΡ ΡΠ°ΡΡΡΡ Π²ΠΎΠΏΡΠΎΡΠΎΠ²: "ΠΠΎΠ³Ρ Π»ΠΈ Ρ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ PostgreSQL, Π΅ΡΠ»ΠΈ Ρ ΠΌΠ΅Π½Ρ ΡΡΠ°ΡΠ°Ρ Π²Π΅ΡΡΠΈΡ 1Π‘?". ΠΡΠ²Π΅Ρ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΌΠ°ΡΡΠΈΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅Ρ ΡΠΈΡΠΌΠ° 1Π‘. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° 8.3.18 ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ PostgreSQL Π΄ΠΎ Π²Π΅ΡΡΠΈΠΈ 13.x, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ°ΡΡΠΈ 13-ΠΉ Π²Π΅ΡΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π»ΠΎΠΌΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΈΠΏΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ "ΠΡΡ Π³Π°Π»ΡΠ΅ΡΠΈΡ ΠΏΡΠ΅Π΄ΠΏΡΠΈΡΡΠΈΡ 3.0".
ΠΠΎΡ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ:
- π 1Π‘ 8.3.20+: ΠΠΎΠ»Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° PostgreSQL 14.x ΠΈ 15.x, Π½ΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΎΠ²
psqlODBC. - β οΈ 1Π‘ 8.3.16-8.3.19: ΠΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π΄ΠΎ PostgreSQL 13.x, Π½ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ°ΡΡΠΈ 13.4+ ΠΌΠΎΠ³ΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ.
- π« 1Π‘ 8.3.15 ΠΈ Π½ΠΈΠΆΠ΅: ΠΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ PostgreSQL Π½ΠΎΠ²Π΅Π΅ 12.x ΠΈΠ·-Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π΅ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ.
ΠΠ΅ΡΠ΅Π΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊ Π²Π°ΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ 1Π‘. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² PostgreSQL 15 ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ ΡΠΎΡΠΌΠ°Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
ΡΠΈΠΏΠ° jsonb, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΏΠΎΠ»ΡΠΌΠΈ ΡΠΈΠΏΠ° "Π₯ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΠΠ½Π°ΡΠ΅Π½ΠΈΡ" Π² ΡΡΠ°ΡΡΡ
ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ
.
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ PostgreSQL Π² ΡΠ²ΡΠ·ΠΊΠ΅ Ρ 1Π‘:ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠΎΠ±ΠΎΡΠΎΡ ΠΈΠ»ΠΈ 1Π‘:ERP, ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ ΠΎΡΠΎΠ±ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΡΡΠΈ, Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°ΡΡΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ Ρ FULL TEXT SEARCH. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΠ°Π½ΠΆΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΡ
ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ², ΡΡΠΎ ΠΏΠΎΠ²Π»ΠΈΡΠ΅Ρ Π½Π° ΡΠ°Π±ΠΎΡΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ° ΠΏΠΎΠΈΡΠΊΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ².
Π§ΡΠΎ Π±ΡΠ΄Π΅Ρ Π΅ΡΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ PostgreSQL Π±Π΅Π· ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ?
ΠΡΠΈ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Π²Π΅ΡΡΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ:
1. ΠΠ°Π΄Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ 1Π‘ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ "unsupported frontend protocol"
2. ΠΠ΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ, Π²Π΅Π΄ΡΡΠ°Ρ ΠΊ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ²
3. ΠΠΎΡΠ΅ΡΡ Π΄Π°Π½Π½ΡΡ Π² ΠΏΠΎΠ»ΡΡ Ρ Π½Π΅ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π³Π΅ΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π² 1Π‘:ΠΠΎΠ³ΠΈΡΡΠΈΠΊΠ°)
4. ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π±Π°Π·Ρ ΠΈΠ· ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ, ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΉ Π½Π° ΡΡΠ°ΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ PostgreSQL
5. ΠΠΎΡΠ°Π³ΠΎΠ²Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΏΠ°ΡΡΠ°
ΠΡΠΎΡΠ΅ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ PostgreSQL Π΄Π»Ρ 1Π‘ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΡΠΎΠ±ΠΎΠΉ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎΡΡΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΏΠΎΡΠ΅ΡΠ΅ Π΄Π°Π½Π½ΡΡ . ΠΠΎΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ Π½Π°ΡΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ:
ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ: Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π΄Π°ΠΌΠΏ Π±Π°Π·Ρ ΡΠ΅ΡΠ΅Π·
pg_dumpΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ--format=customΠ΄Π»Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ°ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ. Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΡΠ΅Π·Π΅ΡΠ²Π½Π°Ρ ΠΊΠΎΠΏΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ Π½Π° ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΡ.ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°: ΠΠ°ΡΡΠΈ ΡΠ°ΡΡΠΎ ΡΡΠ΅Π±ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ° Π΄Π»Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ². ΠΠ° ΡΠ΅ΡΠ²Π΅ΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 30% ΠΎΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π±Π°Π·Ρ.
ΠΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ»ΡΠΆΠ± 1Π‘: ΠΡΠ΅ΠΊΡΠ°ΡΠΈΡΠ΅ Π²ΡΠ΅ ΡΠ΅Π°Π½ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ Π±Π°Π·ΠΎΠΉ ΡΠ΅ΡΠ΅Π·
ras cluster --disableΠΈ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π½Π΅Ρ Π°ΠΊΡΠΈΠ²Π½ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ (SELECT * FROM pg_stat_activity;).Π’Π΅ΡΡΠΎΠ²ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅: ΠΠ° ΡΠ΅ΡΡΠΎΠ²ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΡΠ°Π·Π²Π΅ΡΠ½ΠΈΡΠ΅ ΠΊΠΎΠΏΠΈΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΠΎΠΉ Π±Π°Π·Ρ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ ΡΠΈΠΏΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΡΡΠ°.
ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΡΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΎΡ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ° Π²Π°ΡΠ΅ΠΉ ΠΠ‘. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Debian/Ubuntu:
# ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ PostgreSQL
sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π²Π΅ΡΡΠΈΡ ΠΏΠ°ΡΡΠ°
sudo apt-get install postgresql-14=14.8-1.pgdg100+1
ΠΠΎΡΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅:
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π²Π΅ΡΡΠΈΠΈ PostgreSQL (psql --version)
ΠΠ°ΠΏΡΡΠΊ VACUUM FULL ANALYZE Π΄Π»Ρ Π²ΡΠ΅Ρ
Π±Π°Π· 1Π‘
Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΡΠΈΡΠΈΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ (ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ², ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΡΠ΅ΡΠΎΠ²)
ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ° (ANALYZE)
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π»ΠΎΠ³ΠΎΠ² Π½Π° ΠΎΡΠΈΠ±ΠΊΠΈ (tail -n 100 /var/log/postgresql/postgresql-14-main.log)-->
ΠΡΠΎΠ±ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ΄Π΅Π»ΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ shared_preload_libraries Π² postgresql.conf. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ°ΡΡΠΈ ΡΡΠ΅Π±ΡΡΡ ΡΠ²Π½ΠΎΠ³ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, pg_stat_statements), Π±Π΅Π· ΠΊΠΎΡΠΎΡΡΡ
1Π‘ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ.
6. ΠΠ°ΠΊ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΡΠ΅ΠΉ
Π ΡΡΠ½Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ°ΡΡΠ΅ΠΉ β ΡΡΡΠ΄ΠΎΠ΅ΠΌΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Ρ 1Π‘. Π ΡΡΠ°ΡΡΡΡ, Π΅ΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ:
- π€ Ansible: ΠΠ»Π΅ΠΉΠ±ΡΠΊΠΈ Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ PostgreSQL Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ Π±Π΅ΠΊΠ°ΠΏΠΎΠ².
- π¦ Patroni: ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠΌ PostgreSQL Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ rolling updates (ΠΏΠΎΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ΄ Π±Π΅Π· ΠΏΡΠΎΡΡΠΎΡ).
- π pg_upgrade: Π£ΡΠΈΠ»ΠΈΡΠ° Π΄Π»Ρ ΠΌΠ°ΠΆΠΎΡΠ½ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ 13.x Π½Π° 14.x) Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΡΠΎΡΡΠΎΡ.
ΠΠ»Ρ 1Π‘ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Patroni + HAProxy:
- ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΈ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΎΠΉ.
- ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΏΠ°ΡΡΠΈ Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ΅ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡΡ 1Π‘.
- ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ
failover, ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ Π½Π°Π³ΡΡΠ·ΠΊΡ Π½Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΡ. - ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ Π±ΡΠ²ΡΠΈΠΉ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ΅ΡΠ²Π΅Ρ (ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΡ).
Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΏΠ°ΡΡΠΈ Π±Π΅Π· ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΠ°ΠΆΠ½ΠΎ: Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ enterprise-Π»ΠΈΡΠ΅Π½Π·ΠΈΡ PostgreSQL ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠΊΡΡΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π²ΡΠΎΠ΄Π΅ Patroni Ρ Etcd.
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΡΠΎΠΊΡΠ°ΡΠ°Π΅Ρ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΎΡΡΠΎΡ Ρ 2-3 ΡΠ°ΡΠΎΠ² Π΄ΠΎ 10-15 ΠΌΠΈΠ½ΡΡ, Π½ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΠΈ ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΠΏΠΎΠ²Π΅ΡΠ΅Π½ΠΈΠΉ ΠΎ ΡΠ±ΠΎΡΡ .
7. Π§Π°ΡΡΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΈ ΠΊΠ°ΠΊ ΠΈΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ
ΠΠ°ΠΆΠ΅ ΠΎΠΏΡΡΠ½ΡΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡ ΠΈΠ½ΠΎΠ³Π΄Π° ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΏΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΡΡΠ΅ΠΉ. ΠΠΎΡ ΡΠΎΠΏ-5 ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΈΡ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ:
| ΠΡΠΈΠ±ΠΊΠ° | ΠΡΠΈΡΠΈΠ½Π° | Π Π΅ΡΠ΅Π½ΠΈΠ΅ |
|---|---|---|
"database files are incompatible" |
ΠΠΎΠΏΡΡΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π±Π°Π·Ρ ΠΎΡ ΡΡΠ°ΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ PostgreSQL ΠΊ Π½ΠΎΠ²ΠΎΠΉ Π±Π΅Π· ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ | ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ pg_upgrade ΠΈΠ»ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΄Π°ΠΌΠΏ Π½Π° Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ |
"could not access file "global/pg_control" |
ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠ°Π² Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ postgres Π½Π° ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π΄Π°Π½Π½ΡΡ
|
ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΏΡΠ°Π²Π°: chown -R postgres:postgres /var/lib/postgresql/14 |
| ΠΠ°Π²ΠΈΡΠ°Π½ΠΈΠ΅ 1Π‘ ΠΏΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ | ΠΠ΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Π²Π΅ΡΡΠΈΠΈ libpq Π² ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅ 1Π‘ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ΅ PostgreSQL |
ΠΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ 1Π‘ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ LD_LIBRARY_PATH |
"invalid catalog snapshot" |
ΠΡΠ΅ΡΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² PostgreSQL | ΠΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π±Π°Π·Ρ ΠΈΠ· Π±Π΅ΠΊΠ°ΠΏΠ° ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ pg_resetwal (ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎ!) |
ΠΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΊΠΎΠ²Π°ΡΠ½Π° ΠΎΡΠΈΠ±ΠΊΠ° Ρ Π½Π΅ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ΠΌ Π²Π΅ΡΡΠΈΠΉ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈ PostgreSQL Π΄ΠΎ 14.x, Π½ΠΎ Π·Π°Π±ΡΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ postgis, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ΅ Π² 1Π‘:ΠΠΎΠ³ΠΈΡΡΠΈΠΊΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠ°ΡΡΠ°ΠΌΠΈ, ΡΠΎ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΎΡΠΊΡΡΡΡ ΡΠΎΡΠΌΡ Ρ Π³Π΅ΠΎΠ΄Π°Π½Π½ΡΠΌΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΎΡΠΈΠ±ΠΊΡ "could not load library "postgis-3".
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ°ΡΡΠ° Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅ Π² Π»ΠΎΠ³Π°Ρ
1Π‘ ΠΎΡΠΈΠ±ΠΊΡ "ΠΡΠΈΠ±ΠΊΠ° Π‘Π£ΠΠ: ERROR: cache lookup failed for type 0", ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π±ΡΠ»Π° Π½Π°ΡΡΡΠ΅Π½Π° ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ
ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ². ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ β Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· Π±Π΅ΠΊΠ°ΠΏΠ° Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΡΡΠ° Π½Π° ΡΠΈΡΡΠΎΠΉ Π±Π°Π·Π΅.
FAQ: ΠΡΠ²Π΅ΡΡ Π½Π° ΡΠ°ΡΡΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ Π½Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ PostgreSQL, Π΅ΡΠ»ΠΈ 1Π‘ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎ?
Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ ΡΡΠΎ ΡΡΠ΅Π²Π°ΡΠΎ:
- Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΡΠΌΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ (ΡΠΈΡΠΊ ΡΡΠ΅ΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ )
- ΠΠ°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΠ΅ΠΌ "ΠΌΡΡΠΎΡΠ°" Π² Π±Π°Π·Π΅ (ΡΡ ΡΠ΄ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ)
- ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ 1Π‘ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ Ρ ΠΎΡΡ Π±Ρ ΡΠ°Π· Π² 6 ΠΌΠ΅ΡΡΡΠ΅Π².
ΠΠ°ΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ°ΡΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ Π² ΠΌΠΎΠ΅ΠΌ PostgreSQL?
ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ Π·Π°ΠΏΡΠΎΡ Π² psql:
SELECT version(), pg_setting('server_version_num')::int / 100 AS major_version;
ΠΠ»Ρ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° ΠΏΠ°ΡΡΠ΅ΠΉ:
SELECT name, setting FROM pg_settings WHERE name LIKE '%version%';
Π‘ΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ°ΡΡΠ°?
ΠΠ°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π±Π°Π·Ρ ΠΈ ΡΠΈΠΏΠ° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ:
- ΠΠΈΠ½ΠΎΡΠ½ΡΠΉ ΠΏΠ°ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 14.7 β 14.8): 5-15 ΠΌΠΈΠ½ΡΡ + Π²ΡΠ΅ΠΌΡ Π½Π° ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
- ΠΠ°ΠΆΠΎΡΠ½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 13.x β 14.x): 1-3 ΡΠ°ΡΠ° Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠ΅ΠΉ Π΄Π°Π½Π½ΡΡ
ΠΠ»Ρ ΠΊΡΡΠΏΠ½ΡΡ Π±Π°Π· (100+ ΠΠ) ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠΊΠ½ΠΎ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ Π½Π° 4-6 ΡΠ°ΡΠΎΠ².
Π§ΡΠΎ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΏΠ°ΡΡΠ° 1Π‘ ΡΡΠ°Π»Π° ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅?
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ:
- Π‘Π±ΡΠΎΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ: ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅
ANALYZEΠ΄Π»Ρ Π²ΡΠ΅Ρ ΡΠ°Π±Π»ΠΈΡ. - ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ»Π°Π½ΠΎΠ² Π·Π°ΠΏΡΠΎΡΠΎΠ²: ΠΡΠΎΠ²Π΅ΡΡΡΠ΅
EXPLAIN ANALYZEΠ΄Π»Ρ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² β Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΡ. - ΠΠΎΠ½ΡΠ»ΠΈΠΊΡ Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ: ΠΡΠΊΠ»ΡΡΠΈΡΠ΅ Π½Π΅ΠΊΡΠΈΡΠΈΡΠ½ΡΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
pg_stat_statements) ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΎΡΠΊΠ°ΡΠΈΡΡ ΠΏΠ°ΡΡ, Π΅ΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΡΠ»ΠΎ Π½Π΅ ΡΠ°ΠΊ?
ΠΠ°, Π½ΠΎ Ρ ΠΎΠ³ΠΎΠ²ΠΎΡΠΊΠ°ΠΌΠΈ:
- ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΠ΅Π·Π΅ΡΠ²Π½Π°Ρ ΠΊΠΎΠΏΠΈΡ β Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π΅Π΅ Π½Π° ΡΠΈΡΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ.
- ΠΠ»Ρ ΠΌΠΈΠ½ΠΎΡΠ½ΡΡ ΠΏΠ°ΡΡΠ΅ΠΉ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΠ΅ΡΠ΅ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΡΠ°ΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΠ²ΠΎΠΉ (Π½ΠΎ ΡΡΠΎ Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΡ Π΄Π°Π½Π½ΡΡ ).
- ΠΠ°ΠΆΠΎΡΠ½ΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ 13.x Π½Π° 14.x) ΠΎΡΠΊΠ°ΡΠΈΡΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ β ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· Π±Π΅ΠΊΠ°ΠΏΠ°.
ΠΡΠ΅Π³Π΄Π° ΡΠ΅ΡΡΠΈΡΡΠΉΡΠ΅ ΠΏΠ°ΡΡΠΈ Π½Π° ΠΊΠΎΠΏΠΈΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΠΎΠΉ Π±Π°Π·Ρ!