text_pattern_ops -> LIKE aber nicht =

Die Situation:

CREATE UNIQUE INDEX idx_textkey
  ON myDB."TX_TEXTKEYS"
  USING btree
  (lower(textkey::text) text_pattern_ops);

Query mit Operator “=” im where

explain select * from archiv9."TX_TEXTKEYS" t
where lower(t.textkey) = 'asdasd'

führt zu Seq Scan on “TX_TEXTKEYS” t

Query mit Operator “LIKE” im where

explain select * from archiv9."TX_TEXTKEYS" t
where lower(t.textkey) like 'asdasd'

führt zu Index Scan on idx_textkey …

Ich vermutete, dass (mit Verlaub) dieser Unsinn mit der Operator-Klasse zusammenhaengt. Leider brachte varchar_pattern_ops das gleiche Ergebnis.

Gibts ne Operator-Klasse fuer die beide Varianten auf dem Index operieren wuerden? Auf keinen Fall aber will ich irgendeine Entschuldigung hören, warum obiges angeblich “richtig” sei :wink: .

Gruß
Steffen

scheint ein bug zu sein …

Hallo,

hier steht alles wissenswerte zu dem Thema:
PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: Operator Classes and Operator Families

akretschmer hat dich in seinem Beitrag vom 18.03.08 15:18 in diesem Thread
http://www.pg-forum.de/sql/2237-index-nicht-verwendet-5.html
schon darauf aufmerksam gmacht.

Ob das ein Bug ist oder nicht, kannst du heruasfinden, indem du einen Bugeport bei den
Entwicklern von PG einreichst.
Das kannst du hier tun:
PostgreSQL: Report a bug

Freundliche Grüße
hkocam

Falls Du noch Interesse an einer Lösung Deines Problemes hast: versuche es mal mit anderen Operatoren zum Textvergleich. Hint: ~ und REGEX.

Auf keinen Fall aber will ich irgendeine Entschuldigung hören, warum obiges angeblich “richtig” sei > :wink: > .

Gruß
Steffen

Ich möcht keine Diskussion über die Güte der Lösung.

Andreas