PostgreSQL Antipatterns: SQL-แƒ–แƒ” แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒ แƒ“แƒ แƒแƒ แƒฉแƒ”แƒ•แƒ

แƒ“แƒ แƒแƒ“แƒแƒ“แƒ แƒ, แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒก แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ’แƒแƒ“แƒแƒกแƒชแƒ”แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒ™แƒ แƒ”แƒ‘แƒ˜ แƒแƒœ แƒ—แƒฃแƒœแƒ“แƒแƒช แƒ›แƒ—แƒ”แƒšแƒ˜ แƒแƒ แƒฉแƒ”แƒ•แƒแƒœแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒแƒ–แƒ” "แƒจแƒ”แƒกแƒแƒกแƒ•แƒšแƒ”แƒšแƒ—แƒแƒœ". แƒ–แƒแƒ’แƒฏแƒ”แƒ  แƒแƒ› แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒฃแƒชแƒœแƒแƒฃแƒ แƒ˜ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก.
PostgreSQL Antipatterns: SQL-แƒ–แƒ” แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒ แƒ“แƒ แƒแƒ แƒฉแƒ”แƒ•แƒ
แƒ›แƒแƒ“แƒ˜แƒ— แƒฌแƒแƒ•แƒ˜แƒ“แƒ”แƒ— "แƒกแƒแƒžแƒ˜แƒ แƒ˜แƒกแƒžแƒ˜แƒ แƒแƒ“แƒแƒœ" แƒ“แƒ แƒ•แƒœแƒแƒฎแƒแƒ—, แƒ แƒแƒ’แƒแƒ  แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒแƒ— แƒ”แƒก, แƒ แƒแƒขแƒแƒ› แƒ“แƒ แƒ แƒแƒ’แƒแƒ  แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒแƒ“.

แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ แƒ˜ "แƒฉแƒแƒกแƒ›แƒ" แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒกแƒฎแƒ”แƒฃแƒšแƒจแƒ˜

แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ• แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ:

query = "SELECT * FROM tbl WHERE id = " + value

... แƒแƒœ แƒแƒกแƒ”:

query = "SELECT * FROM tbl WHERE id = :param".format(param=value)

แƒแƒ› แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒœแƒแƒ—แƒฅแƒ•แƒแƒ›แƒ˜แƒ, แƒฌแƒ”แƒ แƒ˜แƒ แƒ“แƒ แƒ“แƒแƒฎแƒแƒขแƒฃแƒšแƒ˜แƒช แƒ™แƒ˜ แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜:

PostgreSQL Antipatterns: SQL-แƒ–แƒ” แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒ แƒ“แƒ แƒแƒ แƒฉแƒ”แƒ•แƒ

แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒแƒกแƒ”แƒ แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ แƒ˜ แƒ’แƒ–แƒ SQL แƒ˜แƒœแƒ”แƒฅแƒชแƒ˜แƒ˜แƒกแƒ™แƒ”แƒœ แƒ“แƒ แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ แƒ‘แƒ˜แƒ–แƒœแƒ”แƒก แƒšแƒแƒ’แƒ˜แƒ™แƒแƒ–แƒ”, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ˜แƒซแƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ โ€žแƒฌแƒ”แƒ‘แƒแƒกโ€œ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜.

แƒ”แƒก แƒ›แƒ˜แƒ“แƒ’แƒแƒ›แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒœแƒแƒฌแƒ˜แƒšแƒแƒ‘แƒ แƒ˜แƒ• แƒ’แƒแƒ›แƒแƒ แƒ—แƒšแƒ“แƒ”แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜. แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ— แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜ PostgreSQL แƒ•แƒ”แƒ แƒกแƒ˜แƒ”แƒ‘แƒจแƒ˜ 10 แƒ“แƒ แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒฃแƒคแƒ แƒ แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ แƒ˜ แƒ’แƒ”แƒ’แƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒแƒ› แƒ•แƒ”แƒ แƒกแƒ˜แƒ”แƒ‘แƒจแƒ˜, แƒ“แƒแƒกแƒ™แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒ”แƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ แƒ’แƒแƒœแƒ˜แƒกแƒแƒ–แƒฆแƒ•แƒ แƒ”แƒ‘แƒ แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”, แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒแƒ แƒ’แƒแƒœแƒแƒก แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ–แƒ”.

$n แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ˜

แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ— แƒแƒ“แƒ’แƒ˜แƒšแƒ˜แƒก แƒ“แƒแƒ›แƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ แƒ™แƒแƒ แƒ’แƒ˜แƒ, แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— แƒ›แƒแƒ›แƒ–แƒแƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ’แƒแƒœแƒชแƒฎแƒแƒ“แƒ”แƒ‘แƒ”แƒ‘แƒ˜, แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒชแƒ˜แƒ แƒ”แƒ‘แƒ แƒ แƒแƒ’แƒแƒ แƒช แƒ‘แƒ˜แƒ–แƒœแƒ”แƒก แƒšแƒแƒ’แƒ˜แƒ™แƒแƒ–แƒ” (แƒ›แƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜ แƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ แƒ“แƒ แƒ’แƒแƒ“แƒแƒ˜แƒชแƒ”แƒ›แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ—แƒฎแƒ”แƒš), แƒแƒกแƒ”แƒ•แƒ” แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” (แƒฎแƒ”แƒšแƒแƒฎแƒแƒšแƒ˜ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ“แƒ แƒ“แƒแƒ’แƒ”แƒ’แƒ›แƒ•แƒ แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ˜แƒœแƒกแƒขแƒแƒœแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก).

แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ

แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒ’แƒ•แƒ”แƒšแƒแƒ“แƒ”แƒ‘แƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒ˜แƒœแƒ“แƒ แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒขแƒแƒœแƒแƒ— แƒฃแƒชแƒœแƒแƒ‘แƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒก แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜:

... id IN ($1, $2, $3, ...) -- $1 : 2, $2 : 3, $3 : 5, ...

แƒ—แƒฃ แƒ—แƒฎแƒแƒ•แƒœแƒแƒก แƒ“แƒแƒขแƒแƒ•แƒ”แƒ‘แƒ— แƒแƒ› แƒคแƒแƒ แƒ›แƒ˜แƒ—, แƒ›แƒแƒจแƒ˜แƒœ, แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒแƒ› แƒ”แƒก แƒ“แƒแƒ’แƒ•แƒ˜แƒฎแƒกแƒœแƒ˜แƒก แƒžแƒแƒขแƒ”แƒœแƒชแƒ˜แƒฃแƒ แƒ˜ แƒ˜แƒœแƒ”แƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ, แƒ”แƒก แƒ›แƒแƒ˜แƒœแƒช แƒ’แƒแƒ›แƒแƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒฌแƒ”แƒ‘แƒแƒก / แƒ’แƒแƒ แƒฉแƒ”แƒ•แƒ˜แƒก แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒแƒก แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒแƒ“แƒแƒœ. แƒฃแƒ™แƒ•แƒ” แƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒ˜แƒ, แƒ•แƒ˜แƒ“แƒ แƒ” แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒงแƒแƒ•แƒ”แƒš แƒฏแƒ”แƒ แƒ–แƒ”, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒ.

แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ—แƒ˜ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒชแƒ•แƒ”แƒšแƒแƒ‘แƒ˜แƒก แƒ’แƒแƒ•แƒšแƒ แƒ›แƒแƒกแƒ˜แƒ•แƒ˜แƒก แƒกแƒ”แƒ แƒ˜แƒฃแƒšแƒ˜ แƒฌแƒแƒ แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ:

... id = ANY($1::integer[]) -- $1 : '{2,3,5,8,13}'

แƒ”แƒ แƒ—แƒแƒ“แƒ”แƒ แƒ—แƒ˜ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ แƒแƒ แƒ˜แƒก แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ˜แƒก แƒ›แƒ™แƒแƒคแƒ˜แƒแƒ“ แƒ’แƒแƒ“แƒแƒฅแƒชแƒ”แƒ•แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒ แƒ›แƒแƒกแƒ˜แƒ•แƒ˜แƒก แƒกแƒแƒกแƒฃแƒ แƒ•แƒ”แƒš แƒขแƒ˜แƒžแƒ–แƒ”. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒแƒ  แƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒก, แƒ แƒแƒ“แƒ’แƒแƒœ แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒ•แƒ˜แƒชแƒ˜แƒ—, แƒกแƒแƒ“ แƒ›แƒ˜แƒ•แƒ›แƒแƒ แƒ—แƒแƒ•แƒ—.

แƒœแƒ˜แƒ›แƒฃแƒจแƒ˜แƒก แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒ (แƒ›แƒแƒขแƒ แƒ˜แƒชแƒ)

แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•, แƒ”แƒก แƒแƒ แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒกแƒแƒฎแƒ˜แƒก แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒœแƒแƒ™แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜ แƒฉแƒแƒกแƒแƒ แƒ—แƒแƒ•แƒแƒ“ "แƒ”แƒ แƒ— แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒ—":

INSERT INTO tbl(k, v) VALUES($1,$2),($3,$4),...

แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก โ€žแƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒ“แƒแƒฌแƒ”แƒ‘แƒ”แƒ‘แƒแƒกแƒ—แƒแƒœโ€œ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ–แƒ”แƒ›แƒแƒ— แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ“แƒ, แƒแƒ›แƒแƒœแƒแƒช แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒ˜แƒ’แƒ•แƒ˜แƒงแƒ•แƒแƒœแƒแƒก แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ’แƒแƒ›แƒแƒกแƒฃแƒšแƒ˜ แƒ“แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒแƒ•แƒแƒ แƒ˜แƒ. แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ˜ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜แƒ - PG แƒ˜แƒขแƒแƒ•แƒ”แƒ‘แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ— แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒก แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒฎแƒแƒšแƒ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ แƒœแƒแƒ™แƒ แƒ”แƒ‘แƒจแƒ˜ แƒจแƒ”แƒ›แƒแƒ˜แƒคแƒแƒ แƒ’แƒšแƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ‘แƒ˜แƒ–แƒœแƒ”แƒก แƒšแƒแƒ’แƒ˜แƒ™แƒ˜แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก Wishlist-แƒ˜แƒ—. แƒ’แƒแƒœแƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒ˜แƒ— แƒ™แƒšแƒ˜แƒœแƒ˜แƒ™แƒฃแƒ  แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ”แƒ‘แƒจแƒ˜ แƒกแƒแƒญแƒ˜แƒ แƒ แƒ˜แƒงแƒ แƒœแƒแƒฎแƒ•แƒ $9000-แƒ–แƒ” แƒ›แƒ”แƒขแƒ˜ "แƒ“แƒแƒœแƒแƒ›แƒ แƒ˜แƒšแƒ˜" แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜ -แƒแƒกแƒ” แƒœแƒฃ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒ”แƒ‘.

แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒฌแƒ”แƒ แƒแƒ— แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ, แƒฃแƒ™แƒ•แƒ” แƒ›แƒ˜แƒ•แƒ›แƒแƒ แƒ—แƒแƒ•แƒ— "แƒแƒ แƒ“แƒแƒœแƒ˜แƒแƒœแƒ˜" แƒกแƒ”แƒ แƒ˜แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ:

INSERT INTO tbl
SELECT
  unnest[1]::text k
, unnest[2]::integer v
FROM (
  SELECT
    unnest($1::text[])::text[] -- $1 : '{"{a,1}","{b,2}","{c,3}","{d,4}"}'
) T;

แƒ“แƒ˜แƒแƒฎ, แƒ›แƒแƒกแƒ˜แƒ•แƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ— "แƒ™แƒแƒ›แƒžแƒšแƒ”แƒฅแƒกแƒฃแƒ แƒ˜" แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒฉแƒแƒกแƒ›แƒฃแƒšแƒ˜ แƒชแƒ˜แƒขแƒแƒขแƒ”แƒ‘แƒ˜แƒ—.
แƒ’แƒแƒกแƒแƒ’แƒ”แƒ‘แƒ˜แƒ, แƒ แƒแƒ› แƒแƒ› แƒ’แƒ–แƒ˜แƒ— แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— โ€žแƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ•แƒแƒ—โ€œ แƒแƒ แƒฉแƒ”แƒ•แƒแƒœแƒ˜ แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒ—แƒ•แƒ˜แƒ—แƒœแƒ”แƒ‘แƒฃแƒ แƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒ—.

แƒฃแƒœแƒฃแƒ’แƒ”แƒจแƒ, แƒฃแƒ‘แƒฃแƒ“แƒ,โ€ฆ

แƒ“แƒ แƒแƒ“แƒแƒ“แƒ แƒ แƒแƒ แƒ˜แƒก แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ”แƒ‘แƒ˜ "แƒ›แƒแƒกแƒ˜แƒ•แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒกแƒ˜แƒ•แƒ˜แƒก" แƒœแƒแƒชแƒ•แƒšแƒแƒ“ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” "แƒกแƒ•แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒกแƒ˜แƒ•แƒ˜แƒก" แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒ˜แƒก, แƒ แƒแƒช แƒ›แƒ” แƒแƒฆแƒ•แƒœแƒ˜แƒจแƒœแƒ”. แƒ‘แƒแƒšแƒ แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜:

SELECT
  unnest($1::text[]) k
, unnest($2::integer[]) v;

แƒแƒ› แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ—, แƒ—แƒฃ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒก แƒ“แƒแƒฃแƒจแƒ•แƒ”แƒ‘แƒ— แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒกแƒ•แƒ”แƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒแƒก, แƒซแƒแƒšแƒ˜แƒแƒœ แƒแƒ“แƒ•แƒ˜แƒšแƒ˜แƒ แƒ›แƒ˜แƒกแƒ˜ แƒกแƒ แƒฃแƒšแƒแƒ“ แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ. แƒ›แƒแƒฃแƒšแƒแƒ“แƒœแƒ”แƒšแƒ˜ แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒกแƒ”แƒ•แƒ” แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒ–แƒ”:

-- $1 : '{a,b,c}', $2 : '{1,2}'
-- PostgreSQL 9.4
k | v
-----
a | 1
b | 2
c | 1
a | 2
b | 1
c | 2
-- PostgreSQL 11
k | v
-----
a | 1
b | 2
c |

JSON

9.3 แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒ“แƒแƒœ แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒฃแƒšแƒ˜, PostgreSQL-แƒก แƒแƒฅแƒ•แƒก แƒกแƒ แƒฃแƒšแƒคแƒแƒกแƒแƒ•แƒแƒœแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ json แƒขแƒ˜แƒžแƒ˜แƒก แƒกแƒแƒ›แƒฃแƒจแƒแƒแƒ“. แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒฃแƒšแƒ˜แƒ แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒจแƒ˜, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒกแƒฌแƒแƒ แƒ”แƒ“ แƒ˜แƒฅ แƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— json แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜ SQL แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก:

SELECT
  key k
, value v
FROM
  json_each($1::json); -- '{"a":1,"b":2,"c":3,"d":4}'

แƒฌแƒ˜แƒœแƒ แƒ•แƒ”แƒ แƒกแƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒ›แƒ”แƒ—แƒแƒ“แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒš แƒ˜แƒฅแƒœแƒแƒก แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ (แƒ›แƒแƒฆแƒแƒ–แƒ˜แƒ), แƒ›แƒแƒ’แƒ แƒแƒ› hstore-แƒจแƒ˜ แƒ แƒ—แƒฃแƒšแƒ˜ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒฅแƒชแƒ”แƒ•แƒ˜แƒ— แƒกแƒฌแƒแƒ แƒ›แƒ โ€žแƒ“แƒแƒ™แƒ”แƒชแƒ•แƒแƒ›โ€œ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒ˜แƒฌแƒ•แƒ˜แƒแƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜.

json_populate_recordset

แƒ—แƒฃ แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒ˜แƒชแƒ˜แƒ—, แƒ แƒแƒ› แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ โ€žแƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒกโ€œ json แƒ›แƒแƒกแƒ˜แƒ•แƒ˜แƒ“แƒแƒœ แƒฌแƒแƒ•แƒ แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒ›แƒ” แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒจแƒ”แƒกแƒแƒ•แƒกแƒ”แƒ‘แƒแƒ“, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒ“แƒแƒ–แƒแƒ’แƒแƒ— แƒ•แƒ”แƒšแƒ”แƒ‘แƒจแƒ˜ โ€žแƒ’แƒแƒ“แƒแƒ แƒ˜แƒ’แƒ”แƒ‘แƒโ€œ แƒ“แƒ แƒ’แƒแƒ“แƒแƒ˜แƒขแƒแƒœแƒแƒ— แƒกแƒแƒกแƒฃแƒ แƒ•แƒ”แƒš แƒขแƒ˜แƒžแƒ”แƒ‘แƒ–แƒ” json_populate_recordset แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—:

SELECT
  *
FROM
  json_populate_recordset(
    NULL::pg_class
  , $1::json -- $1 : '[{"relname":"pg_class","oid":1262},{"relname":"pg_namespace","oid":2615}]'
  );

json_to_recordset

แƒ“แƒ แƒ”แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ โ€žแƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ•แƒ”แƒ‘แƒกโ€œ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒฃแƒš แƒ›แƒแƒกแƒ˜แƒ•แƒก แƒจแƒ”แƒ แƒฉแƒ”แƒ•แƒแƒจแƒ˜, แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒคแƒแƒ แƒ›แƒแƒขแƒ–แƒ” แƒ“แƒแƒงแƒ แƒ“แƒœแƒแƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”:

