2012-04-05 14 views
11
CREATE INDEX message_fulltext_idx ON feedback USING gin(to_tsvector(message)); 
 
ERROR: functions in index predicate must be marked IMMUTABLE 

Jak tego uniknąć?Postgres indeksy pełny

Odpowiedz

16

Musisz dołączyć opcjonalny parametr konfiguracyjny. Bez tego funkcja nie jest niezmienna. Na przykład, jeśli chcesz przetworzyć standardowy tekst w języku angielskim:

CREATE INDEX message_fulltext_idx ON feedback 
    USING gin(to_tsvector('english', message)); 
+6

To jest poprawna odpowiedź. Pierwsza forma 'to_tsvector' użyje domyślnego parametru konfiguracyjnego, który pochodzi z ustawienia' default_text_search_config'. Ponieważ jest to zmienne ustawienie, funkcja nie jest niezmienna. Gdyby się to zmieniło, istniejący indeks oparty na niezmiennej funkcji byłby cicho uszkodzony. Więc jest to zabronione. Zobacz http://www.postgresql.org/docs/current/static/textsearch-tables.html#TEXTSEARCH-TABLES-INDEX. – Edmund