PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

क्वेरी कुंजी की परवाह किए बिना मान के आधार पर jsonb को पोस्टग्रेज करती है

साधारण JSONs के लिए आप अधिक उपयुक्त क्वेरी का उपयोग कर सकते हैं जैसे

select * 
from mytable t 
where exists (
  select 1 
  from jsonb_each_text(t.jsonbfield) j 
  where j.value = 'hello');

यह आपके उदाहरण की तरह JSON के लिए ठीक काम करता है लेकिन {"a":"hello","b":1,,"c":{"c":"world"}} जैसे अधिक जटिल JSON के लिए मदद नहीं करता है। /कोड>

मैं इस तरह से संग्रहीत फ़ंक्शन बनाने का प्रस्ताव कर सकता हूं

create or replace function jsonb_enum_values(in jsonb) returns setof varchar as $$
begin
  case jsonb_typeof($1)
    when 'object' then
      return query select jsonb_enum_values(j.value) from jsonb_each($1) j;
    when 'array' then
      return query select jsonb_enum_values(a) from jsonb_array_elements($1) as a;
    else
      return next $1::varchar;
  end case;
end
$$ language plpgsql immutable;

पुनरावर्ती वस्तुओं सहित सभी मूल्यों को सूचीबद्ध करने के लिए (यह आप पर निर्भर है कि सरणियों के साथ क्या करना है)।

यहां उपयोग का उदाहरण दिया गया है:

with t(x) as (
  values
    ('{"a":"hello","b":"world","c":1,"d":{"e":"win","f":"amp"}}'::jsonb),
    ('{"a":"foo","b":"world","c":2}'),
    ('{"a":[{"b":"win"},{"c":"amp"},"hello"]}'),
    ('[{"a":"win"}]'),
    ('["win","amp"]'))
select * 
from t 
where exists (
  select *
  from jsonb_enum_values(t.x) j(x) 
  where j.x = '"win"');

ध्यान दें कि स्ट्रिंग मान के आस-पास दोहरे उद्धरण चिह्न हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. किसी अन्य तालिका से यादृच्छिक डेटा पॉप्युलेट करें

  2. मैं जावा का उपयोग करके PostgreSQL डेटाबेस में मौजूदा डेटाबेस से नई XML फ़ाइल कैसे बना सकता हूं?

  3. ओपनप्रोजेक्ट के लिए डेटा खोए बिना पोस्टग्रेस्क्ल डेटाबेस को 10 से 12 तक अपग्रेड कैसे करें

  4. PostgreSQL 9.5+ . में JSON सरणी से जोड़ना (धक्का देना) और हटाना

  5. हाइव या पोस्टग्रेज में विभिन्न कार्यों को कब करना है, यह निर्धारित करने के लिए विंडो फ़ंक्शन का उपयोग कैसे करें?