【发布时间】:2017-08-23 12:00:25
【问题描述】:
当我在 PostgreSQL 中创建以下函数时:
create function log( value variadic text[] )
returns void
language plpython3u
as $$
print( ' '.join( value ) + '\n' )
$$;
do $$ begin perform log( ( 42 + 108 )::text ); end; $$;
输出没有出现在终端中(使用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' )
$$;
并在后台运行一条尾巴(使用 ANSI 颜色,耶!):
tail -f /tmp/psql-output | sed 's/^.*$/\x1b[38;05;214m\0\x1b[0m/g' &
但缺点是我需要外部代码来设置这个东西。
【问题讨论】:
标签: python postgresql plpython