Thread: Query on a record variable

Query on a record variable

From
"Janek Sendrowski"
Date:
Hi,

How can I do a query on a record variable in a function.
I want to do a dirty fulltextsearch on a table and then choose the string which have a low levenshtein-distance.
I wanted to it like this, but it doesn't work:

v_query := 'SELECT col FROM table WHERE LENGTH(dede) BETWEEN x AND y AND plainto_tsquery(string') @@ vectors';
EXECUTE v_query INTO v_rec;
v_query :=   'SELECT levenshtein('string', v_rec.col) AS lev WHERE levenshtein('string', v_rec.col) < 10';
EXECUTE v_query INTO v_rec2;

Or is there an easier way to do that. Maybe just to do one query at once?

Hope someone can help me.

Janek Sendrowski


Re: Query on a record variable

From
Adrian Klaver
Date:
On 08/18/2013 01:14 PM, Janek Sendrowski wrote:
> Hi,
>
> How can I do a query on a record variable in a function.
> I want to do a dirty fulltextsearch on a table and then choose the string which have a low levenshtein-distance.
> I wanted to it like this, but it doesn't work:
>
> v_query := 'SELECT col FROM table WHERE LENGTH(dede) BETWEEN x AND y AND plainto_tsquery(string') @@ vectors';
> EXECUTE v_query INTO v_rec;
> v_query :=   'SELECT levenshtein('string', v_rec.col) AS lev WHERE levenshtein('string', v_rec.col) < 10';
> EXECUTE v_query INTO v_rec2;
>
> Or is there an easier way to do that. Maybe just to do one query at once?

http://www.postgresql.org/docs/9.2/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN

You can't drop the v_rec variable directly into the string. You will
need to concatenate it in. For more info see:

http://www.postgresql.org/docs/9.2/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN



>
> Hope someone can help me.
>
> Janek Sendrowski
>
>


--
Adrian Klaver
adrian.klaver@gmail.com


Re: Query on a record variable

From
Giuseppe Broccolo
Date:
Hi Janek,

> Hi,
>
> ok :)

I suppose you have a table 'table' with 'col' (text), 'dede' (text) and
'vectors' (tsvector) as fields. In this case, you can do

SELECT levenshtein(col, 'string') FROM table AS lev WHERE
levenshtein(col, 'string') < 10 AND LENGTH(dede) BETWEEN x AND y AND
plainto_tsquery('string') @@ vectors;

Hope it can help.

Giuseppe.

--
Giuseppe Broccolo - 2ndQuadrant Italy
PostgreSQL Training, Services and Support
giuseppe.broccolo@2ndQuadrant.it | www.2ndQuadrant.it