Thread: Index on computed column
Hi, Can anyone explain to me what I'm doing wrong: (The first select is to show that the function rubriek exists, and does work). I want to create an index on a computed column: palga=> select rubriek(rapport, lseek, 'naamvrouw',0) from main where rapport = 'T098-20900'; rubriek ----------- Ramrattan (1 row) palga=> create index nm_idx on main (rubriek(rapport, lseek, 'naamvrouw',0)); ERROR: parser: parse error at or near "'naamvrouw'" at character 54 palga=> This is postgresql-7.3.4-3.rhl9. Thanks in advance, Han Holl
On Tue, Apr 20, 2004 at 12:48:42PM -0700, Han Holl wrote: > Can anyone explain to me what I'm doing wrong: > (The first select is to show that the function rubriek exists, and does work). > I want to create an index on a computed column: Functional indexes could not have constants in 7.3; you can build a wrapper function with the constant embedded, and create an index using the wrapper function. Or you can just use 7.4. -- Alvaro Herrera (<alvherre[a]dcc.uchile.cl>) "La virtud es el justo medio entre dos defectos" (Aristóteles)
On Tue, 20 Apr 2004, Han Holl wrote: > Hi, > > Can anyone explain to me what I'm doing wrong: > (The first select is to show that the function rubriek exists, and does work). > I want to create an index on a computed column: > > palga=> select rubriek(rapport, lseek, 'naamvrouw',0) from main > where rapport = 'T098-20900'; > rubriek > ----------- > Ramrattan > (1 row) > palga=> create index nm_idx on main (rubriek(rapport, lseek, 'naamvrouw',0)); > ERROR: parser: parse error at or near "'naamvrouw'" at character 54 > palga=> > > This is postgresql-7.3.4-3.rhl9. In 7.3, functional indexes can only be across columns of the table, so something like the above is illegal. You can get around this my making a function that hardcodes the constants and then use that in the index and queries. In 7.4, you can index a more general set of expressions.
On Tue, 20 Apr 2004, Han Holl wrote: > palga=> create index nm_idx on main (rubriek(rapport, lseek, 'naamvrouw',0)); > ERROR: parser: parse error at or near "'naamvrouw'" at character 54 > palga=> > > This is postgresql-7.3.4-3.rhl9. > You cannot create functional indexes with a constant in the 7.3 series. This capability was only added in the 7.4 series. You can work around this problem by creating a wrapper function that calls the real function with the constants and creating the index on the wrapper function. Kris Jurka