当我在 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' &
但缺点是我需要外部代码来设置这个东西。