Tengo una mesa para almacenar información sobre mis conejos. Se parece a esto:
create table rabbits (rabbit_id bigserial primary key, info json not null);
insert into rabbits (info) values
('{"name":"Henry", "food":["lettuce","carrots"]}'),
('{"name":"Herald","food":["carrots","zucchini"]}'),
('{"name":"Helen", "food":["lettuce","cheese"]}');
¿Cómo puedo encontrar los conejos a los que les gustan las zanahorias? Se me ocurrió esto:
select info->>'name' from rabbits where exists (
select 1 from json_array_elements(info->'food') as food
where food::text = '"carrots"'
);
No me gusta esa consulta. Es un desastre.
Como cuidador de conejos a tiempo completo, no tengo tiempo para cambiar el esquema de mi base de datos. Solo quiero alimentar adecuadamente a mis conejos. ¿Existe una forma más legible de hacer esa consulta?