EXPLAIN рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪреБрдк рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдмреЛрд▓рдирд╛ рд╣реИ

рдХреНрд▓рд╛рд╕рд┐рдХ рдкреНрд░рд╢реНрди рдЬреЛ рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдЕрдкрдиреЗ DBA рдХреЗ рдкрд╛рд╕ рд▓рд╛рддрд╛ рд╣реИ рдпрд╛ рдПрдХ рд╡реНрдпрд╡рд╕рд╛рдп рд╕реНрд╡рд╛рдореА PostgreSQL рд╕рд▓рд╛рд╣рдХрд╛рд░ рдХреЗ рдкрд╛рд╕ рд▓рд╛рддрд╛ рд╣реИ рд╡рд╣ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдПрдХ рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ: "рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдореЗрдВ рдЗрддрдирд╛ рд╕рдордп рдХреНрдпреЛрдВ рд▓рдЧрддрд╛ рд╣реИ?"

рдХрд╛рд░рдгреЛрдВ рдХрд╛ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╕реЗрдЯ:

  • рдЕрдХреБрд╢рд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо
    рдЬрдм рдЖрдк рд╣рдЬрд╛рд░реЛрдВ рд░рд┐рдХреЙрд░реНрдбреЛрдВ рдореЗрдВ рд╕реЗ рдХрдИ рд╕реАрдЯреАрдИ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ
  • рдкреБрд░рд╛рдиреЗ рдЖрдБрдХрдбрд╝реЗ
    рдпрджрд┐ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рддрд░рдг рдкрд┐рдЫрд▓реА рдмрд╛рд░ ANALYZE рджреНрд╡рд╛рд░рд╛ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИ
  • рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ "рдкреНрд▓рдЧ"ред
    рдФрд░ рд╕реАрдкреАрдпреВ рдХреА рдЕрдм рдкрд░реНрдпрд╛рдкреНрдд рд╕рдорд░реНрдкрд┐рдд рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╢рдХреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рдореЗрдореЛрд░реА рд▓рдЧрд╛рддрд╛рд░ рдкрдВрдк рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рдпрд╛ рдбрд┐рд╕реНрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рд╕рднреА "рдЗрдЪреНрдЫрд╛рдУрдВ" рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИ
  • рдЕрд╡рд░реБрджреНрдз рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рд╕реЗ

рдФрд░ рдпрджрд┐ рдЕрд╡рд░реЛрдзреЛрдВ рдХреЛ рдкрдХрдбрд╝рдирд╛ рдФрд░ рдЙрдирдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдХрд╛рдлреА рдХрдард┐рди рд╣реИ, рддреЛ рдмрд╛рдХреА рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдкреВрдЫрддрд╛рдЫ рдпреЛрдЬрдирд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдСрдкрд░реЗрдЯрд░ рдХреЛ рд╕рдордЭрд╛рдПрдВ (рдирд┐рдГрд╕рдВрджреЗрд╣, рддреБрд░рдВрдд рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ (рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛, рдмрдлрд░ рдХрд░рдирд╛) рдмреЗрд╣рддрд░ рд╣реИ...) рдпрд╛ рдСрдЯреЛ_рдПрдХреНрд╕рдкреНрд▓реЗрди рдореЙрдбреНрдпреВрд▓.

рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдЙрд╕реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ,

"рдХрд┐рд╕реА рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдордЭрдирд╛ рдПрдХ рдХрд▓рд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЕрдиреБрднрд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ..."

рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рд╕рд╣реА рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рднреА рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!

рдПрдХ рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛ рдЖрдо рддреМрд░ рдкрд░ рдХреИрд╕реА рджрд┐рдЦрддреА рд╣реИ? рдРрд╕рд╛ рдХреБрдЫ:

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"

