2015-05-07 18 views
5

DB Firebird 2.5.4Korzystanie obliczony indeks górny w Firebird porównać wielkość liter ma znaczenie ciągi

mam 1 stół, 2 pola smyczkowych i 1 komputerowej murawę:

Files 
name varchar 256 
extension varchar 4 
filename computed by name||extension 

chcę szukać nazwy pliku w tej tabeli (przypadek insensisive)

kwerenda jest

Select * 
from files f 
where upper(f.filename) = upper('test.txt') 

ten pracuje z Oczywiście, i przyspieszyć zapytanie, stworzyłem komputerowej indeks plików na upper(filename)

CREATE INDEX test ON FILES COMPUTED BY (upper(filename)); 

Teraz to samo zapytanie już nie działa! Nic nie zwraca. Próbowałem niższy indeks, ale to też nie działa.

wtf? Czy gdzieś tęsknię za opcją?

+0

Na pierwszy rzut oka brzmi jak błąd, zobaczę, czy mogę odtworzyć (dziś wieczorem, nie mam teraz dostępu do instancji Firebird) –

+0

Edytowałem post z dokładniejszym opisem 2 minuty temu. –

+1

W zeszłym tygodniu na liście dyskusyjnej support firebird-support pojawił się post, w którym ktoś wspomniał o podobnym problemie z indeksami w kolumnach obliczeniowych. W celu obejścia tego problemu prawdopodobnie można ustawić 'filename' jako zwykłą kolumnę i wypełnić ją w wyzwalaczu podczas aktualizacji i wstawiania. –

Odpowiedz

4

Wygląda na to, że firebird nie obsługuje obliczonych indeksów na polach obliczeniowych. Zastąpiłem obliczone pole "nazwa pliku" zwykłym polem "nazwa || rozszerzenie" w indeksie. Naprawia problem:

CREATE INDEX test ON FILES COMPUTED BY (upper(name||extension)); 

Raport o błędzie znaleziony here.

[EDIT]

Po próbując dostrzec problem, wydaje się, moja baza danych zawiera błędy wewnętrzne, z powodu migracji z wcześniejszej wersji. Mark Rotteveel przypomina mi release notes, gdzie problem jest opisany:

http://www.firebirdsql.org/file/documentation/release_notes/html/rlsnotes254.html#notes-253

I ekstrakcji metadanych i odbudować całą bazę danych. To rozwiązuje problem. Należy pamiętać, że kopia zapasowa i przywracanie powinny również działać.

Dziękuję Mark.

+0

To nie jest błąd. Jest to żądanie funkcji. :-) Osobiście nie oczekiwałbym indeksu na nieprzechowywanej kolumnie. –

+0

Zobacz edytowaną część wiadomości dotyczącej rozwiązania. Indeksy w niezamocowanych kolumnach działają bardzo dobrze. –