Mai i te wa ki te wa, ka hiahia te kaiwhakawhanake tukuna he huinga tawhā, he kowhiringa katoa ranei ki te tono "i te tomokanga". I etahi wa he tino rerekee nga otinga mo tenei raru.
Me haere "mai i te ritenga" ka kite me pehea e kore ai e mahi, he aha, me pehea e pai ake ai.
Tika "whakauru" o nga uara ki te tinana tono
Ko te tikanga he penei te ahua:
query = "SELECT * FROM tbl WHERE id = " + value
... penei ranei:
query = "SELECT * FROM tbl WHERE id = :param".format(param=value)
Mo tenei tikanga e kiia ana, kua tuhia me
Tata ki nga wa katoa ara tika ki te werohanga SQL me tetahi atu kawenga mo te arorau pakihi, ka kaha ki te "whakapiri" i to aho patai.
Ko tenei huarahi ka taea te whakatika i tetahi waahanga mehemea e tika ana. whakamahi wehewehe i roto i nga putanga PostgreSQL 10 me raro mo te mahere pai ake. I enei putanga, ka whakatauhia te rarangi o nga waahanga karapahia me te kore e whai whakaaro ki nga taapiri kua tukuna, i runga noa i te kaupapa o te tinana tono.
$n tohenga
Whakamahia
Tau taurangi o nga tohenga
Ka tatari mai nga raru ina hiahia ana tatou ki te tuku i te maha o nga tautohetohenga i mua i te waa:
... id IN ($1, $2, $3, ...) -- $1 : 2, $2 : 3, $3 : 5, ...
Mena ka waiho e koe te tono i roto i tenei puka, na ahakoa tenei ka whakaora i a maatau mai i nga werohanga ka taea, ka mau tonu te hiahia ki te whakapiri / poroporoaki i te tono. mo ia whiringa mai i te maha o nga tohenga. Kua pai ake i te mahi i nga wa katoa, engari ka taea e koe me te kore.
He nui noa te tuku i tetahi tawhā kei roto whakaaturanga raupapa o te huinga:
... id = ANY($1::integer[]) -- $1 : '{2,3,5,8,13}'
Ko te rereketanga anake ko te hiahia ki te huri i te tohenga ki te momo hurangi e hiahiatia ana. Engari kaore tenei e puta he raruraru, i te mea kua mohio tatou i mua ki te waahi e korero ana tatou.
Tauira whakawhiti (matrix)
I te nuinga o nga wa ko enei momo momo whiringa mo te whakawhiti i nga huinga raraunga hei whakauru ki roto i te papanga raraunga "i roto i te tono kotahi":
INSERT INTO tbl(k, v) VALUES($1,$2),($3,$4),...
I tua atu i nga raruraru kua whakahuahia i runga ake nei me te "whakapiri" o te tono, ka taea hoki e tenei te arahi ia tatou kua ngaro te mahara me te tukinga tūmau. He maamaa noa te take - ka rahuitia e PG etahi atu mahara mo nga tautohetohe, a ko te maha o nga rekoata kei roto i te huinga he iti noa ma te tono arorau pakihi Wishlist. I roto i nga keehi haumanu he mea tika kia kite "tau" tohenga nui ake i te $9000 - kaua e pena.
Me tuhi ano te patai, me tono kee "taumata-rua" raupapa:
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;
Ae, mo nga uara "matatini" kei roto i te huinga, me hanga ki nga korukī.
E marama ana ma tenei ka taea e koe te "whakawhanui" te kowhiringa me te maha o nga mara.
koretake, koretake,…
Mai ia wa ki tera wa he whiringa mo te whakawhiti hei utu mo te "ahua o nga rarangi" he maha nga "ahua o nga pou" i whakahuahia e au
SELECT
unnest($1::text[]) k
, unnest($2::integer[]) v;
Ma tenei tikanga, mena ka he koe i te wa e whakaputa ana i nga raarangi uara mo nga pou rereke, he tino ngawari ki te tiki hua ohorere, e whakawhirinaki ana hoki ki te putanga tūmau:
-- $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
Ka timata mai i te putanga 9.3, he tino mahi a PostgreSQL mo te mahi me te momo json. Na reira, ki te tautuhia o tawhā whakauru i roto i te tirotiro, ka taea e koe ki reira ka hanga json ahanoa mo te uiui SQL:
SELECT
key k
, value v
FROM
json_each($1::json); -- '{"a":1,"b":2,"c":3,"d":4}'
Mo nga putanga o mua, ka taea te whakamahi i taua tikanga mo ia(hstore), engari ka tika te "kopi" me te mawhiti i nga mea uaua i te hstore ka raru pea.
json_populate_recordset
Mena ka mohio koe i mua ko nga raraunga mai i te "whakauru" json array ka haere ki te whakaki i etahi ripanga, ka taea e koe te penapena nui i roto i nga mara "whakapae" me te maka ki nga momo e hiahiatia ana ma te whakamahi i te mahi 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
Na tenei mahi ka "whakawhanui" i te huinga o nga mea kua paahitia ki roto i te kowhiringa, me te kore e whakawhirinaki ki te whakatakotoranga ripanga:
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
TEPUTANGA TANGATA
Engari ki te mea he nui rawa te nui o nga raraunga i roto i te tauira kua tukuna, katahi ka uaua te maka ki roto i tetahi tawhā rangatū, i etahi wa kaore e taea, na te mea me kotahi te waa. te tohatoha mahara nui. Hei tauira, me kohikohi koe i te puranga nui o nga raraunga takahanga mai i tetahi punaha o waho mo te wa roa, ka hiahia koe ki te tukatuka i te waa kotahi ki te taha o te paparangi raraunga.
I tenei keehi, ko te otinga pai ko te whakamahi
CREATE TEMPORARY TABLE tbl(k text, v integer);
...
INSERT INTO tbl(k, v) VALUES($1, $2); -- повторить много-много раз
...
-- тут делаем что-то полезное со всей этой таблицей целиком
He pai te tikanga mo te tuku auau o nga pukapuka nui raraunga
Mai i te tirohanga ki te whakaahua i te hanganga o ana raraunga, he rereke te ripanga rangitahi mai i te ripanga "noa" i roto i te waahanga kotahi anake. kei te ripanga punaha pg_class, a roto pg_type, pg_depend, pg_huanga, pg_attrdef, ... — a kahore rawa.
Na reira, i roto i nga punaha tukutuku me te maha o nga hononga poto mo ia o ratou, ka whakaputahia e taua tepu nga rekoata punaha hou i ia wa, ka mukua ina katia te hononga ki te papaarangi. Nāwai rā, Ko te whakamahi koretake o TEMP TABLE ka "pupuhi" o nga ripanga kei pg_catalog me te whakaheke i nga mahi maha e whakamahi ana.
Ko te tikanga, ka taea te whawhai ki tenei te haere i ia wa, KAUPAPA KAUPAPA e ai ki nga ripanga putumōhio pūnaha.
Taurangi Wātū
Mehemea he tino uaua te tukatuka o nga raraunga mai i te keehi o mua mo te patai SQL kotahi, engari me mahi tonu koe. Ko, e hiahia ana matou ki te whakamahi i te tukatuka tikanga i roto i
Kaore hoki e taea e matou te whakamahi $n-tawhā ki te whakawhiti ki tetahi poraka ingoamuna. Ko nga taurangi huihuinga me te mahi ka awhina i a maatau ki te puta atu i te ahuatanga. tautuhinga_ianei.
I mua i te putanga 9.2, me whirihora i mua
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
He otinga ano kei roto i etahi atu reo whakahaere e tautokohia ana.
E mohio ana etahi atu huarahi? A faaite i roto i nga korero!
Source: will.com