Index creation question for expression (col1 || '-' || col2)

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Index creation question for expression (col1 || '-' || col2)

Ying Lu
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



---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?

               http://www.postgresql.org/docs/faq
Reply | Threaded
Open this post in threaded view
|

Re: Index creation question for expression (col1 || '-' || col2)

Tom Lane-2
Ying Lu <[hidden email]> 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

---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?

               http://archives.postgresql.org
Reply | Threaded
Open this post in threaded view
|

Re: Index creation question for expression (col1 || '-' || col2)

Michael Fuhr
In reply to this post by Ying Lu
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/

---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster
Reply | Threaded
Open this post in threaded view
|

Re: Index creation question for expression (col1 || '-' || col2)

Bruno Wolff III
In reply to this post by Ying Lu
On Fri, Jul 08, 2005 at 12:08:41 -0400,
  Ying Lu <[hidden email]> 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.

---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings
Reply | Threaded
Open this post in threaded view
|

Re: Index creation question for expression (col1 || '-' ||

Ying Lu
In reply to this post by Michael Fuhr

>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


---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend