Обсуждение: Intentionally produce Errors
Hi, this is sort of a silly question, but: what's the proper way to intentionally generate an error? I'm writing tests for pyPgSQL and want to check it's error handling. Currently, I'm using: SELECT "THIS PRODUCES AN SQL ERROR"; Is there any better way to generate errors? Probably even generating specific errors given? Regards Markus
In PL/pgSQL you could use the RAISE command: http://www.postgresql.org/docs/8.1/interactive/plpgsql-errors-and-messages.h tml Best regards, Matthias > -----Original Message----- > > Hi, > > this is sort of a silly question, but: what's the proper way to > intentionally generate an error? I'm writing tests for > pyPgSQL and want > to check it's error handling. Currently, I'm using: > > SELECT "THIS PRODUCES AN SQL ERROR"; > > Is there any better way to generate errors? Probably even generating > specific errors given? > > Regards > > Markus > > ---------------------------(end of > broadcast)--------------------------- > TIP 6: explain analyze is your friend >
Hello Matthias, Matthias.Pitzl@izb.de wrote: > In PL/pgSQL you could use the RAISE command: > http://www.postgresql.org/docs/8.1/interactive/plpgsql-errors-and-messages.h > tml Thank you, good to know. Unfortunately I'm not in a PL/PgSQL function, just a plain query. Some standard functions which invoke RAISE? Regards Markus BTW: why did you add '.h' to the link? Did you mess around with C headers a little too much recently :-)
Markus Schiltknecht writes: > Matthias.Pitzl@izb.de wrote: >> In PL/pgSQL you could use the RAISE command: >> http://www.postgresql.org/docs/8.1/interactive/plpgsql-errors-and-messages.h >> tml > > Thank you, good to know. Unfortunately I'm not in a PL/PgSQL function, > just a plain query. Some standard functions which invoke RAISE? I don't think there is any. Maybe wrapping `raise exception' with a function would work for you? I'm using the following function to raise exceptions from plain sql. --8<---------------cut here---------------start------------->8--- create function error(text) returns void as $$ begin raise exception '%', $1; end $$ language plpgsql; --8<---------------cut here---------------end--------------->8--- However, ,----[ (info "(postgres)Errors and Messages") ] | `RAISE EXCEPTION' presently always generates the same SQLSTATE code, | `P0001', no matter what message it is invoked with. `---- regards, andreas
Andreas Seltenreich wrote:
> Markus Schiltknecht writes:
>> Matthias.Pitzl@izb.de wrote:
> --8<---------------cut here---------------start------------->8---
> create function error(text) returns void as $$
> begin
> raise exception '%', $1;
> end
> $$ language plpgsql;
> --8<---------------cut here---------------end--------------->8---
>
> However,
>
> ,----[ (info "(postgres)Errors and Messages") ]
> | `RAISE EXCEPTION' presently always generates the same SQLSTATE code,
> | `P0001', no matter what message it is invoked with.
> `----
That could be fixed by adding an error code to your function and putting
that in a recognizable place in your exception text. Not pretty, but it
should do the job.
--
Alban Hertroys
alban@magproductions.nl
magproductions b.v.
T: ++31(0)534346874
F: ++31(0)534346876
M:
I: www.magproductions.nl
A: Postbus 416
7500 AK Enschede
// Integrate Your World //