ΠΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π²ΠΎΠΏΡΠΎΡ, Ρ ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ ΠΊ ΡΠ²ΠΎΠ΅ΠΌΡ DBA ΠΈΠ»ΠΈ Π²Π»Π°Π΄Π΅Π»Π΅Ρ Π±ΠΈΠ·Π½Π΅ΡΠ° β ΠΊ ΠΊΠΎΠ½ΡΡΠ»ΡΡΠ°Π½ΡΡ ΠΏΠΎ PostgreSQL, ΠΏΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° Π·Π²ΡΡΠΈΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ: Β«ΠΠΎΡΠ΅ΠΌΡ Π·Π°ΠΏΡΠΎΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π° Π±Π°Π·Π΅ ΡΠ°ΠΊ Π΄ΠΎΠ»Π³ΠΎ?Β»
Π’ΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ Π½Π°Π±ΠΎΡ ΠΏΡΠΈΡΠΈΠ½:
- Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ
ΠΊΠΎΠ³Π΄Π° Π²Ρ ΡΠ΅ΡΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ JOIN Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ CTE ΠΏΠΎ ΠΏΠ°ΡΠ΅ Π΄Π΅ΡΡΡΠΊΠΎΠ² ΡΡΡΡΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ - Π½Π΅Π°ΠΊΡΡΠ°Π»ΡΠ½Π°Ρ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°
Π΅ΡΠ»ΠΈ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΡΠΆΠ΅ ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΠΎΠ±ΡΠ°Π½Π½ΠΎΠΉ ANALYZE’ΠΎΠΌ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ°Π· - Β«Π·Π°ΡΡΠΊΒ» ΠΏΠΎ ΡΠ΅ΡΡΡΡΠ°ΠΌ
ΠΈ ΡΠΆΠ΅ Π½Π΅ Ρ Π²Π°ΡΠ°Π΅Ρ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΡ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΌΠΎΡΠ½ΠΎΡΡΠ΅ΠΉ CPU, ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΏΡΠΎΠΊΠ°ΡΠΈΠ²Π°ΡΡΡΡ Π³ΠΈΠ³Π°Π±Π°ΠΉΡΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΈΠ»ΠΈ Π΄ΠΈΡΠΊ Π½Π΅ ΡΡΠΏΠ΅Π²Π°Π΅Ρ Π·Π° Π²ΡΠ΅ΠΌΠΈ Β«Ρ ΠΎΡΠ΅Π»ΠΊΠ°ΠΌΠΈΒ» ΠΠ - Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΡΠΈΡΡΡΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²
Π Π΅ΡΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½Ρ Π² ΠΏΠΎΠΈΠΌΠΊΠ΅ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅, ΡΠΎ Π΄Π»Ρ Π²ΡΠ΅Π³ΠΎ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π½Π°ΠΌ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠ»Π°Π½Π° Π·Π°ΠΏΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
ΠΠΎ, ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠΎΠΉ ΠΆΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ,
Β«ΠΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΠ»Π°Π½Π° β ΡΡΠΎ ΠΈΡΠΊΡΡΡΡΠ²ΠΎ, ΠΈ ΡΡΠΎΠ±Ρ ΠΎΠ²Π»Π°Π΄Π΅ΡΡ ΠΈΠΌ, Π½ΡΠΆΠ΅Π½ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΉ ΠΎΠΏΡΡ, β¦Β»
ΠΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ ΠΈ Π±Π΅Π· Π½Π΅Π³ΠΎ, Π΅ΡΠ»ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠΈΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ!
ΠΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΠ»Π°Π½ Π·Π°ΠΏΡΠΎΡΠ°? ΠΠ°ΠΊ-ΡΠΎ Π²ΠΎΡ ΡΠ°ΠΊ:
Index Scan using pg_class_relname_nsp_index on pg_class (actual time=0.049..0.050 rows=1 loops=1)
Index Cond: (relname = $1)
Filter: (oid = $0)
Buffers: shared hit=4
InitPlan 1 (returns $0,$1)
-> Limit (actual time=0.019..0.020 rows=1 loops=1)
Buffers: shared hit=1
-> Seq Scan on pg_class pg_class_1 (actual time=0.015..0.015 rows=1 loops=1)
Filter: (relkind = 'r'::"char")
Rows Removed by Filter: 5
Buffers: shared hit=1
ΠΈΠ»ΠΈ Π²ΠΎΡ ΡΠ°ΠΊ:
"Append (cost=868.60..878.95 rows=2 width=233) (actual time=0.024..0.144 rows=2 loops=1)"
" Buffers: shared hit=3"
" CTE cl"
" -> Seq Scan on pg_class (cost=0.00..868.60 rows=9972 width=537) (actual time=0.016..0.042 rows=101 loops=1)"
" Buffers: shared hit=3"
" -> Limit (cost=0.00..0.10 rows=1 width=233) (actual time=0.023..0.024 rows=1 loops=1)"
" Buffers: shared hit=1"
" -> CTE Scan on cl (cost=0.00..997.20 rows=9972 width=233) (actual time=0.021..0.021 rows=1 loops=1)"
" Buffers: shared hit=1"
" -> Limit (cost=10.00..10.10 rows=1 width=233) (actual time=0.117..0.118 rows=1 loops=1)"
" Buffers: shared hit=2"
" -> CTE Scan on cl cl_1 (cost=0.00..997.20 rows=9972 width=233) (actual time=0.001..0.104 rows=101 loops=1)"
" Buffers: shared hit=2"
"Planning Time: 0.634 ms"
"Execution Time: 0.248 ms"
ΠΠΎ ΡΠΈΡΠ°ΡΡ ΠΏΠ»Π°Π½ ΡΠ΅ΠΊΡΡΠΎΠΌ Β«Ρ Π»ΠΈΡΡΠ°Β» β ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΈ Π½Π΅Π½Π°Π³Π»ΡΠ΄Π½ΠΎ:
- Π² ΡΠ·Π»Π΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΡΠΌΠΌΠ° ΠΏΠΎ ΡΠ΅ΡΡΡΡΠ°ΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²Π°
ΡΠΎ Π΅ΡΡΡ ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ»ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ·Π»Π°, ΠΈΠ»ΠΈ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²ΠΎΡ ΡΡΠΎ ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ ΠΏΠΎΠ΄Π½ΡΠ»ΠΎ Π΄Π°Π½Π½ΡΡ Ρ Π΄ΠΈΡΠΊΠ° β Π½ΡΠΆΠ½ΠΎ ΠΊΠ°ΠΊ-ΡΠΎ Π²ΡΡΠΈΡΠ°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ - Π²ΡΠ΅ΠΌΡ ΡΠ·Π»Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΌΠ½ΠΎΠΆΠ°ΡΡ Π½Π° loops
Π΄Π°, Π²ΡΡΠΈΡΠ°Π½ΠΈΠ΅ Π΅ΡΠ΅ Π½Π΅ ΡΠ°ΠΌΠ°Ρ ΡΠ»ΠΎΠΆΠ½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ Π½Π°Π΄ΠΎ Π΄Π΅Π»Π°ΡΡ Β«Π² ΡΠΌΠ΅Β» β Π²Π΅Π΄Ρ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΡΡΠ΅Π΄Π½Π΅Π½Π½ΠΎΠ΅ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ·Π»Π°, Π° ΠΈΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΡΠ½ΠΈ - Π½Ρ, ΠΈ Π²ΡΠ΅ ΡΡΠΎ Π²ΠΌΠ΅ΡΡΠ΅ ΠΌΠ΅ΡΠ°Π΅Ρ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π½Π° Π³Π»Π°Π²Π½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ β ΡΠ°ΠΊ ΠΊΡΠΎ ΠΆΠ΅ Β«ΡΠ°ΠΌΠΎΠ΅ ΡΠ»Π°Π±ΠΎΠ΅ Π·Π²Π΅Π½ΠΎΒ»?
ΠΠΎΠ³Π΄Π° ΠΌΡ ΠΏΠΎΠΏΡΡΠ°Π»ΠΈΡΡ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ Π²ΡΠ΅ ΡΡΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΡΠΎΡΠ½ΡΠΌ Π½Π°ΡΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΡΠΎ ΠΏΠΎΠ½ΡΠ»ΠΈ, ΡΡΠΎ ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π²ΠΎΡ ΡΠ°ΠΊ:
Π, Π·Π½Π°ΡΠΈΡ, Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½β¦
ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ
Π Π½Π΅ΠΌ ΠΌΡ ΠΏΠΎΡΡΠ°ΡΠ°Π»ΠΈΡΡ ΡΠΎΠ±ΡΠ°ΡΡ Π²ΡΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΠΌΠ΅Ρ
Π°Π½ΠΈΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΠΏΠΎ ΠΏΠ»Π°Π½Ρ ΠΈ Π·Π°ΠΏΡΠΎΡΡ ΠΏΠΎΠ½ΡΡΡ, Β«ΠΊΡΠΎ Π²ΠΈΠ½ΠΎΠ²Π°Ρ ΠΈ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡΒ». ΠΡ, ΠΈ ΡΠ°ΡΡΡΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΎΠΏΡΡΠ° ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ Ρ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎΠΌ.
ΠΡΡΡΠ΅ΡΠ°ΠΉΡΠ΅ ΠΈ ΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ β
ΠΠ°Π³Π»ΡΠ΄Π½ΠΎΡΡΡ ΠΏΠ»Π°Π½ΠΎΠ²
ΠΠ΅Π³ΠΊΠΎ Π»ΠΈ ΠΏΠΎΠ½ΡΡΡ ΠΏΠ»Π°Π½, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ?
Seq Scan on pg_class (actual time=0.009..1.304 rows=6609 loops=1)
Buffers: shared hit=263
Planning Time: 0.108 ms
Execution Time: 1.800 ms
ΠΠ΅ ΠΎΡΠ΅Π½Ρ.
ΠΠΎ Π²ΠΎΡ ΡΠ°ΠΊ, Π² ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΎΡΠ΄Π΅Π»Π΅Π½Ρ β ΡΠΆΠ΅ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΏΠΎΠ½ΡΡΠ½Π΅Π΅:
ΠΠΎ Π΅ΡΠ»ΠΈ ΠΏΠ»Π°Π½ ΠΏΠΎΡΠ»ΠΎΠΆΠ½Π΅Π΅ β Π½Π° ΠΏΠΎΠΌΠΎΡΡ ΠΏΡΠΈΠ΄Π΅Ρ piechart ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎ ΡΠ·Π»Π°ΠΌ:
ΠΡ, Π° Π΄Π»Ρ ΡΠ°ΠΌΡΡ
ΡΠ»ΠΎΠΆΠ½ΡΡ
Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Π½Π° ΠΏΠΎΠΌΠΎΡΡ ΡΠΏΠ΅ΡΠΈΡ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ:
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π±ΡΠ²Π°ΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΏΠ»Π°Π½ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΡΠ½Ρ:
Π‘ΡΡΡΠΊΡΡΡΠ½ΡΠ΅ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ
ΠΡ, Π° Π΅ΡΠ»ΠΈ Π²ΡΡ ΡΡΡΡΠΊΡΡΡΠ° ΠΏΠ»Π°Π½Π° ΠΈ Π΅Π³ΠΎ Π±ΠΎΠ»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΡΠ° ΡΠΆΠ΅ ΡΠ°Π·Π»ΠΎΠΆΠ΅Π½Ρ ΠΈ Π²ΠΈΠ΄Π½Ρ β ΠΏΠΎΡΠ΅ΠΌΡ Π±Ρ Π½Π΅ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΈΡΡ ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ, ΠΈ Π½Π΅ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ Β«ΡΡΡΡΠΊΠΈΠΌ ΡΠ·ΡΠΊΠΎΠΌΒ»?
Π’Π°ΠΊΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ ΠΌΡ ΡΠΎΠ±ΡΠ°Π»ΠΈ ΡΠΆΠ΅ ΠΏΠ°ΡΡ Π΄Π΅ΡΡΡΠΊΠΎΠ².
ΠΠΎΡΡΡΠΎΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ°ΠΉΠ»Π΅Ρ Π·Π°ΠΏΡΠΎΡΠ°
Π’Π΅ΠΏΠ΅ΡΡ, Π΅ΡΠ»ΠΈ Π½Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌΡΠΉ ΠΏΠ»Π°Π½ Π½Π°Π»ΠΎΠΆΠΈΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ Π·Π°ΠΏΡΠΎΡ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΠ»ΠΎ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ β ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π²ΠΎΡ ΡΠ°ΠΊ:
β¦ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΡΠ°ΠΊ:
ΠΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π² Π·Π°ΠΏΡΠΎΡ
ΠΡΠ»ΠΈ Π²Ρ Β«ΠΏΡΠΈΡΠ΅ΠΏΠΈΠ»ΠΈΒ» ΠΊ ΠΏΠ»Π°Π½Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΏΡΠΎΡ, Π½ΠΎ ΠΈ Π΅Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈΠ· DETAIL-ΡΡΡΠΎΠΊΠΈ Π»ΠΎΠ³Π°, ΡΠΎ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ²:
- Ρ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² Π·Π°ΠΏΡΠΎΡ
Π΄Π»Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π° ΡΠ²ΠΎΠ΅ΠΉ Π±Π°Π·Π΅ ΠΈ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²ΠΊΠΈSELECT 'const', 'param'::text;
- Ρ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠ΅ΡΠ΅Π· PREPARE/EXECUTE
Π΄Π»Ρ ΡΠΌΡΠ»ΡΡΠΈΠΈ ΡΠ°Π±ΠΎΡΡ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ°, ΠΊΠΎΠ³Π΄Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ°ΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Π° β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Π½Π° ΡΠ΅ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ°Π±Π»ΠΈΡΠ°ΡDEALLOCATE ALL; PREPARE q(text) AS SELECT 'const', $1::text; EXECUTE q('param'::text);
ΠΡΡ ΠΈΠ² ΠΏΠ»Π°Π½ΠΎΠ²
ΠΡΡΠ°Π²Π»ΡΠΉΡΠ΅, Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠΉΡΠ΅, Π΄Π΅Π»ΠΈΡΠ΅ΡΡ Ρ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ! ΠΠ»Π°Π½Ρ ΠΎΡΡΠ°Π½ΡΡΡΡ Π² Π°ΡΡ
ΠΈΠ²Π΅, ΠΈ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ Π½ΠΈΠΌ ΠΏΠΎΠ·Π΄Π½Π΅Π΅:
ΠΠΎ Π΅ΡΠ»ΠΈ Π½Π΅ Ρ ΠΎΡΠΈΡΠ΅, ΡΡΠΎΠ±Ρ Π²Π°Ρ ΠΏΠ»Π°Π½ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ Π΄ΡΡΠ³ΠΈΠ΅, Π½Π΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ Π³Π°Π»ΠΎΡΠΊΡ Β«Π½Π΅ ΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ Π² Π°ΡΡ ΠΈΠ²Π΅Β».
Π ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
ΡΡΠ°ΡΡΡΡ
Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΠΎ ΡΠ΅Ρ
ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΡ
ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΡ
, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΏΡΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΏΠ»Π°Π½Π°.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com