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
Re: BUG #4944: Problems with using \set variables as strings in select statements
From
Tom Lane
Date:
"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
Re: BUG #4944: Problems with using \set variables as strings in select statements
From
Rolf Jentsch
Date:
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