Re: Quotes, double quotes... - Mailing list pgsql-general

From António M. Rodrigues
Subject Re: Quotes, double quotes...
Date
Msg-id CAC+EZtRUnbuP=eihJnVXvfke7K-L1fmzJ0kTNJ_Kab1x8xqZMA@mail.gmail.com
Whole thread Raw
In response to Re: Quotes, double quotes...  (Adrian Klaver <adrian.klaver@gmail.com>)
Responses Re: Quotes, double quotes...
List pgsql-general
Thanks for your reply.

If I substitute double quotes with single quotes (or with double dollar sign",
and run the code:

DO $$
DECLARE
    i integer;
BEGIN
FOR i IN (select nn from numeros)
LOOP
EXECUTE
'create table contagio' || i || ' as
SELECT *
 FROM pgr_drivingdistance('
      SELECT gid AS id,
          source,
          target,
          tempo::float8 AS cost
      FROM lisboa',
      ' || i || ' ,
      30,
      false,
      false)
';
END LOOP;
END;
$$;
---------------------------------

I get the error:

--------------------------------------------------------------------------------------------
ERROR:  syntax error at or near "SELECT"
LINE 11:       SELECT gid AS id,
               ^


********** Error **********

ERROR: syntax error at or near "SELECT"
SQL state: 42601
Character: 165
---------------------------------------------------------------------------------------------

I'm probably missing something simple, but what?

António



 


2013/9/29 Adrian Klaver <adrian.klaver@gmail.com>
On 09/29/2013 06:09 AM, António M. Rodrigues wrote:
Hi all,

I have a problem with quotes which I can't find a solution.

Inside a query string I have another query string; I used for the later
double quotes, but it is still complaining

The problem is with the function pgr_drivingdistance (from pgrouting
extension).

The code is the following:

-----------------------------------------------------
DO $$
DECLARE
     i integer;
BEGIN
FOR i IN (select nn from numeros)
LOOP
EXECUTE
'create table contagio' || i || ' as
SELECT *
  FROM pgr_drivingdistance("
       SELECT gid AS id,
           source,
           target,
           tempo::float8 AS cost
       FROM lisboa",
       ' || i || ' ,
       30,
       false,
       false)
';
END LOOP;
END;
$$;


ERROR:  column "
       SELECT gid AS id,
           source,
           target,
   " does not exist
LINE 3:  FROM pgr_drivingdistance("
                                   ^
QUERY:  create table contagio18 as
SELECT *
  FROM pgr_drivingdistance("
       SELECT gid AS id,
           source,
           target,
           tempo::float8 AS cost
       FROM lisboa",
       18 ,
       30,
       false,
       false)


I suspect the solution is probably simple; yet, I can't get i

I think you need two single quotes around the embedded sql string. What is happening is that Postgres is seeing the sql string as an identifier and is looking for a column of that name.

By way of example:

DO $$


BEGIN
RAISE NOTICE 'test is "good"';
END;
$$
language plpgsql;
NOTICE:  test is "good"

DO


DO $$




BEGIN

RAISE NOTICE 'test is ''good''';

END;

$$

language plpgsql;

NOTICE:  test is 'good'

DO


Thanks in advance for any help.

António


--
Adrian Klaver
adrian.klaver@gmail.com

pgsql-general by date:

Previous
From: Eugene Ostrovsky
Date:
Subject: Re: multiple databases vs multiple clusters on the same host
Next
From: Adrian Klaver
Date:
Subject: Re: Quotes, double quotes...