Usando el tipo de dato jsonb de PostgreSQL 9.4
A partir de la versión 9.4 PostgreSQL incorpora un nuevo tipo de dato jsonb cuyo cometido es permitir almacenar datos en formato json, pero además (y mucho más importante) realizar búsquedas que incluyan condiciones que involucren atributos de ese json. Es decir, acercar un poco de NoSQL al mundo relacional.
Recomiendo mucho ver el siguiente link, sobre todo la parte de 8.14.4. jsonb indexing, ya que hay básicamente dos formas de crear un indice para este tipo de campos, y dependiendo la forma que uno elija es básicamente lo que va a poder hacer después.
http://www.postgresql.org/docs/9.4/static/datatype-json.html
Básicamente, hay un índice (el por defecto) que permite realizar todo tipo de operaciones con los atributos del json en cuestión, y otro índice (jsonb_path_ops) que permite un set de operaciones más restringidas. Cual es la diferencia entonces? El índice por defecto ocupa mucho más espacio en disco y performa mejor para un tipo de operaciones, mientras que el alternativo ocupa menos espacio y es más optimo cuando la query es puntual y puede resolverse con el set de instrucciones reducida
En el link que pego a continuación van a poder ver todos los operadores, los de un índice y los del otro y cual es su cometido y potencia.
http://www.postgresql.org/docs/9.4/static/functions-json.html
Por último, este post nos ayudó mucho a entender si este acercamiento no relacional de PostgreSQL 9.4 era para nosotros o no, si aplicaba anuestro caso, si podíamos sacarle algo bueno. El punto clave es no desarrollar una solución tirada de los pelos. Si la solución cierra y se puede exprimir de un solo motor de base de datos beneficios relacionales y no relacionales, buenísimo, sinó habrá que ir a una solución puramente relacional, no relacional o ambas, pero siempre por separado.
https://www.compose.io/articles/is-postgresql-your-next-json-database/