ΠΠ»Π°ΡΠΈΡΠ΅ΡΠΊΠΈΡΡ Π²ΡΠΏΡΠΎΡ, Ρ ΠΊΠΎΠΉΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ ΡΠ΅ ΠΎΠ±ΡΡΡΠ° ΠΊΡΠΌ ΡΠ²ΠΎΡ DBA ΠΈΠ»ΠΈ Π±ΠΈΠ·Π½Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΠΊ β ΠΊΠΎΠ½ΡΡΠ»ΡΠ°Π½Ρ ΠΏΠΎ PostgreSQL, ΠΏΠΎΡΡΠΈ Π²ΠΈΠ½Π°Π³ΠΈ Π·Π²ΡΡΠΈ ΠΏΠΎ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡΠΈ Π½Π°ΡΠΈΠ½: βΠΠ°ΡΠΎ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π΄ΡΠ»Π³ΠΎ Π½Π° Π±Π°Π·Π°ΡΠ°?β
Π’ΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΈΡΡ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΏΡΠΈΡΠΈΠ½ΠΈ:
- Π½Π΅Π΅ΡΠ΅ΠΊΡΠΈΠ²Π΅Π½ Π°Π»Π³ΠΎΡΠΈΡΡΠΌ
ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ΡΠΈΡΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ JOIN Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ CTE Ρ Π΄Π΅ΡΠ΅ΡΠΊΠΈ Ρ ΠΈΠ»ΡΠ΄ΠΈ Π·Π°ΠΏΠΈΡΠΈ - Π½Π΅Π°ΠΊΡΡΠ°Π»Π½Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°
Π°ΠΊΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΡΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅ Π² ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Π²Π΅ΡΠ΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π° ΠΎΡ ΡΠΎΠ²Π°, ΡΡΠ±ΡΠ°Π½ΠΎ ΠΏΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ ANALYZE - "ΡΡΠ΅ΡΠ½ΡΠ²Π°Π½Π΅" ΠΏΠΎ ΡΠ΅ΡΡΡΡΠΈ
ΠΈ Π²Π΅ΡΠ΅ Π½Π΅ Π΄ΠΎΡΡΠΈΠ³Π°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΠ΅ ΠΈΠ·ΡΠΈΡΠ»ΠΈΡΠ΅Π»Π½ΠΈ ΠΌΠΎΡΠ½ΠΎΡΡΠΈ Π½Π° CPU, ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΠ΅ Π·Π°Π΄Π΅ΠΉΡΡΠ²Π°Ρ Π³ΠΈΠ³Π°Π±Π°ΠΉΡΠΈ ΠΏΠ°ΠΌΠ΅Ρ ΠΈΠ»ΠΈ Π΄ΠΈΡΠΊΡΡ Π½Π΅ ΡΡΠΏΡΠ²Π° Π΄Π° ΡΠ»Π΅Π΄Π²Π° Π²ΡΠΈΡΠΊΠΈΡΠ΅ βΠΈΡΠΊΠ°Π½ΠΈΡβ Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ - Π±Π»ΠΎΠΊΠΈΡΠ°Π½Π΅ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΡΠΈΡΠ°ΡΠΈ ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ
Π Π°ΠΊΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈΡΠ΅ ΡΠ° Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΈ Π·Π° ΡΠ»Π°Π²ΡΠ½Π΅ ΠΈ Π°Π½Π°Π»ΠΈΠ·, ΡΠΎ Π·Π° Π²ΡΠΈΡΠΊΠΎ ΠΎΡΡΠ°Π½Π°Π»ΠΎ Π½ΠΈ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ΅Π½ ΠΏΠ»Π°Π½ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° (ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, Π²Π΅Π΄Π½Π°Π³Π° EXPLAIN (ANALYZE, BUFFERS) β¦) ΠΈΠ»ΠΈ .
ΠΠΎ, ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΏΠΎΡΠΎΡΠ΅Π½ΠΎ Π² ΡΡΡΠ°ΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ,
βΠ Π°Π·Π±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ»Π°Π½Π° Π΅ ΠΈΠ·ΠΊΡΡΡΠ²ΠΎ ΠΈ Π·Π° Π΄Π° Π³ΠΎ ΠΎΠ²Π»Π°Π΄Π΅Π΅ΡΠ΅, ΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΎΠΏΠΈΡ, β¦β
ΠΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΈ Π±Π΅Π· Π½Π΅Π³ΠΎ, Π°ΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ!
ΠΠ°ΠΊ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠ»Π°Π½ΡΡ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°? ΠΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
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"ΠΠΎ ΡΠ΅ΡΠ΅Π½Π΅ΡΠΎ Π½Π° ΠΏΠ»Π°Π½Π° ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎ βΠ½Π° Π»ΠΈΡΡβ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΈ Π½Π΅ΡΡΠ½ΠΎ:
- Π²ΡΠ² Π²ΡΠ·Π΅Π»Π° ΡΠ΅ ΠΈΠ·Π²Π΅ΠΆΠ΄Π° ΡΡΠΌΠ°ΡΠ° ΠΏΠΎ ΡΠ΅ΡΡΡΡΠΈΡΠ΅ Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎΡΠΎ
ΡΠΎΠ΅ΡΡ Π·Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠΎΠ»ΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅ Π΅ ΠΎΡΠ½Π΅Π»ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ Π²ΡΠ·Π΅Π», ΠΈΠ»ΠΈ ΠΊΠΎΠ»ΠΊΠΎ ΡΠΎΡΠ½ΠΎ ΡΠΎΠ²Π° ΡΠ΅ΡΠ΅Π½Π΅ ΠΎΡ ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Π΅ ΠΈΠ·Π²Π»ΡΠΊΠ»ΠΎ Π΄Π°Π½Π½ΠΈ ΠΎΡ Π΄ΠΈΡΠΊΠ° β ΡΡΡΠ±Π²Π° ΠΏΠΎ Π½ΡΠΊΠ°ΠΊΡΠ² Π½Π°ΡΠΈΠ½ Π΄Π° ΠΈΠ·Π²Π°Π΄ΠΈΡΠ΅ Π΅Π΄Π½ΠΎ ΠΎΡ Π΄ΡΡΠ³ΠΎ - Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° Π²ΡΠ·Π΅Π»Π° Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΡΠΌΠ½ΠΎΠΆΠ°Π²Π° ΠΏΠΎ ΡΠΈΠΊΠ»ΠΈ
ΠΠ°, ΠΈΠ·Π²Π°ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ Π΅ Π½Π°ΠΉ-ΡΠ»ΠΎΠΆΠ½Π°ΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΠΊΠΎΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΡΠ°Π²ΠΈ βΠ² ΡΠΌΠ°β β ΡΡΠΉ ΠΊΠ°ΡΠΎ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π΅ ΠΏΠΎΡΠΎΡΠ΅Π½ΠΎ ΡΡΠ΅Π΄Π½ΠΎ Π·Π° Π΅Π΄Π½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π²ΡΠ·Π΅Π», Π° ΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΡΠΎΡΠΈΡΠΈ. - ΠΠΎ Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° Π·Π°Π΅Π΄Π½ΠΎ Π·Π°ΡΡΡΠ΄Π½ΡΠ²Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ Π²ΡΠΏΡΠΎΡ β ΡΠ°ΠΊΠ° ΠΊΠΎΠΉ Π²ΡΡΡΠ½ΠΎΡΡ Π΅. βΠΠ°ΠΉ-ΡΠ»Π°Π±Π°ΡΠ° Π²ΡΡΠ·ΠΊΠ°β?
ΠΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΎΠΏΠΈΡΠ°Ρ ΠΌΠ΅ Π΄Π° ΠΎΠ±ΡΡΠ½ΠΈΠΌ Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΠΎΡΠΈΠ½ Π½Π°ΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ, ΡΠ°Π·Π±ΡΠ°Ρ ΠΌΠ΅, ΡΠ΅ ΠΎΡΡΡΡΠ°Π½ΠΈ ΡΠΎΠ²Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:

