我有一个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
,所以我希望它能正常工作。
我错过了什么吗?
2条答案
按热度按时间vsmadaxz1#
我设法打印日志通过把调试:
字符串
但老实说,我不知道是否需要所有三个或只是其中之一。
5uzkadbs2#
plpy.info
将创建一个INFO
消息,plpy.notice
将创建一个NOTICE
消息,然后继续。INFO
和NOTICE
都是针对客户端的消息,而不是日志文件,因此它们不会被记录(除非您更改log_min_messages
)。如果你想写一个日志条目,调用
plpy.log
。使用你的设置(我不推荐)你会得到
INFO
和NOTICE
的日志记录。所以如果你没有看到任何日志消息,你可能在编辑配置后没有重新加载PostgreSQL,或者你编辑了错误的配置文件,或者你正在查看错误的日志文件。