Getting more detail in plpython error messages
Hi all,
In psql a database error will print both ERROR: and DETAIL: lines.
postgres@testdb# delete from inspection where bundle_id in (select id
from test_archive_20170401.load order by id);
ERROR: update or delete on table "inspection" violates foreign key
constraint "inspection_weather_inspection_id_inspection_id_fk" on table
"inspection_weather"
DETAIL: Key (id)=(158967) is still referenced from table
"inspection_weather".
With plpython (both u and 3u) all I see printed is the ERROR part.
try:
check = plpy.execute("delete from inspection where bundle_id in
(select id from test_archive_20170401.load order by id)")
except plpy.SPIError as e:
plpy.notice("Error!", e)
postgres@testdb# select * from test_delete();
NOTICE: ('Error!', ForeignKeyViolation('update or delete on table
"inspection" violates foreign key constraint
"inspection_weather_inspection_id_inspection_id_fk" on table
"inspection_weather"',))
Is there a way to get the DETAIL part as well?
Thanks,
Jeff
Jeff Ross <jross@openvistas.net> writes:
With plpython (both u and 3u) all I see printed is the ERROR part.
try:
check = plpy.execute("delete from inspection where bundle_id in
(select id from test_archive_20170401.load order by id)")
except plpy.SPIError as e:
plpy.notice("Error!", e)
postgres@testdb# select * from test_delete();
NOTICE: ('Error!', ForeignKeyViolation('update or delete on table
"inspection" violates foreign key constraint
"inspection_weather_inspection_id_inspection_id_fk" on table
"inspection_weather"',))
Is there a way to get the DETAIL part as well?
It's not very well documented AFAICS, but a SPIError object has a
"detail" attribute, so "e.detail" should help you. It looks like
you might prefer to print "e.spidata", which seems to contain all
the available fields.
regards, tom lane
On 3/7/22 11:06 AM, Tom Lane wrote:
Jeff Ross <jross@openvistas.net> writes:
Is there a way to get the DETAIL part as well?
It's not very well documented AFAICS, but a SPIError object has a
"detail" attribute, so "e.detail" should help you. It looks like
you might prefer to print "e.spidata", which seems to contain all
the available fields.regards, tom lane
Thank you, Tom! As always, that is exactly what I need.
Jeff