SELECT
  *
FROM
  json_to_recordset($1::json) T(k text, v integer);
-- $1 : '[{"k":"a","v":1},{"k":"b","v":2}]'
k | v
-----
a | 1
b | 2

แƒ“แƒ แƒแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ›แƒแƒ’แƒ˜แƒ“แƒ

แƒ›แƒแƒ’แƒ แƒแƒ› แƒ—แƒฃ แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒฃแƒš แƒœแƒ˜แƒ›แƒฃแƒจแƒจแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ“แƒ˜แƒ“แƒ˜แƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒ›แƒ˜แƒกแƒ˜ แƒ”แƒ แƒ— แƒกแƒ”แƒ แƒ˜แƒฃแƒš แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒจแƒ˜ แƒ’แƒแƒ“แƒแƒงแƒ แƒ แƒ แƒ—แƒฃแƒšแƒ˜แƒ แƒ“แƒ แƒ–แƒแƒ’แƒฏแƒ”แƒ  แƒจแƒ”แƒฃแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ”แƒก แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒ”แƒ แƒ—แƒฏแƒ”แƒ แƒแƒ“แƒก. แƒ“แƒ˜แƒ“แƒ˜ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒแƒ’แƒ แƒแƒ•แƒแƒ— แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ˜แƒ“แƒ˜ แƒžแƒแƒ แƒขแƒ˜แƒ แƒ’แƒแƒ แƒ” แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒ“แƒแƒœ แƒ“แƒ˜แƒ“แƒ˜ แƒฎแƒœแƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ™แƒ˜ แƒ’แƒกแƒฃแƒ แƒ— แƒ›แƒ˜แƒกแƒ˜ แƒ”แƒ แƒ—แƒฏแƒ”แƒ แƒแƒ“แƒ˜ แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ”แƒก.

แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒกแƒแƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒ แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ“แƒ แƒแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ›แƒแƒ’แƒ˜แƒ“แƒ”แƒ‘แƒ˜:

CREATE TEMPORARY TABLE tbl(k text, v integer);
...
INSERT INTO tbl(k, v) VALUES($1, $2); -- ะฟะพะฒั‚ะพั€ะธั‚ัŒ ะผะฝะพะณะพ-ะผะฝะพะณะพ ั€ะฐะท
...
-- ั‚ัƒั‚ ะดะตะปะฐะตะผ ั‡ั‚ะพ-ั‚ะพ ะฟะพะปะตะทะฝะพะต ัะพ ะฒัะตะน ัั‚ะพะน ั‚ะฐะฑะปะธั†ะตะน ั†ะตะปะธะบะพะผ

แƒ›แƒ”แƒ—แƒแƒ“แƒ˜ แƒ™แƒแƒ แƒ’แƒ˜แƒ แƒ“แƒ˜แƒ“แƒ˜ แƒ›แƒแƒชแƒฃแƒšแƒแƒ‘แƒ˜แƒก แƒ˜แƒจแƒ•แƒ˜แƒแƒ—แƒ˜ แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜.
แƒ›แƒ˜แƒกแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒก แƒ—แƒ•แƒแƒšแƒกแƒแƒ–แƒ แƒ˜แƒกแƒ˜แƒ—, แƒ“แƒ แƒแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ“แƒ”แƒ‘แƒ "แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜" แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒกแƒ’แƒแƒœ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ—แƒ˜ แƒ›แƒแƒฎแƒแƒกแƒ˜แƒแƒ—แƒ”แƒ‘แƒšแƒ˜แƒ—. pg_class แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒจแƒ˜แƒ“แƒ pg_type, pg_depend, pg_attribute, pg_attrdef, ... - แƒ“แƒ แƒกแƒแƒ”แƒ แƒ—แƒแƒ“ แƒแƒ แƒแƒคแƒ”แƒ แƒ˜.

แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒ•แƒ”แƒ‘ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ”แƒ‘แƒจแƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒกแƒแƒช แƒแƒฅแƒ•แƒ— แƒ“แƒ˜แƒ“แƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒ— แƒฎแƒแƒœแƒ›แƒแƒ™แƒšแƒ” แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒ’แƒแƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒแƒกแƒ”แƒ—แƒ˜ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ แƒงแƒแƒ•แƒ”แƒš แƒฏแƒ”แƒ แƒ–แƒ” แƒฌแƒแƒ แƒ›แƒแƒฅแƒ›แƒœแƒ˜แƒก แƒแƒฎแƒแƒš แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ  แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒฌแƒแƒ˜แƒจแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒกแƒ—แƒแƒœ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒ“แƒแƒฎแƒฃแƒ แƒ•แƒ˜แƒกแƒแƒก. แƒกแƒแƒ‘แƒแƒšแƒแƒแƒ“, TEMP TABLE-แƒ˜แƒก แƒฃแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก โ€žแƒจแƒ”แƒจแƒฃแƒžแƒ”แƒ‘แƒแƒกโ€œ pg_catalog-แƒจแƒ˜ แƒ“แƒ แƒแƒœแƒ”แƒšแƒ”แƒ‘แƒก แƒ›แƒแƒ— แƒ›แƒ˜แƒ”แƒ  แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒœแƒ”แƒšแƒ”แƒ‘แƒแƒก.
แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒแƒ›แƒ˜แƒกแƒ—แƒแƒœ แƒ‘แƒ แƒซแƒแƒšแƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒฃแƒšแƒ˜ แƒ’แƒแƒ•แƒšแƒ VACUUM FULL แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ™แƒแƒขแƒแƒšแƒแƒ’แƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—.

แƒกแƒ”แƒกแƒ˜แƒ˜แƒก แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜

แƒ“แƒแƒ•แƒฃแƒจแƒ•แƒแƒ—, แƒฌแƒ˜แƒœแƒ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ แƒ—แƒฃแƒšแƒ˜แƒ แƒ”แƒ แƒ—แƒ˜ SQL แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒ’แƒกแƒฃแƒ แƒ— แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒฎแƒจแƒ˜แƒ แƒแƒ“. แƒแƒœแƒฃ, แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒ˜แƒœแƒ“แƒ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒแƒ— แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒฃแƒšแƒ˜ แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ DO แƒ‘แƒšแƒแƒ™แƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ“แƒ แƒแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒชแƒฎแƒ แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ— แƒซแƒแƒšแƒ˜แƒแƒœ แƒซแƒ•แƒ˜แƒ แƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ.

แƒฉแƒ•แƒ”แƒœ แƒแƒกแƒ”แƒ•แƒ” แƒแƒ  แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒแƒ— $n-แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ แƒแƒœแƒแƒœแƒ˜แƒ›แƒฃแƒ  แƒ‘แƒšแƒแƒ™แƒ–แƒ” แƒ’แƒแƒ“แƒแƒกแƒแƒกแƒ•แƒšแƒ”แƒšแƒแƒ“. แƒกแƒ”แƒกแƒ˜แƒ˜แƒก แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒ“แƒแƒ’แƒ•แƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ˜แƒ“แƒแƒœ แƒ’แƒแƒ›แƒแƒกแƒ•แƒšแƒแƒจแƒ˜. แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ”_แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜.

9.2 แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒแƒ›แƒ“แƒ” แƒ›แƒแƒ’แƒ˜แƒฌแƒ˜แƒแƒ— แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ—แƒ แƒกแƒ˜แƒ•แƒ แƒชแƒ” แƒ›แƒแƒ แƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜_แƒชแƒ•แƒšแƒแƒ“แƒ˜_แƒ™แƒšแƒแƒกแƒ”แƒ‘แƒ˜ "แƒ›แƒแƒ—แƒ˜" แƒกแƒ”แƒกแƒ˜แƒ˜แƒก แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ•แƒ”แƒ แƒกแƒ˜แƒ”แƒ‘แƒ–แƒ” แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒ แƒแƒ›:

SET my.val = '{1,2,3}';
DO $$
DECLARE
  id integer;
BEGIN
  FOR id IN (SELECT unnest(current_setting('my.val')::integer[])) LOOP
    RAISE NOTICE 'id : %', id;
  END LOOP;
END;
$$ LANGUAGE plpgsql;
-- NOTICE:  id : 1
-- NOTICE:  id : 2
-- NOTICE:  id : 3

แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒกแƒฎแƒ•แƒ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒ แƒกแƒฎแƒ•แƒ แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒš แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒฃแƒš แƒ”แƒœแƒ”แƒ‘แƒ–แƒ”.

แƒ˜แƒชแƒ˜แƒ— แƒ›แƒ”แƒขแƒ˜ แƒ’แƒ–แƒ? แƒ’แƒแƒแƒ–แƒ˜แƒแƒ แƒ”แƒ— แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ”แƒ‘แƒจแƒ˜!

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