PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Kumpulkan Kunci JSON Rekursif Di Postgres

Triknya adalah menambahkan beberapa pengujian kondisi akhir menggunakan json_typeof di tempat yang tepat.

Anda juga harus menggunakan jsonb jika Anda tidak peduli dengan urutan kunci objek.

Inilah lingkungan kerja saya:

CREATE TABLE test (
  id  SERIAL PRIMARY KEY,
  doc JSON
);

INSERT INTO test (doc) VALUES ('{
 "files": {
  "folder": {
   "file1": {
    "property": "blah"
   },
   "file2": {
    "property": "blah"
   },
   "file3": {
    "property": "blah"
   },
   "file4": {
    "property": "blah",
    "prop" : {
      "clap": "clap"
    }
   }
 }
},
"software": {
  "apt": {
    "package1": {
        "version": 1.2
    },
    "package2": {
        "version": 1.2
    },
    "package3": {
        "version": 1.2
    },
    "package4": {
        "version": 1.2
    }
  }
 }
}');

Rekursi dihentikan saat kueri kedua tidak mengembalikan baris apa pun. Ini dilakukan dengan melewatkan objek kosong ke json_each .

 WITH RECURSIVE doc_key_and_value_recursive(key, value) AS (
  SELECT
    t.key,
    t.value
  FROM test, json_each(test.doc) AS t

  UNION ALL

  SELECT
    t.key,
    t.value
  FROM doc_key_and_value_recursive,
    json_each(CASE 
      WHEN json_typeof(doc_key_and_value_recursive.value) <> 'object' THEN '{}' :: JSON
      ELSE doc_key_and_value_recursive.value
    END) AS t
)
SELECT *
FROM doc_key_and_value_recursive
WHERE json_typeof(doc_key_and_value_recursive.value) <> 'object';


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tentang indeks berkerumun di postgres

  2. Gagal memuat modul sql ke dalam cluster database selama Instalasi PostgreSQL

  3. Cara Memantau PostgreSQL menggunakan Nagios

  4. Cara terbaik untuk menghitung catatan dengan interval waktu sewenang-wenang di Rails+Postgres

  5. Pengecualian dalam JPA saat menggunakan file benih untuk PostgreSQL