আপনি যদি Postgresql 9.5 এ আপগ্রেড করতে সক্ষম হন jsonb_set
, অন্যরা যেমন উল্লেখ করেছে তেমন কমান্ডটি উপলব্ধ।
নিম্নলিখিত প্রতিটি এসকিউএল বিবৃতিতে, আমি where
ব্রেভিটির জন্য ধারাটি বাদ দিয়েছি ; স্পষ্টতই, আপনি এটি ফিরে যোগ করতে চাই।
আপডেট নাম:
UPDATE test SET data = jsonb_set(data, '{name}', '"my-other-name"');
ট্যাগগুলি প্রতিস্থাপন করুন (ট্যাগগুলি যুক্ত করতে বা অপসারণের বিরোধিতা হিসাবে):
UPDATE test SET data = jsonb_set(data, '{tags}', '["tag3", "tag4"]');
দ্বিতীয় ট্যাগটি প্রতিস্থাপন করা হচ্ছে (0-সূচিত):
UPDATE test SET data = jsonb_set(data, '{tags,1}', '"tag5"');
একটি ট্যাগ যুক্ত করুন ( এটি যতক্ষণ না 999 ট্যাগের চেয়ে কম ট্যাগ হিসাবে কাজ করবে; 999 থেকে 1000 বা তদূর্ধ্ব আর্গুমেন্ট একটি ত্রুটি তৈরি করে gene এটি পোস্টগ্রিস 9.5.3-এ আর দেখা যায় না; আরও বড় সূচক ব্যবহার করা যেতে পারে) :
UPDATE test SET data = jsonb_set(data, '{tags,999999999}', '"tag6"', true);
শেষ ট্যাগটি সরান:
UPDATE test SET data = data #- '{tags,-1}'
জটিল আপডেট (শেষ ট্যাগটি মুছুন, একটি নতুন ট্যাগ সন্নিবেশ করান, এবং নামটি পরিবর্তন করুন):
UPDATE test SET data = jsonb_set(
jsonb_set(data #- '{tags,-1}', '{tags,999999999}', '"tag3"', true),
'{name}', '"my-other-name"');
এটি লক্ষণীয় যে এই প্রতিটি উদাহরণে আপনি আসলে JSON ডেটার একটি একক ক্ষেত্র আপডেট করছেন না। পরিবর্তে, আপনি ডেটাটির একটি অস্থায়ী, পরিবর্তিত সংস্করণ তৈরি করছেন এবং সেই সংশোধিত সংস্করণটি কলামে ফিরিয়ে দিচ্ছেন। অনুশীলনে, ফলাফলটি একই হওয়া উচিত, তবে এটি মাথায় রেখে শেষ উদাহরণের মতো জটিল আপডেট করা উচিত, আরও বোধগম্য।
জটিল উদাহরণে, তিনটি রূপান্তর এবং তিনটি অস্থায়ী সংস্করণ রয়েছে: প্রথমত, সর্বশেষ ট্যাগটি সরানো হয়েছে। তারপরে, নতুন ট্যাগ যুক্ত করে সেই সংস্করণটি রূপান্তরিত হবে। এরপরে, দ্বিতীয় সংস্করণটি name
ক্ষেত্রটি পরিবর্তন করে রুপান্তরিত হবে । data
কলামের মান চূড়ান্ত সংস্করণ দিয়ে প্রতিস্থাপিত হয়।