postgresql plpy不打印在postgres日志上

kse8i1jr  于 11个月前  发布在  PostgreSQL
关注(0)|答案(2)|浏览(93)

我有一个plpython触发器函数,我试图记录一些东西,以更好地了解它是做什么的,但我不能设法打印任何postgres日志文件。我已经尝试了不同级别的打印(错误,信息,通知...),但唯一一个做的事情是plpy.fatal函数,这引发了try-except捕获的异常。
下面是我的函数的一个例子:

CREATE FUNCTION public.myfunction() RETURNS trigger
LANGUAGE plpythonu
AS $$
try:
    plpy.error("log error")
    plpy.info("log info")
    plpy.notice("log notice")
    if TD["event"] != "INSERT":
        return "OK"

    # do other stuff here
 except Exception, ex:
    #plpy.info("f_b_cli_after : %s" % ex)
    return None
$$;

字符串
也许我在postgresql.conf中缺少了一些参数,这是我现在配置的:

log_destination = 'stderr'
logging_collector = on
log_directory = '/var/log/postgresql'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
client_min_messages = notice
log_min_messages = info
log_min_error_statement = info
log_statement = 'all'


我找到的文档没有指定任何其他内容,这里关于这个主题的其他答案只是说plpy.notice等价于raise notice,所以我希望它能正常工作。
我错过了什么吗?

vsmadaxz

vsmadaxz1#

我设法打印日志通过把调试:

client_min_messages = notice
log_min_messages = info
log_min_error_statement = info

字符串
但老实说,我不知道是否需要所有三个或只是其中之一。

5uzkadbs

5uzkadbs2#

plpy.info将创建一个INFO消息,plpy.notice将创建一个NOTICE消息,然后继续。INFONOTICE都是针对客户端的消息,而不是日志文件,因此它们不会被记录(除非您更改log_min_messages)。
如果你想写一个日志条目,调用plpy.log
使用你的设置(我不推荐)你会得到INFONOTICE的日志记录。所以如果你没有看到任何日志消息,你可能在编辑配置后没有重新加载PostgreSQL,或者你编辑了错误的配置文件,或者你正在查看错误的日志文件。

相关问题