Thread: BUG #4944: Problems with using \set variables as strings in select statements

BUG #4944: Problems with using \set variables as strings in select statements

From
"Bruno Scovoli Santos"
Date:
The following bug has been logged online:

Bug reference:      4944
Logged by:          Bruno Scovoli Santos
Email address:      bruno.scovoli@gmail.com
PostgreSQL version: 8.3.7
Operating system:   Ubuntu 9.04 Jaunty Jackalope
Description:        Problems with using \set variables as strings in select
statements
Details:

I hava a table as follows:

euclidhardware=# select * from fabricantes;
 id_fabricante |   nome    |     distribuidor     | descricao
---------------+-----------+----------------------+-----------
             1 | Genius    | Atera informática    | -
             2 | Logitech  | Atera informática    | -
             3 | Epson     | Kalunga              | -
             4 | HP        | Kalunga              | -
             5 | Lexmark   | Kalunga              | -
             6 | Gigabyte  | IMICROS              | -
             7 | ASUS      | IMICROS              | -
             8 | ABIT      | IMICROS              | -
             9 | AMD       | IMICROS              | -
            11 | Intel     | Balao da informática | -
            12 | Kingston  | Balao da informática | -
            13 | Corsair   | IMICROS              | -
            14 | Smartdata | ShopInfo             | -
           299 | ashhj     | 78hkj                | 8jhkljk


When I do:

brunodb=# \set fab 11
brunodb=# select * from fabricantes where id_fabricante = :fab;
 id_fabricante | nome  |     distribuidor     | descricao
---------------+-------+----------------------+-----------
            11 | Intel | Balao da informática | -

OK, I get the right result. But it's seems that there is a bug for this:

brunodb=# \set nom 'Intel'
euclidhardware=# select * from fabricantes where nome like :nom;
ERROR:  column "intel" does not exist
LINE 1: select * from fabricantes where nome like Intel;

Please, I have tried exaustively many other ways to achieve this result, and
searched many foruns. I dont realize where is my error, I think that it is a
bug?

Thanks in advance,

Bruno
"Bruno Scovoli Santos" <bruno.scovoli@gmail.com> writes:
> brunodb=# \set nom 'Intel'
> euclidhardware=# select * from fabricantes where nome like :nom;
> ERROR:  column "intel" does not exist
> LINE 1: select * from fabricantes where nome like Intel;

If you want to put quotes in the value of a variable, you need
this
\set nom '''Intel'''
or this
\set nom '\'Intel\''
the same as you would to write a string literal containing quotes
in SQL.

            regards, tom lane
Hallo Bruno,

Am Montag, 27. Juli 2009 15:50 schrieb Bruno Scovoli Santos:

>...
> brunodb=3D# \set nom 'Intel'
> euclidhardware=3D# select * from fabricantes where nome like :nom;
> ERROR:  column "intel" does not exist
> LINE 1: select * from fabricantes where nome like Intel;
>
> Please, I have tried exaustively many other ways to achieve this result,
> and searched many foruns. I dont realize where is my error, I think that =
it
> is a bug?
>
> Thanks in advance,
>
> Bruno

The syntax for \set with strings is a bit bizarre. You have to use either
\set nom '\'Intel\''
or
\set nom '''Intel'''

cu
Rolf Jentsch
Entwicklung Mitglieder-Systeme Dezentral

ElectronicPartner GmbH
M=C3=BCndelheimer Weg 40
40472 D=C3=BCsseldorf

phone: +49-(0)211-4156-0
fax: +49-(0)211-4156-6865
eMail: rjentsch@electronicpartner.de

Sitz der Gesellschaft D=C3=BCsseldorf
Amtsgericht - Registergericht D=C3=BCsseldorf - HRB 4078
Gesch=C3=A4ftsf=C3=BChrer: Dr. J=C3=B6rg Ehmer, Oliver Haubrich,=20
Dr. Sven-Olaf Krau=C3=9F, Karl Trautmann