वर्तमान में मैं postgreSQL 9.5 के साथ काम कर रहा हूं और jsonb फ़ील्ड की सरणी के अंदर एक मान को अद्यतन करने का प्रयास कर रहा हूं। लेकिन मैं चयनित मान के सूचकांक प्राप्त करने में असमर्थ हूँpostgresql 9.5 jsonb_set json array
मेरे तालिका बस लगता है कि: सही मान काम करता है पाने के लिए
{"result": [
{"8410": "ABNDAT", "8411": "Abnahmedatum"},
{"8410": "ABNZIT", "8411": "Abnahmezeit"},
{"8410": "FERR_R", "8411": "Ferritin"}
]}
मेरे SELECT कथन:
CREATE TABLE samples (
id serial,
sample jsonb
);
मेरे JSON की तरह दिखता है :
SELECT
id, value
FROM
samples s, jsonb_array_elements(s.sample#>'{result}') r
WHERE
s.id = 26 and r->>'8410' = 'FERR_R';
परिणामों में:
+०१२३५१६४१०id | value
----------------------------------------------
26 | {"8410": "FERR_R", "8411": "Ferritin"}
ठीक है, यह वही है जो मैं चाहता था। अब मैं एक नए तत्व "ratingtext" जोड़ने के लिए निम्नलिखित अद्यतन कथन का उपयोग एक अद्यतन निष्पादित करने के लिए (यदि पहले से ही वहाँ नहीं) हैं:
UPDATE
samples s
SET
sample = jsonb_set(sample,
'{result,2,ratingtext}',
'"Some individual text"'::jsonb,
true)
WHERE
s.id = 26;
के बाद अद्यतन बयान निष्पादित, अपने डेटा इस (यह भी सही) की तरह दिखता है:
{"result": [
{"8410": "ABNDAT", "8411": "Abnahmedatum"},
{"8410": "ABNZIT", "8411": "Abnahmezeit"},
{"8410": "FERR_R", "8411": "Ferritin", "ratingtext": "Some individual text"}
]}
अब तक तो अच्छा है, लेकिन मैं मैन्युअल 2 के सूचकांक मूल्य की खोज JSON सारणी के अंदर सही तत्व प्राप्त करने के लिए। अगर आदेश बदल दिया जाएगा, यह काम नहीं करेगा।
तो मेरी समस्या:
वहाँ एक रास्ता चयनित JSON सारणी तत्व के सूचकांक मिलता है और SELECT कथन और एक में अद्यतन बयान गठबंधन करने के लिए है?
बस की तरह है:
UPDATE
samples s
SET
sample = jsonb_set(sample,
'{result,' || INDEX OF ELEMENT || ',ratingtext}',
'"Some individual text"'::jsonb,
true)
WHERE
s.id = 26;
samples.id और "8410" के मूल्यों बयान तैयार करने से पहले जाना जाता है।
या इस समय यह संभव नहीं है?
आपके उत्तर के लिए बहुत बहुत धन्यवाद! यह एक आकर्षक की तरह काम करता है! मुझे एहसास नहीं हुआ कि मैं WHERE खंड में ** elem ** का उपयोग कर सकता हूं। –
धन्यवाद klin, यह सिर्फ मेरे दिन बचाया! –