জসন ডেটাটাইপে একটি জসন উপাদান আপডেট করুন


14

আমি পোস্টগ্র্রেএসকিউএল 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;

"প্রোফাইলগুলি" তে জেসন অংশ

{
    "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"
    }
}

আমি সীমান্তের জন্য এক্স-সম্পাদনা ব্যবহার করছি এবং আমি আশা করছিলাম যে এরকম কিছু কার্যকর হবে তবে এটি কার্যকর হয় না:

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

আমি কোনও জসন ডেটাটাইপ কীভাবে আপডেট করব সে সম্পর্কে কোনও তথ্য খুঁজে পাচ্ছি বলে মনে হচ্ছে না।

উত্তর:


7

যেহেতু এটি কেবল একটি স্ট্রিং, আপনি regex_replaceফাংশনটির সাহায্যে কোনও নোডের একটি সাধারণ পরিবর্তন / মুছতে সক্ষম হতে পারেন ।

উদাহরণস্বরূপ, আমি সম্প্রতি একটি টেবিলের (কিছু সারি) একটি নির্দিষ্ট জেএসএন নোডটি মুছে ফেলেছি:

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)"অবজেক্টে একটি (অর্থাত্ স্কিমা সংস্করণ) নোড রাখি । এইভাবে আমি নির্দিষ্ট সংস্করণের সাথে সম্মতিযুক্ত অবজেক্টগুলিকে আপডেট করতে পারি। আপনার প্রয়োজনীয়তাগুলি জটিল নাও হতে পারে, তবে যদি তা হয় তবে এটি অবশ্যই সহায়তা করে।


কর্স নেম উচ্চতা = unit 'ইউনিট': 'সেন্টিমিটার', 'মান': 150}
রাহুল দাপকে

3

আমি মনে করি আপনাকে পোস্টগ্রিস 9.3 এ সম্পূর্ণ ক্ষেত্রটি আপডেট করতে হবে, কমপক্ষে এটি ডকুমেন্টেশন আমাকে বলছে।

আমি ভুল না হলে একটি JSON নথিতে পৃথক উপাদান আপডেট করা 9.4 এ হবে।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.