Json datatype में json एलिमेंट को अपडेट करें


14

मैं यह नहीं जान सकता कि मैं PostgreSQL 9.3 डेटाटाइप में एक तत्व को कैसे अपडेट कर सकता हूं।

मेरा उदाहरण:

CREATE TABLE "user"
(
  id uuid NOT NULL,
  password character varying(255),
  profiles json,
  gender integer NOT NULL DEFAULT 0,
  created timestamp with time zone,
  connected timestamp with time zone,
  modified timestamp with time zone,
  active integer NOT NULL DEFAULT 1,
  settings json,
  seo character varying(255) NOT NULL,
  CONSTRAINT id_1 PRIMARY KEY (id)
)
WITH (
  OIDS=TRUE
);
ALTER TABLE "user"
  OWNER TO postgres;

"प्रोफाइल" में json हिस्सा

{
    "Facebook": {
        "identifier": "xxxxxxxxxxx",
        "profileURL": "none",
        "webSiteURL": "none",
        "photoURL": "none",
        "displayName": "test2 test2",
        "description": "none",
        "firstName": "test2",
        "lastName": "test2",
        "gender": 2,
        "language": "none",
        "age": "none",
        "birthDay": "none",
        "birthMonth": "none",
        "birthYear": "none",
        "email": "test@test.com",
        "emailVerified": "none",
        "Added": null,
        "phone": "none",
        "address": "none",
        "country": "none",
        "region": "none",
        "city": "none",
        "zip": "none"
    },
    "Google": {
        "identifier": "xxxxxxxxxxxxxxxxxxxxxx",
        "profileURL": "none",
        "webSiteURL": "none",
        "photoURL": "none",
        "displayName": "test2 test2",
        "description": "none",
        "firstName": "test2",
        "lastName": "test2",
        "gender": 2,
        "language": "none",
        "age": "none",
        "birthDay": "none",
        "birthMonth": "none",
        "birthYear": "none",
        "email": "test@test.com",
        "emailVerified": "none",
        "Added": null,
        "phone": "none",
        "address": "none",
        "country": "none",
        "region": "none",
        "city": "none",
        "zip": "none"
    }
}

मैं दृश्यपटल के लिए x-edit का उपयोग कर रहा हूं, और मुझे उम्मीद थी कि ऐसा कुछ काम करेगा, लेकिन यह नहीं है:

UPDATE public.user 
SET "profiles"->'Facebook'->'social'->'facebook' = 'test' WHERE` id='id'

मैं किसी भी जानकारी को खोजने के लिए प्रतीत नहीं कर सकता कि कैसे एक jatt datatype को अपडेट किया जाए।

जवाबों:


7

चूंकि यह सिर्फ एक स्ट्रिंग है, आप regex_replaceफ़ंक्शन के साथ नोड के एक साधारण परिवर्तन / विलोपन को पूरा करने में सक्षम हो सकते हैं ।

उदाहरण के लिए, मैंने हाल ही में एक तालिका में सभी JSON नोड को हटा दिया है (सभी पंक्तियों):

UPDATE my_db.my_table
SET my_column = (regexp_replace(my_column::text, ',"some_json_node":(.*),', ','))::json
WHERE NOT my_column IS NULL

ध्यान दें, मेरे सभी JSON डेटा के लिए, मैं "version":"(n).(n)"ऑब्जेक्ट में (यानी स्कीमा संस्करण) नोड रखता हूं । इस तरह मैं उन वस्तुओं को अपडेट कर सकता हूं जो एक विशिष्ट संस्करण का अनुपालन करते हैं। आपकी आवश्यकताएं उस जटिल नहीं हो सकती हैं, लेकिन यदि वे हैं, तो यह निश्चित रूप से मदद करता है।


मुझे इसके लिए json ऑब्जेक्ट की आवश्यकता है जैसे col name ऊँचाई = {'यूनिट': 'cms', 'value': १५०}
राहुल डापके

3

मुझे लगता है कि आपको पोस्टग्रेज 9.3 पर पूरे क्षेत्र को अपडेट करना होगा, कम से कम यह वही है जो मुझे बता रहा है।

JSON दस्तावेज़ में व्यक्तिगत तत्वों को अपडेट करना 9.4 में होगा अगर मैं गलत नहीं हूँ।


2

इसे इस्तेमाल करे

UPDATE Tablename
SET columnname = replace(columnname::TEXT,'"name":','"my-other-name"')::jsonb 
WHERE id = 1;

मुझे इसके लिए json ऑब्जेक्ट की आवश्यकता है जैसे col name ऊँचाई = {'
Unit
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.