Обсуждение: ERROR: invalid input syntax for integer: ""
Following query fails in pgAdmin which is OK because the field PLZZ
contains characters:
select * from "PERSONEN" where (CAST("PERSONEN"."PLZZ" AS INTEGER) >=
70000 );
but if using the same query with a cursor ist works:
START TRANSACTION;
DECLARE c21112234 SCROLL CURSOR FOR select * from "PERSONEN" where
(CAST("PERSONEN"."PLZZ" AS INTEGER) >= 70000;
COMMIT;
Why??
In my opinion this query should also fail with cursors.
I use libpq with PG 8.2.1.
The field PLZZ is of type varchar.
"Pit M." <fmi-soft@gmx.de> writes:
> Following query fails in pgAdmin which is OK because the field PLZZ
> contains characters:
> select * from "PERSONEN" where (CAST("PERSONEN"."PLZZ" AS INTEGER) >=
> 70000 );
> but if using the same query with a cursor ist works:
> START TRANSACTION;
> DECLARE c21112234 SCROLL CURSOR FOR select * from "PERSONEN" where
> (CAST("PERSONEN"."PLZZ" AS INTEGER) >= 70000;
> COMMIT;
> In my opinion this query should also fail with cursors.
It would have failed if you had run the cursor far enough to fetch one
of the bad rows.
regards, tom lane
> It would have failed if you had run the cursor far enough to fetch one > of the bad rows. > > regards, tom lane > The difference is that in one case the query fails and in the other the FETCH command fails. Our problem is that if a query succeeds we use a count(*) of that query to display the result count in the status bar of our application - the select works but the count(*) fails :-) When we use this query on MS SQL-Server the query fails directly though we also use cursors here. So the SQL-Server somehow checks all the data only for the query -> perhaps because we used a server side cursor. Will there be any improvements with cursors in PG 8.3? Thanks a lot tom
Pit M. wrote: > >> It would have failed if you had run the cursor far enough to fetch one >> of the bad rows. >> >> regards, tom lane >> > The difference is that in one case the query fails and in the other the > FETCH command fails. > > > Our problem is that if a query succeeds we use a count(*) of that query > to display the result count in the status bar of our application - the > select works but the count(*) fails :-) > When we use this query on MS SQL-Server the query fails directly though > we also use cursors here. So the SQL-Server somehow checks all the data > only for the query -> perhaps because we used a server side cursor. IIRC, the behavior of MSSQL will depend on the query plan. If it's a plan that requires doesn't require materialization at all, it won't figure it out until you get there. //Magnus
Magnus Hagander <magnus@hagander.net> writes:
> IIRC, the behavior of MSSQL will depend on the query plan. If it's a
> plan that requires doesn't require materialization at all, it won't
> figure it out until you get there.
... which is pretty much what we do, too.
regards, tom lane