我想在文件上显示 psql 查询的结果。在日志中只显示匿名 Bloc 的名称 DO。
以下是从 shell 脚本文件执行的:
psql --host=${HOST} --port=${PORT_IP} --dbname=${DATABASE_NAME} --username=${USERNAME} -f $scriptSQL -v v1=$fichierLog -v v2=$annee
这是 scriptSQL 的内容:
\o :v1
\timing on
DO $$
declare
-- programme de lancement de la purge des redevances
-- date creation : 20/02/09
annee varchar(4); -- annee a purger
begin
annee := ':v2';
-- lancement de la fonction de purge
SELECT pckg_activ.purgeRedevance(annee);
end $$;
\timing off
\o
\q
除了 DO 什么都没有显示。
DO Anonymous Bloc 是 v1(输出文件)上没有显示任何内容的原因吗?
有什么解决办法吗?
谢谢
RAISE NOTICE
必须用于显示 DO 块中的值,如结果:
如果您只执行 SELECT,则会发生以下情况:
由于这是一个错误,它不会进入指定的文件
\o :v1
的输出
\timing
也不会进入该文件。该文档说
\o
:要捕获所有输出,请在 shell 中使用重定向:
另一个问题是该
:v2
变量不能在构成 DO 块的美元-美元引用的字符串中扩展(它应该写为:'v2'
, not ,但无论如何在这里都没有关系,因为在-quoted strings':v2'
中没有变量扩展)$$
遗憾的是,使用 DO 块很难管理输入参数和输出结果。
对于输入端,可以使用自定义会话参数,如下图: