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

पोस्टग्रेज में एक जटिल नेस्टेड संरचना से एक विशिष्ट कुंजी नाम के साथ जसन तत्वों को पुनः प्राप्त करना

यह पुनरावर्ती फ़ंक्शन एक जटिल jsonb ऑब्जेक्ट से सभी विशेषताओं को निकालता है:

create or replace function jsonb_extract_all(jsonb_data jsonb, curr_path text[] default '{}')
returns table(path text[], value text)
language plpgsql as $$
begin
    if jsonb_typeof(jsonb_data) = 'object' then
        return query 
            select (jsonb_extract_all(val, curr_path || key)).*
            from jsonb_each(jsonb_data) e(key, val);
    elseif jsonb_typeof(jsonb_data) = 'array' then
        return query 
            select (jsonb_extract_all(val, curr_path || ord::text)).*
            from jsonb_array_elements(jsonb_data) with ordinality e(val, ord);
    else
        return query
            select curr_path, jsonb_data::text;
    end if;
end $$;

उदाहरण उपयोग:

with my_table(data) as (
select
    '{
        "$type": "a",
        "other": "x",
        "nested_object": {"$type": "b"},
        "array_1": [{"other": "y"}, {"$type": "c"}],
        "array_2": [{"$type": "d"}, {"other": "z"}]
    }'::jsonb
)

select f.*
from my_table
cross join jsonb_extract_all(data) f
where path[cardinality(path)] = '$type';

         path          | value 
-----------------------+-------
 {$type}               | "a"
 {array_1,2,$type}     | "c"
 {array_2,1,$type}     | "d"
 {nested_object,$type} | "b"
(4 rows)    


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sequelize ORM में PostGIS GEOMETRY Point कैसे डालें?

  2. Postgres प्रारंभ नहीं किया जा सकता

  3. Django परीक्षण जुड़नार लोड करने में असमर्थ, IntegrityError

  4. PostgreSQL से AWS s3 में बड़ा डेटा निर्यात करें

  5. Postgresql:अमान्य रेगुलर एक्सप्रेशन:अमान्य बैकरेफ़रेंस संख्या