Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

180
Views
Postgres accediendo a elementos JSONB de manera eficiente

Tengo la tabla batch_table , que contiene el tipo de ID de batchid de serial int y el tipo de data de JSONB, indexé la columna data usando GIN ,

 batchid | data --------------------------------------------- 1 | [{"year":2000,"productid":[21, 32, 5]}] 2 | [{"year":2001,"productid":[21, 39, 5]},{"year":2000,"productid":[1, 25, 5]}] 3 | NULL 4. | [{"year": 2000,"productid":[5]}

Ahora quiero obtener batchid usando los siguientes requisitos
1. year = 2000 & productid = 5
2. year = 2000 & productid = (21 o 5)
3. year = 2000 & productid = (21 & 5)

y probé esto

 SELECT batchid FROM batch_table WHERE (data->>'year')::int = 2000 AND (data->>'productid')::int = 5;

con AND & OR para otras consultas

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Puede usar el operador de contención @> para buscar en jsonb (esto incluso puede usar su índice):

1.

 select * from batch_table where data @> '[{"year":2000,"productid":[5]}]';

2.

 select * from batch_table where data @> '[{"year":2000,"productid":[21]}]' or data @> '[{"year":2000,"productid":[5]}]';

3.

Dependiendo de sus necesidades, puede utilizar uno de estos:

  • Estos seleccionarán filas, donde el año = 2000 con productid = 21 están en el mismo objeto y el año = 2000 con productid = 5 están en el mismo objeto (pero estos objetos pueden ser diferentes).

     select * from batch_table where data @> '[{"year":2000,"productid":[21]}]' and data @> '[{"year":2000,"productid":[5]}]'; select * from batch_table where data @> '[{"year":2000,"productid":[21]},{"year":2000,"productid":[5]}]';
  • Esto seleccionará filas, donde el año = 2000 con productid = 21 están en el mismo objeto , así como productid = 5

     select * from batch_table where data @> '[{"year":2000,"productid":[21, 5]}]';

http://rextester.com/ZMCUME18642

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!