рд▓реЗрдХрд┐рди "рд╢реАрдЯ рд╕реЗ" рдкрд╛рда рдореЗрдВ рдпреЛрдЬрдирд╛ рдХреЛ рдкрдврд╝рдирд╛ рдмрд╣реБрдд рдХрдард┐рди рдФрд░ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ:

  • рдиреЛрдб рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдЙрдкрд╡реГрдХреНрд╖ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рдпреЛрдЧ
    рдЕрд░реНрдерд╛рддреН, рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдиреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧрд╛, рдпрд╛ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдпрд╣ рд░реАрдбрд┐рдВрдЧ рдбрд┐рд╕реНрдХ рд╕реЗ рдХрд┐рддрдирд╛ рдбреЗрдЯрд╛ рд▓рд╛рддреА рд╣реИ, рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдПрдХ рдХреЛ рджреВрд╕рд░реЗ рд╕реЗ рдШрдЯрд╛рдирд╛ рд╣реЛрдЧрд╛
  • рдиреЛрдб рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд▓реВрдк рд╕реЗ рдЧреБрдгрд╛ рдХрд░реЗрдВ
    рд╣рд╛рдВ, рдШрдЯрд╛рд╡ рд╕рдмрд╕реЗ рдЬрдЯрд┐рд▓ рдСрдкрд░реЗрд╢рди рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ "рд╕рд┐рд░ рдореЗрдВ" рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдЖрдЦрд┐рд░рдХрд╛рд░, рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЛ рдиреЛрдб рдХреЗ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдФрд╕рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рд╕реИрдХрдбрд╝реЛрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ
  • рдЦреИрд░, рдФрд░ рдпрд╣ рд╕рдм рдорд┐рд▓рдХрд░ рд╣рдореЗрдВ рдореБрдЦреНрдп рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ - рддреЛ рдХреМрди "рд╕рдмрд╕реЗ рдХрдордЬреЛрд░ рдХрдбрд╝реА"?

рдЬрдм рд╣рдордиреЗ рдЕрдкрдиреЗ рдХрдИ рд╕реМ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдпрд╣ рд╕рдм рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рддреЛ рд╣рдореЗрдВ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдмрд╛рд╣рд░ рд╕реЗ рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

EXPLAIN рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪреБрдк рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдмреЛрд▓рдирд╛ рд╣реИ

рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП...

рдЙрдкрдХрд░рдг

рдЗрд╕рдореЗрдВ рд╣рдордиреЗ рдЙрди рд╕рднреА рдкреНрд░рдореБрдЦ рдпрд╛рдВрддреНрд░рд┐рдХреА рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬреЛ рдпреЛрдЬрдирд╛ рдФрд░ рдЕрдиреБрд░реЛрдз рдХреЗ рдЕрдиреБрд╕рд╛рд░ "рдХрд┐рд╕реЗ рджреЛрд╖ рджреЗрдирд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ" рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред рдЦреИрд░, рдФрд░ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХрд╛ рдХреБрдЫ рд╣рд┐рд╕реНрд╕рд╛ рд╕рдореБрджрд╛рдп рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░реЗрдВред
рдорд┐рд▓реЗрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ - рд╡реНрдпрд╛рдЦреНрдпрд╛.рдЯреЗрдВрд╕рд░.рдЖрд░рдпреВ

рдпреЛрдЬрдирд╛рдУрдВ рдХреА рджреГрд╢реНрдпрддрд╛

рдХреНрдпрд╛ рдпреЛрдЬрдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреЗ рдкрд░ рдЙрд╕реЗ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИ?

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

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВред

рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣, рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рдореЗрдВрдЬрдм рдкреНрд░рдореБрдЦ рд╕рдВрдХреЗрддрдХ рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

EXPLAIN рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪреБрдк рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдмреЛрд▓рдирд╛ рд╣реИ

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпреЛрдЬрдирд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рддреЛ рд╡рд╣ рдмрдЪрд╛рд╡ рдореЗрдВ рдЖрдПрдЧрд╛ рдкрд╛рдЗрдЪрд╛рд░реНрдЯ рд╕рдордп рд╡рд┐рддрд░рдг рдиреЛрдбреНрд╕ рджреНрд╡рд╛рд░рд╛:

EXPLAIN рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪреБрдк рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдмреЛрд▓рдирд╛ рд╣реИ

рдЦреИрд░, рд╕рдмрд╕реЗ рдХрдард┐рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╣ рдорджрдж рдХрд░рдиреЗ рдХреА рдЬрд▓реНрджреА рдореЗрдВ рд╣реИ рдкреНрд░рдЧрддрд┐ рдЪрд╛рд░реНрдЯ:

EXPLAIN рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪреБрдк рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдмреЛрд▓рдирд╛ рд╣реИ

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдРрд╕реА рдмрд╣реБрдд рд╣реА рдЧреИрд░-рдорд╛рдореВрд▓реА рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВ рдЬрдм рдХрд┐рд╕реА рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реВрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:

EXPLAIN рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪреБрдк рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдмреЛрд▓рдирд╛ рд╣реИEXPLAIN рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪреБрдк рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдмреЛрд▓рдирд╛ рд╣реИ

рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рд╕реБрд░рд╛рдЧ

рдареАрдХ рд╣реИ, рдЕрдЧрд░ рдпреЛрдЬрдирд╛ рдХреА рдкреВрд░реА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдЙрд╕рдХреА рджреБрдЦрддреА рд░рдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд╛рдордиреЗ рд╣реИрдВ рдФрд░ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд╕рд╛рдордиреЗ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдЙрдиреНрд╣реЗрдВ "рд░реВрд╕реА рднрд╛рд╖рд╛" рдореЗрдВ рдХреНрдпреЛрдВ рди рд╕рдордЭрд╛рдпрд╛ рдЬрд╛рдП?

EXPLAIN рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪреБрдк рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдмреЛрд▓рдирд╛ рд╣реИрд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдРрд╕реЗ рдХреБрдЫ рджрд░реНрдЬрди рдЕрдиреБрд╢рдВрд╕рд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдХрддреНрд░ рдХрд░ рд▓рд┐рдП рд╣реИрдВред

рд▓рд╛рдЗрди-рджрд░-рд▓рд╛рдЗрди рдХреНрд╡реЗрд░реА рдкреНрд░реЛрдлрд╛рдЗрд▓рд░

рдЕрдм, рдпрджрд┐ рдЖрдк рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдЧрдИ рдпреЛрдЬрдирд╛ рдкрд░ рдореВрд▓ рдХреНрд╡реЗрд░реА рдХреЛ рд╕реБрдкрд░рдЗрдореНрдкреЛрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХрдерди рдкрд░ рдХрд┐рддрдирд╛ рд╕рдордп рд╡реНрдпрддреАрдд рд╣реБрдЖ - рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

EXPLAIN рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪреБрдк рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдмреЛрд▓рдирд╛ рд╣реИ

...рдпрд╛ рдЗрд╕ рддрд░рд╣ рднреА:

EXPLAIN рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪреБрдк рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдмреЛрд▓рдирд╛ рд╣реИ

рдЕрдиреБрд░реЛрдз рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛

рдпрджрд┐ рдЖрдкрдиреЗ рди рдХреЗрд╡рд▓ рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз "рд╕рдВрд▓рдЧреНрди" рдХрд┐рдпрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд▓реЙрдЧ рдХреА рд╡рд┐рд╡рд░рдг рдкрдВрдХреНрддрд┐ рд╕реЗ рдЗрд╕рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рднреА рдЬреЛрдбрд╝реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • рдЕрдиреБрд░реЛрдз рдореЗрдВ рдореВрд▓реНрдп рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд╕рд╛рде
    рдЖрдкрдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реАрдзреЗ рдирд┐рд╖реНрдкрд╛рджрди рдФрд░ рдЖрдЧреЗ рдХреА рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП

    SELECT 'const', 'param'::text;
  • PREPARE/EXECUTE рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореВрд▓реНрдп рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд╕рд╛рде
    рд╢реЗрдбреНрдпреВрд▓рд░ рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдм рдкреИрд░рд╛рдореАрдЯреНрд░рд┐рдХ рднрд╛рдЧ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд╛рдЬрд┐рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп

    DEALLOCATE ALL;
    PREPARE q(text) AS SELECT 'const', $1::text;
    EXECUTE q('param'::text);
    

рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдкреБрд░рд╛рд▓реЗрдЦ

рдЪрд┐рдкрдХрд╛рдПрдБ, рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ, рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ! рдпреЛрдЬрдирд╛рдПрдБ рд╕рдВрдЧреНрд░рд╣реАрдд рд░рд╣реЗрдВрдЧреА рдФрд░ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдмрд╛рдж рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рд╡реНрдпрд╛рдЦреНрдпрд╛.tensor.ru/archive

рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдХрд┐ рдЕрдиреНрдп рд▓реЛрдЧ рдЖрдкрдХреА рдпреЛрдЬрдирд╛ рджреЗрдЦреЗрдВ, рддреЛ "рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рди рдХрд░реЗрдВ" рдмреЙрдХреНрд╕ рдХреЛ рдЪреЗрдХ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рдореЗрдВ рдореИрдВ рдХрд┐рд╕реА рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╕рдордп рдЖрдиреЗ рд╡рд╛рд▓реА рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдФрд░ рдирд┐рд░реНрдгрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