Joh*_*zer 7 python postgresql plpython
当我在 PostgreSQL 中创建以下函数时:
create function log( value variadic text[] )
returns void
language plpython3u
as $$
print( ' '.join( value ) + '\n' )
$$;
do $$ begin perform log( ( 42 + 108 )::text ); end; $$;
Run Code Online (Sandbox Code Playgroud)
输出未出现在终端中(使用psql -f ...)。它会去哪里?
此外,是否有任何简单的方法(可能是扩展)可以为我提供易于使用的输出stdout/ stderr?我不想使用,select因为所有输出都带有表装饰,您可以关闭它,但只能使用psql在函数中不起作用的技巧。同样,我不想使用\echo,因为这在函数定义中不起作用。
编辑我知道plpy.notice(),但该功能也将其输出包围在一大堆混乱中。
顺便说一句,我现在的解决方案是写入文件:
create function log( value variadic text[] )
returns void
language plpython3u
as $$
with open( '/tmp/psql-output', 'a' ) as o:
o.write( ' '.join( value ) + '\n' )
$$;
Run Code Online (Sandbox Code Playgroud)
并在后台运行一条尾巴(使用 ANSI 颜色,是的!):
tail -f /tmp/psql-output | sed 's/^.*$/\x1b[38;05;214m\0\x1b[0m/g' &
Run Code Online (Sandbox Code Playgroud)
但缺点是我需要外部代码来设置这个东西。
小智 7
您可以使用plpy的功能来打印消息。
plpy.debug(msg, **kwargs)
plpy.log(msg, **kwargs)
plpy.info(msg, **kwargs)
plpy.notice(msg, **kwargs)
plpy.warning(msg, **kwargs)
Run Code Online (Sandbox Code Playgroud)
如果 log_destination 为“stderr”,则始终输出 plpy.log(),其他函数根据 log_min_messages 值(默认为警告)。
| 归档时间: |
|
| 查看次数: |
1248 次 |
| 最近记录: |