Обсуждение: Create into temp table as select doesn set "found"

Поиск
Список
Период
Сортировка

Create into temp table as select doesn set "found"

От
Jan Hink
Дата:
Hello,

I found an unexpected behavior, I suppose it is a little bug.

In plpgsql procedure I have this commads:

        create temp table t_expert on commit drop as
        select * from v_expert e where user_account=$1;

        get diagnostics rowcount=row_count;
        raise notice 'found=%, rowcount=%', found, rowcount;

The notice returned "found=f, rowcount=2"

I expected "found" should be set properly to true, when rowcount>0.
If not then I cannot use easy "if not found then ..." and I am forced to
write more rows in my code.

I wonder I have not found similar issue in any discussion yet.

With Regards
Jan Hink

Re: Create into temp table as select doesn set "found"

От
Tom Lane
Дата:
Jan Hink <hink@rac.cz> writes:
> In plpgsql procedure I have this commads:

>         create temp table t_expert on commit drop as
>         select * from v_expert e where user_account=$1;

>         get diagnostics rowcount=row_count;
>         raise notice 'found=%, rowcount=%', found, rowcount;

> The notice returned "found=f, rowcount=2"

> I expected "found" should be set properly to true, when rowcount>0.

The set of statements that affect FOUND is specified here:
http://www.postgresql.org/docs/9.3/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-DIAGNOSTICS
CREATE TABLE AS is not among them.

In a green field we might think that it would be a good idea if it did,
but at this point in plpgsql's evolution changing that behavior would
be more likely to break existing code than to make users happier.
In particular, there is intentionally not a promise that FOUND and
ROW_COUNT are set by the exact same collections of statements.

            regards, tom lane