Django PostgreSQL触发器异常文本的格式取决于系统?

Django PostgreSQL触发器异常文本的格式取决于系统?,django,postgresql,Django,Postgresql,我为PostgreSQL编写了一个insert事件触发器,在某些情况下会引发异常。这是一段pg_plsql代码(引发异常): 基于用户操作的Django应用程序生成INSERT SQL命令,这将导致我的pl_pgsql触发器,并在触发器引发异常时捕获InternalError类型的异常(来自Django.db)。以及作为django Exception对象的属性传递给我的django应用程序的异常文本 它的工作很好,但在不同的系统上,从PostgreSQL返回的异常文本不同 在具有配置的系统上:

我为PostgreSQL编写了一个insert事件触发器,在某些情况下会引发异常。这是一段pg_plsql代码(引发异常):

基于用户操作的Django应用程序生成INSERT SQL命令,这将导致我的pl_pgsql触发器,并在触发器引发异常时捕获InternalError类型的异常(来自Django.db)。以及作为django Exception对象的属性传递给我的django应用程序的异常文本

它的工作很好,但在不同的系统上,从PostgreSQL返回的异常文本不同

在具有配置的系统上:

  • Ubuntu 14.04.1 LTS
  • 软件包:postgresql 9.3
  • 版本:9.3.5-0ubuntu0.14.04.1
输出看起来像“error | creator | 7.56111”

但在具有配置的系统上:

  • Debian 7.7稳定版
  • 软件包:postgresql-9.3
  • 版本:9.3.5-1.pgdg70+1
输出看起来像“БСБББА:错误|创建者| 7.56111”(系统语言环境为俄语)

为什么会发生这种情况


谢谢。

PostgreSQL报告了转换为数据库语言环境的错误。如果您不想更改
LC\u消息,可以在
CREATE DATABASE
时间更改
LC\u消息(或者可能使用
ALTER DATABASE
,我还没有检查)

但是,您不应该解析错误消息。使用扩展的错误消息结构-。使用一个
RAISE
表单,该表单允许您指定
详细信息
消息并将应用程序负载存储在其中,并使用自定义
SQLSTATE
向应用程序指示它是一条具有详细负载的应用程序特定消息


PostgreSQL可能(过去也曾)更改错误消息格式。不要依赖于能够解析它们。

非常感谢您的建议。对于后代:在Django案例中-psycopg2异常对象位于Django.db异常对象的原因属性中(在我的案例中-Django.db.InternalError.\uuuuuuuuuu原因)。
IF user_rating.user_id = NEW.user1_id THEN
    CASE error_id
    WHEN 0 THEN creator_allow_flag := True;
    WHEN 1,2 THEN RAISE EXCEPTION 'error|creator|%', available_limit;
    END CASE;
ELSIF user_rating.user_id = NEW.user2_id THEN
    CASE error_id
    WHEN 0 THEN partner_allow_flag := True;
    WHEN 1,2 THEN RAISE EXCEPTION 'error|partner|%', available_limit;
    END CASE;
ELSE
    RAISE EXCEPTION '%', user_rating.user_id;
END IF;