From: | Ioseph Kim <pgsql-kr(at)postgresql(dot)kr> |
---|---|
To: | pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: propose: detail binding error log |
Date: | 2016-03-15 07:06:19 |
Message-ID: | 1458025579.3935.74.camel@ioseph-centos |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
thanks for reply.
Craig wrote:
>> At the time PostgreSQL parses the statement it doesn't know the
>> parameter values yet, because PgJDBC hasn't sent them to it. It
>> cannot log them even if they mattered, which they don't.
I know already that, so I wrote how can see error value at server log.
case 1: in psql simple query
ERROR: 42804: column "a" is of type integer but expression is of type
text at character 45
HINT: You will need to rewrite or cast the expression.
LOCATION: transformAssignedExpr, parse_target.c:529
STATEMENT: prepare aaa (text) as insert into b values ($1);
when this case, server error log is right that does not know value
because not yet be assigned.
but.
case 2: in jdbc program.
ERROR: 42804: column "a" is of type boolean but expression is of type
integer at character 25
HINT: You will need to rewrite or cast the expression.
LOCATION: transformAssignedExpr, parse_target.c:529
STATEMENT: insert into test values ($1)
when this case, statement is 'insert', I think binding values already
sent to server, then server can display these.
I want see that
"ERROR: 42804: column "a" is of type boolean but expression is of type
integer(input value = 24) at character 25"
Best regards, Ioseph.
2016-03-15 (화), 13:54 +0800, Craig Ringer:
> On 15 March 2016 at 10:52, Ioseph Kim <pgsql-kr(at)postgresql(dot)kr> wrote:
> Hi, hackers.
>
> I had a error message while using PostgreSQL.
>
> "ERROR: 42804: column "a" is of type boolean but expression
> is of type
> integer at character 25
> LOCATION: transformAssignedExpr, parse_target.c:529"
>
> This error is a java jdbc binding error.
> column type is boolean but bind variable is integer.
>
> I want see that value of bind variable at a server log.
>
>
> log_statement = 'all' will log bind var values, but only when the
> statement actually gets executed.
>
>
> This is an error in parsing or parameter binding, before we execute
> the statement. It's a type error and not related to the actual value
> of the bind variable - you could put anything in the variable and you
> would get the same error.
>
>
> PostgreSQL is complaining that you bound an integer variable and tried
> to insert it into a boolean column. There is no implicit cast from
> integer to boolean, so that's an error. It doesn't care if the integer
> is 1, 42, or null, since this is a type error. There's no need to log
> the value since it's irrelevant.
>
>
> Observe:
>
>
> postgres=# create table demo(col boolean);
> CREATE TABLE
>
>
> postgres=# prepare my_insert(boolean) AS insert into demo(col) values
> ($1);
> PREPARE
>
>
> postgres=# prepare my_insertint(integer) AS insert into demo(col)
> values ($1);
> ERROR: column "col" is of type boolean but expression is of type
> integer
> LINE 1: ... my_insertint(integer) AS insert into demo(col) values
> ($1);
> ^
> HINT: You will need to rewrite or cast the expression.
>
>
>
>
> As you see, the error is at PREPARE time, when we parse and validate
> the statement, before we bind parameters to it. You can get the same
> effect without prepared statements by specifying the type of a literal
> explicitly:
>
>
> postgres=# insert into demo(col) values ('1'::integer);
> ERROR: column "col" is of type boolean but expression is of type
> integer
> LINE 1: insert into demo(col) values ('1'::integer);
> ^
> HINT: You will need to rewrite or cast the expression.
>
>
>
>
> At the time PostgreSQL parses the statement it doesn't know the
> parameter values yet, because PgJDBC hasn't sent them to it. It
> cannot log them even if they mattered, which they don't.
>
>
> --
> Craig Ringer http://www.2ndQuadrant.com/
> PostgreSQL Development, 24x7 Support, Training & Services
>
From | Date | Subject | |
---|---|---|---|
Next Message | Peter Geoghegan | 2016-03-15 07:11:01 | Re: amcheck (B-Tree integrity checking tool) |
Previous Message | Thomas Munro | 2016-03-15 06:51:38 | Re: Proposal: BSD Authentication support |