Π, Π·Π½Π°ΡΠΈ, Π½ΠΈ ΡΡΡΠ±Π²Π°...
ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ
Π Π½Π΅Π³ΠΎ ΡΠ΅ ΠΎΠΏΠΈΡΠ°Ρ
ΠΌΠ΅ Π΄Π° ΡΡΠ±Π΅ΡΠ΅ΠΌ Π²ΡΠΈΡΠΊΠΈ ΠΊΠ»ΡΡΠΎΠ²ΠΈ ΠΌΠ΅Ρ
Π°Π½ΠΈΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠΌΠ°Π³Π°Ρ ΠΏΠΎ ΠΏΠ»Π°Π½Π° ΠΈ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ βΠΊΠΎΠΉ Π΅ Π²ΠΈΠ½ΠΎΠ²Π΅Π½ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡΠ°Π²ΠΈΠΌβ. Π ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π΄Π° ΡΠΏΠΎΠ΄Π΅Π»ΠΈΠΌ ΡΠ°ΡΡ ΠΎΡ ΠΎΠΏΠΈΡΠ° ΡΠΈ ΡΡΡ ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ°.
ΠΠ°ΠΏΠΎΠ·Π½Π°ΠΉΡΠ΅ ΡΠ΅ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ β
ΠΠ°Π³Π»Π΅Π΄Π½ΠΎΡΡ Π½Π° ΠΏΠ»Π°Π½ΠΎΠ²Π΅ΡΠ΅
ΠΠ΅ΡΠ½ΠΎ Π»ΠΈ Π΅ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΏΠ»Π°Π½Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°?
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
ΠΠ΅ ΠΎΡΠΎΠ±Π΅Π½ΠΎ.
ΠΠΎ ΠΏΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½, Π² ΡΡΠΊΡΠ°ΡΠ΅Π½ Π²ΠΈΠ΄, ΠΊΠΎΠ³Π°ΡΠΎ ΠΊΠ»ΡΡΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΡΠ° ΠΎΡΠ΄Π΅Π»Π΅Π½ΠΈ β Π²Π΅ΡΠ΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΠΌΠΎ:

