2011-08-28 8 views
10

Estoy consultando una base de datos en Postgres usando psql. He utilizado la siguiente consulta para buscar un campo llamado etiquetas que tiene una serie de texto, ya que es el tipo de datos:Consulta de Postgres de una matriz usando LIKE

select count(*) from planet_osm_ways where 'highway' = ANY(tags); 

ahora la necesidad de crear una consulta que busca en los etiquetas campos para cualquier palabra de partida con la letra 'A'. Intenté lo siguiente:

select count(*) from planet_osm_ways where 'A%' LIKE ANY(tags); 

Esto me da un error de sintaxis. ¿Alguna sugerencia sobre cómo usar LIKE con una matriz de texto?

Respuesta

15

utilizar la función de convertir unnest() matriz para establecer de filas:

SELECT count(distinct id) 
FROM (
    SELECT id, unnest(tags) tag 
    FROM planet_osm_ways) x 
WHERE tag LIKE 'A%' 

El count(dictinct id) debe contar con entradas únicas de planet_osm_ways mesa, basta con sustituir id con el nombre de su clave primaria.

Dicho esto, realmente debe pensar en almacenar etiquetas en una tabla separada, con relación de varios a uno con planet_osm_ways, o crear una tabla separada para las etiquetas que tendrán una relación de varios a varios con planet_osm_ways. La forma en que almacena etiquetas ahora hace que sea imposible usar índices mientras busca etiquetas, lo que significa que cada búsqueda realiza un escaneo completo de la tabla.

Cuestiones relacionadas