2011-08-28 12 views
10

Zapytanie o bazę danych w PostgreSQL za pomocą psql. Użyłem następujące zapytanie w celu wyszukania pole o nazwie tagi który ma tablicę tekstu jak to jest typ danych:Kwerenda Postgres z tablicy przy użyciu LIKE

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

Teraz trzeba utworzyć kwerendę, która przeszukuje tagów polach za każdym uruchomieniem słowo z literą "A". Próbowałem następujące:

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

Daje mi to błąd składni. Wszelkie sugestie dotyczące używania LIKE z tablicą tekstową?

Odpowiedz

15

Użyj funkcji unnest() przekonwertować tablicę do zestawu wierszy:

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

count(dictinct id) powinien liczyć unikalne wpisy z planet_osm_ways tabeli, po prostu zastąpić id z nazwą Twojego użytkownika klucz podstawowy.

W związku z tym powinieneś pomyśleć o przechowywaniu tagów w osobnej tabeli, z relacją wiele do jednego z planet_osm_ways, lub utworzyć oddzielną tabelę dla znaczników, które będą miały relację wiele do wielu z planet_osm_ways. Sposób, w jaki przechowujesz znaczniki, uniemożliwia teraz korzystanie z indeksów podczas wyszukiwania znaczników, co oznacza, że ​​każde wyszukiwanie wykonuje pełne skanowanie tabeli.

Powiązane problemy