Re: SystemError: null argument to internal routine
От | Jan Urbański |
---|---|
Тема | Re: SystemError: null argument to internal routine |
Дата | |
Msg-id | 4D6FF3B9.6000003@wulczer.org обсуждение исходный текст |
Ответ на | SystemError: null argument to internal routine ("Eric Snow" <esnow@verio.net>) |
Ответы |
Re: SystemError: null argument to internal routine
Re: SystemError: null argument to internal routine |
Список | psycopg |
On 03/03/11 20:52, Eric Snow wrote: > I am trying to figure out the conditions under which I get that > SystemError. Here is a simple way that I found to reproduce the > problem: > >>>> import psycopg2 >>>> psycopg2.__version__ > '2.3.2 (dt dec pq3 ext)' >>>> conn = psycopg2.connect("...") >>>> cur = conn.cursor() >>>> cur.execute(";") > Traceback (most recent call last): > File "<stdin>", line 1, in ? > SystemError: null argument to internal routine > > I am getting the same exception during a call to copy_expert. How would > the data I pass in there trigger the same exception as when I pass a > single semicolon? I am guessing that it does not even make it over the > wire to the postgres server when the exception is raised. Thanks. Aaah, that rings a bell. I was getting the same error with txpostgres and even once found out why, but forgot, and now I remembered. I believe that the problem is in pqpath.c, in pq_fetch. There's a switch statement there that checks the result of PQresultStatus and does not take PGRES_EMPTY_QUERY into consideration. The code that jumps to the default: label, which leads it to pq_raise. Towards the end there's a if (code != NULL) exc = exception_from_sqlstate(code); which AFAIR never gets executed, because code *is* NULL. And then it hits psyco_set_error with a NULL exception, this leads to the "NULL argument to internal routine" error. I might have messed up some details, but I'm pretty sure the problem is not handling PGRES_EMPTY_QUERY correctly. Cheers, Jan
В списке psycopg по дате отправления: