Re: BUG #16149: Prepared COPY queries always report 0 parameters when described

Поиск
Список
Период
Сортировка
От David G. Johnston
Тема Re: BUG #16149: Prepared COPY queries always report 0 parameters when described
Дата
Msg-id CAKFQuwaqs_kZ+o-Y8X7C=8VdOKqPfAw+upLdGTyV91sst6evHw@mail.gmail.com
обсуждение исходный текст
Ответ на BUG #16149: Prepared COPY queries always report 0 parameters when described  (PG Bug reporting form <noreply@postgresql.org>)
Список pgsql-bugs
On Wed, Dec 4, 2019 at 5:22 PM PG Bug reporting form <noreply@postgresql.org> wrote:
The following bug has been logged on the website:

Bug reference:      16149
Logged by:          Steven Fackler
Email address:      sfackler@gmail.com
PostgreSQL version: 12.1
Operating system:   Debian Buster
Description:       

When a Postgres backend describes a prepared `COPY ... TO STDOUT query`, it
always reports 0 query parameters regardless of how many are actually
present

Working as designed though I agree with the comment below that somehow it has escaped documentation that this command is a utility command and "query" cannot contain parameters.

        PGresult *result = PQprepare(conn, "a", "COPY (SELECT $1::TEXT) TO STDOUT",
0, NULL);
 [...]
        result = PQexecPrepared(conn, "a", 0, NULL, NULL, NULL, 0);
When run, it prints the following:

```
nparams: 0
error: there is no parameter $1
```

Yep - though this is the odd error message - but it almost reads like because you are using execPrepared the code is expecting a planned and parameterized statement and is complaining, oddly, that it wasn't provided one.  Its OK to give it a statement that can accept parameters but has zero but NOT OK to give it one that doesn't accept parameters at all.

If you change the query to just the inner `SELECT $1::TEXT`, the number of
parameters is correctly reported, but interestingly the error message
changes:

```
nparams: 1
error: bind message supplies 0 parameters, but prepared statement "a"
requires 1
```

Not that interesting, the PQexecPrepared call supplies zero parameter values but the SELECT query is indeed expecting one.
 
From some quick Googling, I did see this StackOverflow post[1] stating that
COPY queries don't support parameters,

Yes
but if that's the case it seems like
an error should be reported at the preparation stage.

Seems reasonable...
 
I also don't see
anything about that in the documentation for COPY[2], though I may have
missed it!

I do not either.

I see the same behavior on Postgres 11.1 as well, if that's
relevant.

It supports the conclusion that the behavior is likely intentional.

David J.

В списке pgsql-bugs по дате отправления:

Предыдущее
От: Peter Geoghegan
Дата:
Сообщение: Re: BUG #16140: View with INSERT, DO INSTEAD, and ON CONFLICT causesan error
Следующее
От: Tom Lane
Дата:
Сообщение: Re: BUG #16140: View with INSERT, DO INSTEAD, and ON CONFLICT causes an error