PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Заявка за композитен JSONB масив в Postgres?

Трябва да разделите масивите от най-високо ниво и да проверите елементите оттам:

select distinct id, content
FROM test
JOIN lateral (
    select elems 
    FROM jsonb_array_elements(content) jae(elems)
) all_arrays ON TRUE
WHERE elems ->> 0 = 'first 1'
and elems ->> 1 ilike '%3%'
ORDER BY 1;

Що се отнася до най-добрия начин да направите това, това зависи много от действителните ви данни - колко реда, колко големи са тези jsonb структури и т.н. Като цяло обаче търсене като иликато "%3%" ще се възползва от базирани на индекси от pg_trgm, защото не могат да използват традиционни btree индекси.

Редактиране:Заявката на @Abelisto в коментарите е по-добра, защото трябва да е по-ефективна, особено ако съдържанието може да съдържа 1000 елементи:

select * from test 
where exists 
  (select 1 
   from jsonb_array_elements(content) jae(elems) 
   where elems ->> 0 = 'first 1' 
   and elems ->> 1 ilike '%3%'
  );


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка при премахване на базата данни на Postgres:pq:не може да премахне текущо отворената база данни

  2. Rails 4 / postgresql - вмъкване на данни в таблица въз основа на данни от друга таблица (after_create)

  3. PostgreSQL:Какъв е максималният брой таблици, които могат да се съхраняват в базата данни на postgreSQL?

  4. Как да получавам автоматични известия за промени в таблиците?

  5. Относно полезността на индексите на изразяване