Tengo cargados datos de OpenStreetMap en una base de datos PostgreSQL. Una columna de tipo hstore contiene todas las parejas clave=valor. Algunas claves de OSM tienen sufijos como name:en, name:de, name:hu
etc.
Me gustaría crear una consulta donde pueda hacer referencia a todas las claves name
, tanto la simple name
como la sufijada name:en, name.de
... también. Me gustaría ver si hay algún registro donde el valor de cualquiera de las claves name
sea igual a 'algún string'
.
La solución, absolutamente no elegante y amigable con la memoria, que se me ocurrió:
Seleccionar todas las claves de nombre únicas:
WITH a AS (SELECT DISTINCT(skeys(tags)) as key FROM public.ways)
SELECT key FROM a WHERE key~'^name$' OR key~'^name:';
En un editor de texto, crea una consulta como esta:
WITH string(s1) AS (VALUES('algún string'))
SELECT * FROM public.ways,string WHERE tags->'name' ~ s1
UNION SELECT * FROM public.ways,string WHERE tags->'name:en' ~ s1
UNION SELECT * FROM public.ways,string WHERE tags->'name:de' ~ s1;