Re: plpgsql; execute query inside exists - Mailing list pgsql-general

From jozsef.kurucz@invitel.hu
Subject Re: plpgsql; execute query inside exists
Date
Msg-id CAGJF9eGzDQrbRzLyFpuqSUB8zDcSe2DO_efiwQOGxO+x0DmrWQ@mail.gmail.com
Whole thread Raw
In response to Re: plpgsql; execute query inside exists  (Merlin Moncure <mmoncure@gmail.com>)
Responses Re: plpgsql; execute query inside exists  (Alban Hertroys <haramrae@gmail.com>)
List pgsql-general
Hi,

Thanks for the reply!
But I don't want to check if the table exists, I want to see the
result of the SELECT query, if a row presence or not.
The tmp_tbl is a dynamic generated table name, but when I write the
code without EXECUTE, I get syntax error too.
In this case how can I check if a SELECT has result or not?


SELECT INTO rndmd5 md5(random()::text);

tmp_tbl := 'tbl_tmp_' || rndmd5;


IF NOT EXISTS(SELECT * FROM tmp_tbl)
   THEN
     END IF;


ERROR:  syntax error at or near "$1"
LINE 1: SELECT  NOT EXISTS(SELECT * FROM  $1 )


Thanks!



2011/10/17 Merlin Moncure <mmoncure@gmail.com>:
> On Mon, Oct 17, 2011 at 8:20 AM, Merlin Moncure <mmoncure@gmail.com> wrote:
>> On Mon, Oct 17, 2011 at 2:32 AM,  <jozsef.kurucz@invitel.hu> wrote:
>>> Hi there,
>>>
>>> I would like to use EXISTS in a small plpgsql function but I always
>>> get a "syntax error". How can I execute a query inside the
>>> EXISTS function?
>>>
>>>
>>>
>>> IF NOT EXISTS(EXECUTE 'SELECT * FROM '|| tmp_tbl)
>>>   THEN
>>>      CREATE TABLE tt();
>>>
>>>
>>>
>>>
>>> ERROR:  syntax error at or near "EXECUTE"
>>> LINE 1: SELECT  NOT EXISTS(EXECUTE 'SELECT * FROM '||  $1 )
>>
>>
>> EXECUTE is a top level statement -- you can't run it inside a query
>> like that.  Also, EXISTS is not a way to check to see if a table does
>> exist -- it is a clause for the presence of a row and returns true if
>> it finds one -- but if the table does not exist you would get an SQL
>> error.
>>
>> A better way to do this is to query information_schema:
>>
>> PERFORM 1 FROM information_schema.tables where schema_name = x and
>> table_name = y;
>>
>> IF FOUND THEN
>>  CREATE TABLE ...
>> END IF;
>
> oops.. meant to say IF NOT FOUND... :-).
>
> merlin
>
> --
> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general
>

pgsql-general by date:

Previous
From: Craig Ringer
Date:
Subject: Re: Out of Memory Error on Insert
Next
From: Craig Ringer
Date:
Subject: Re: How to correct: ERROR: permission denied: "RI_ConstraintTrigger_24966" is a system trigger