ΠΠΎ Π°ΠΊΠΎ ΠΏΠ»Π°Π½ΡΡ Π΅ ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ΅Π½ β Π½Π° ΠΏΠΎΠΌΠΎΡ ΠΈΠ΄Π²Π° Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠ° Π½Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ ΠΏΠΎ Π²ΡΠ·Π»ΠΈ:

ΠΠΎ Π·Π° Π½Π°ΠΉ-ΡΠ»ΠΎΠΆΠ½ΠΈΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΠΈ Π½Π° ΠΏΠΎΠΌΠΎΡ ΠΏΡΠΈΡΡΠΈΠ³Π° Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠ° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ:

ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠΌΠ°Ρ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»Π½ΠΈ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΠ»Π°Π½ΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ Π΅Π΄ΠΈΠ½ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π΅Π½ ΠΊΠΎΡΠ΅Π½:


Π‘ΡΡΡΠΊΡΡΡΠ½ΠΈ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ
ΠΠΎ Π°ΠΊΠΎ ΡΡΠ»Π°ΡΠ° ΡΡΡΡΠΊΡΡΡΠ° Π½Π° ΠΏΠ»Π°Π½Π° ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΠΈ ΠΌΠ΅ΡΡΠ° Π²Π΅ΡΠ΅ ΡΠ° ΡΠ°Π·Π»ΠΎΠΆΠ΅Π½ΠΈ ΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΈ β Π·Π°ΡΠΎ Π΄Π° Π½Π΅ Π³ΠΈ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΈΠΌ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΈ Π½Π΅ ΠΎΠ±ΡΡΠ½ΠΈΠΌ Ρ βΡΠΎΠ²Π΅ΡΠΊΠΈ Π΅Π·ΠΈΠΊβ?
Π‘ΡΠ±ΡΠ°Π»ΠΈ ΡΠΌΠ΅ Π²Π΅ΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π΄Π΅ΡΠ΅ΡΠΊΠΈ ΡΠ°ΠΊΠΈΠ²Π° ΡΠ°Π±Π»ΠΎΠ½Π° Π·Π° ΠΏΡΠ΅ΠΏΠΎΡΡΠΊΠΈ.
Π Π΅Π΄ΠΎΠ²ΠΈ ΠΏΡΠΎΡΠ°ΠΉΠ»Π΅Ρ Π½Π° Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ
Π‘Π΅Π³Π°, Π°ΠΊΠΎ Π½Π°Π»ΠΎΠΆΠΈΠΌ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΎΡΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈΡ ΠΏΠ»Π°Π½, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠΎΠ»ΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅ Π΅ ΠΎΡΠ½Π΅Π»ΠΎ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΎΡΠ΄Π΅Π»Π΅Π½ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ β ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠ°:

β¦ ΠΈΠ»ΠΈ Π΄ΠΎΡΠΈ ΡΠ°ΠΊΠ°:

ΠΠΎΠ΄ΠΌΡΠ½Π° Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π² Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ
ΠΠΊΠΎ ΡΡΠ΅ βΠΏΡΠΈΠΊΠ°ΡΠΈΠ»ΠΈβ ΠΊΡΠΌ ΠΏΠ»Π°Π½Π° Π½Π΅ ΡΠ°ΠΌΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ, Π½ΠΎ ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΠΎΡ DETAIL ΡΠ΅Π΄Π° Π½Π° Π»ΠΎΠ³, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ Π΄Π° Π³ΠΎ ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ Π² Π΅Π΄ΠΈΠ½ ΠΎΡ Π²Π°ΡΠΈΠ°Π½ΡΠΈΡΠ΅:
- Ρ ΠΏΠΎΠ΄ΠΌΡΠ½Π° Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π² Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ
Π·Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π°ΡΠ° ΡΠΈ Π±Π°Π·Π° ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠ° ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²ΠΊΠ°SELECT 'const', 'param'::text; - Ρ ΠΏΠΎΠ΄ΠΌΡΠ½Π° Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ ΡΡΠ΅Π· PREPARE/EXECUTE
Π·Π° Π΅ΠΌΡΠ»ΡΡΠΈΡ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΠΏΠ»Π°Π½ΠΈΡΠ°ΡΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ½Π°ΡΠ° ΡΠ°ΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ³Π½ΠΎΡΠΈΡΠ°Π½Π° β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ ΡΠ΅ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π½ΠΈ ΡΠ°Π±Π»ΠΈΡΠΈDEALLOCATE ALL; PREPARE q(text) AS SELECT 'const', $1::text; EXECUTE q('param'::text);
ΠΡΡ ΠΈΠ² Π½Π° ΠΏΠ»Π°Π½ΠΎΠ²Π΅ΡΠ΅
ΠΠΌΡΠΊΠ½Π΅ΡΠ΅, Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΉΡΠ΅, ΡΠΏΠΎΠ΄Π΅Π»ΡΠΉΡΠ΅ Ρ ΠΊΠΎΠ»Π΅Π³ΠΈΡΠ΅! ΠΠ»Π°Π½ΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ ΠΎΡΡΠ°Π½Π°Ρ Π² Π°ΡΡ ΠΈΠ²Π° ΠΈ Π²ΠΈΠ΅ ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ Π²ΡΡΠ½Π΅ΡΠ΅ ΠΊΡΠΌ ΡΡΡ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ:
ΠΠΎ Π°ΠΊΠΎ Π½Π΅ ΠΈΡΠΊΠ°ΡΠ΅ Π²Π°ΡΠΈΡΡ ΠΏΠ»Π°Π½ Π΄Π° Π±ΡΠ΄Π΅ Π²ΠΈΠ΄ΡΠ½ ΠΎΡ Π΄ΡΡΠ³ΠΈ, Π½Π΅ Π·Π°Π±ΡΠ°Π²ΡΠΉΡΠ΅ Π΄Π° ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈΡΠ΅ ΠΎΠΏΡΠΈΡΡΠ° Β«Π½Π΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°ΠΉΡΠ΅ Π² Π°ΡΡ ΠΈΠ²Π°Β».
Π ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ ΡΡΠ°ΡΠΈΠΈ ΡΠ΅ ΡΠ°Π·ΠΊΠ°ΠΆΠ° Π·Π° ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°ΡΠ΅Π»ΡΡΠ²Π°ΡΠ° ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΡΠ°, ΠΊΠΎΠΈΡΠΎ Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Ρ ΠΏΡΠΈ Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΠΏΠ»Π°Π½Π°.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
