A ver... si entendi bien lo que quieres es quitar un mensaje generico y decir algo mas "especifico" en el contexto del error... e.j:
insert into tabla values (1, 'un texto'); si el servidor da un mensaje de error SQLXXXYZ, tu quieres decirle al usuario "tal cosa ya existe en la tabla" estoy seguro que en todos los lenguajes de programacion cuando interactuas con una base de datos, generalemnte el driver o la interfaz que utilizas para interactuar con la base de datos te permite capturar los errores... alvaro ya te ha dicho varias veces esto... (asi como otros que siguen el hilo) la forma (mas sana) que yo veo para _resolver_ este problemita seria: 1: Identificar los mensajes de error que se quiera personalizar 3: Crear una tabla (en base de datos) o enum/array (del lado de la aplicacion) y relacionar codigos de error +mensajes de servidor con un registro en el enum matriz, o tabla en base de datos y el mensaje definido por usuario 4: Revisar en la documentacion del driver la forma de leer los mensajes de error enviados por el servidor 5: escribir las excepciones correspondientes en la aplicacion al momento de ejecutar una consulta (select, insert, delete, etc) a la base de datos... 6: en caso de que la consulta no sea exitosa, lanzar la excepcion y el correspondiente mensaje aca te dejo un ejemplo de una solucion en python claramente no es la mejor, ni esta escrita de lo lindo... pero creo que podria daros una idea de como resolver el problema http://pastebin.com/f33182e74 de cualquier modo, lei mas arriba que lo estabas haciendo en .net http://npgsql.projects.postgresql.org/docs/api/ aca esta la documentacion revisa NpgsqlError supongo que seria suficiente para hacer todo esto... Otra forma podria ser modificando el codigo fuente de postgresql y cambiar los codigos y mensajes de error... (aunque esto probablemente traeria muchos otros problemas... creo... -- TIP 8: explain analyze es tu amigo