Thread: Index creation question for expression (col1 || '-' || col2)
Greetings, A question about creating index for the following expression. CREATE INDEX idx_t1 ON test (col1 || '-' || col2); May I know is it possible and how I may create index for the expression such as "col1 || '-' || col2" for a table please? Thanks a lot, Emi
Ying Lu <ying_lu@cs.concordia.ca> writes: > A question about creating index for the following expression. > CREATE INDEX idx_t1 ON test (col1 || '-' || col2); You need more parentheses: CREATE INDEX idx_t1 ON test ((col1 || '-' || col2)); regards, tom lane
On Fri, Jul 08, 2005 at 12:08:41PM -0400, Ying Lu wrote: > > CREATE INDEX idx_t1 ON test (col1 || '-' || col2); > > May I know is it possible and how I may create index for the expression > such as "col1 || '-' || col2" for a table please? See "Indexes on Expressions" in the documentation: http://www.postgresql.org/docs/8.0/static/indexes-expressional.html "The syntax of the CREATE INDEX command normally requires writing parentheses around index expressions, as shown in the second example...." That second example is exactly what you're trying to do: CREATE INDEX people_names ON people ((first_name || ' ' || last_name)); -- Michael Fuhr http://www.fuhr.org/~mfuhr/
On Fri, Jul 08, 2005 at 12:08:41 -0400, Ying Lu <ying_lu@cs.concordia.ca> wrote: > Greetings, > > A question about creating index for the following expression. > > CREATE INDEX idx_t1 ON test (col1 || '-' || col2); > > May I know is it possible and how I may create index for the expression > such as "col1 || '-' || col2" for a table please? You have already received some answers to this specific question. However, you might consider a different solution to the underlying problem. You can make a multicolumn index that for many purposes would be better than the above functional index.
>On Fri, Jul 08, 2005 at 12:08:41PM -0400, Ying Lu wrote: > > >>CREATE INDEX idx_t1 ON test (col1 || '-' || col2); >> >>May I know is it possible and how I may create index for the expression >>such as "col1 || '-' || col2" for a table please? >> >> > > >"The syntax of the CREATE INDEX command normally requires writing >parentheses around index expressions, as shown in the second >example...." > >That second example is exactly what you're trying to do: > >CREATE INDEX people_names ON people ((first_name || ' ' || last_name)); > > This is exactly what I want. I missed a pair of "()" :( . That is why I got an error. Thank you very much. - Emi