পোস্টগ্রিস 9.3-এ জসন ফিল্ডে কীভাবে সূচক তৈরি করা যায়


111

PostgreSQL 9.3 বিটা 2 (?) এ, আমি কীভাবে একটি JSON ক্ষেত্রে একটি সূচক তৈরি করব? আমি এটির ->জন্য ব্যবহৃত অপারেটরটি ব্যবহার করে চেষ্টা করেছি hstoreতবে নিম্নলিখিত ত্রুটিটি পেয়েছি:

 CREATE TABLE publishers(id INT, info JSON);
 CREATE INDEX ON publishers((info->'name'));

ত্রুটি: ডেটা টাইপ জেসনের অ্যাক্সেস পদ্ধতির জন্য কোনও ডিফল্ট অপারেটর শ্রেণি নেই "বিটিআর" ইঙ্গিত: আপনাকে অবশ্যই সূচকের জন্য একটি অপারেটর শ্রেণি নির্দিষ্ট করতে হবে বা ডেটা টাইপের জন্য একটি ডিফল্ট অপারেটর শ্রেণি নির্ধারণ করতে হবে।


8
"প্রশ্ন কোথায়?" - শিরোনামে
rlib

2
ভবিষ্যতে দয়া করে স্ট্যাকওভারফ্লো . com / tags / postgresql / info , "আরও ভাল প্রশ্ন জিজ্ঞাসা" বিভাগটি দেখুন; এটি কম বিরক্তিকর প্রশ্নের সাথে আরও দ্রুত উত্তর পেতে সহায়তা করতে পারে।
ক্রেগ রিঞ্জার

উত্তর:


184

পাওয়া গেছে:

CREATE TABLE publishers(id INT, info JSON); 
CREATE INDEX ON publishers((info->>'name'));

মতামত হিসাবে বলা হয়েছে, এখানে সূক্ষ্ম পার্থক্য ->>পরিবর্তে হয় ->। পূর্ববর্তীটি পাঠ্য হিসাবে মানটি দেয়, পরে জেএসএন বস্তু হিসাবে।



38
কেবলমাত্র যদি আপনি পার্থক্যটি সন্ধান করছেন: এটি ->>পরিবর্তে ->। পূর্ববর্তীটি পাঠ্য হিসাবে মানটি ফেরত দেয়, পরেরটি একটি JSON অবজেক্ট প্রদান করে।
ড্যানিয়েল রিকোভস্কি

34
দ্বৈত-বন্ধনীগুলিও গুরুত্বপূর্ণ।
রন

11
@Jac_opo এটা তাদের চায়ের হিসাবেTEXT , যদিও। আপনি STRING তুলনা পরিবর্তে পূর্ণসংখ্যা তুলনা করতে চান, তাহলে আপনি একটি কাস্ট জুড়তে করতে হবে: ((info->>'name')::INT)
jpmc26

13
আপনি যদি আপনার জেএসওএন কলামের সাব-অবজেক্টের অভ্যন্তরে কোনও ক্ষেত্রটিতে একটি সূচক তৈরি করতে চান তবে @ ড্যানিয়েলিকোভস্কি ধন্যবাদ জানায় যে আমার create index idx_name on table_name ((json_column->'child_obj'->>'child_obj_field'));যা করার দরকার ছিল তা প্রথমে ->জেএসওএন অবজেক্টটি ->>পেতে এবং তারপরে সন্তানের অবজেক্টের মান পাওয়ার জন্য আমাদের প্রয়োজন পাঠ্য।
কোরি কোল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.