ααΈααααα½ααα
ααααα½αα’αααα’αα·ααααααααααΌαααΆα ααααααΆαααααα»ααααααΆαααΆαααααα α¬ααΌααααΈααααΆαααααΎαααΎαααΆααααΌααα
ααΉαααααΎ "αα
α
αααα
αΌα" α αααααααααΆααααααααααΆαα
ααααα
αααααααα αΆαααα
α
αΌαααΎααα
"ααΈααΆααααα»αααααΆ" α αΎαααΎαααΈαααααα·αααααΎααΆ α ααα»α’αααΈ αα·ααααααααα’αααα’αΆα
ααααΎααΆααΆααααααΎαααΆααα»αα
"ααΆααααα αΌα" αααααααΆααααααααααα αααα»ααα½ααααΎ
ααΆααααααΆααΆααΎααα ααΌα αααα
query = "SELECT * FROM tbl WHERE id = " + value
... α¬ααΌα αααα
query = "SELECT * FROM tbl WHERE id = :param".format(param=value)
α’αααΈαα·ααΈααΆααααααααααΆααααΌαααΆααα·ααΆαααααααα·α
ααααΎαααααΆαα·α
αα
ααΆα ααααΌαααααΆαααα
ααΆααααΆαα
αΆαα 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;
ααΆα/α
αΆα αααα»αααααΈααααα "αααα»αααααααΆα" αα
ααΆααααα»αα’αΆαααα½α αα½αααΆααααΌαααΆααααα»αααΆαα½αααααααα
ααΆα
αααΆααααΆααααΆααΆααααααααα’αααα’αΆα
"αααααΈα" ααΆαααααΎαααΎαααΆαα½αααΉαα
ααα½αααΆααααααααΆαα
unnest, unnest,β¦
ααΈααααα½ααα
ααααα½αααΆααααααΎααααααΆααααΆαααααααΆαααααα½αα±αα "α’αΆααααα’αΆαα" "α’αΆαααααα½ααα" ααΆα
αααΎαααααααα»αααΆαααΎαα‘αΎα
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)ααα»αααα "ααα" ααααΉαααααΌαααΆαα½αααΉαααΆαααα α ααααΈααααα»αααα»αααααΆααα αααα»α hstore α’αΆα αααααΆαα±ααααΆααααα αΆα
json_populate_recordset
ααααα·αααΎα’αααααΉαααΆαα»αααΆαα·ααααααααΈ "input" json array ααΉααα ααααααααα»αααΆααΆααα½αα ααα½α α’αααα’αΆα αααααααΆαα αααΎααααα»α "dereferencing" fields α αΎααααααΌααα ααΆαααααααααααα ααααΆααααααααΎαα»αααΆα 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 ααα αααααΎαααααΆαααΆααΆαααααΆααΆα‘α»αααααααααα
α’ααααααα
α§αααΆααΆααΆαααααΎαααΆααα·ααααααααΈααααΈαα»αααΊαααα»αααααΆααααααΆαααααα½α SQL αααα½α ααα»ααααα’αααα
ααααααΎααΆααΉαααΆααα αααααΊααΎαα
ααααααΎααααΎαααΆαααΈαα·αα·ααΈαα
αααα»α
ααΎααααα·αα’αΆα ααααΎ $n-parameters ααΎααααΈαααααΌααα ααΆαααααα»αα’ααΆαα·ααααα α’ααααααα αα·ααα»αααΆαααΉααα½αααΎαα ααααΈααααΆαααΆαα ααΆαααααααα αα α»αααααα.
αα»αααααααα 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