我正在copy
从一个函数执行命令
execute 'copy (select * from tableName) to ''/tmp/result.txt'''
它工作正常。但是,tableName
它是动态的,并且会有更多的表(循环迭代)。result.txt
只有最后一次迭代(表)数据。
如果必须,我可以通过命令行使用\o
或>>
附加到文件。但是,我必须使用该功能。
我读了http://shuber.io/reading-from-the-filesystem-with-postgres/。它建议使用临时表的解决方案。我可以做类似的事情,但没有临时表吗?(我必须避免归档日志)。创建临时表会创建存档日志吗?
有没有办法copy
在函数中附加命令?
假设一个 Unix 系统
使用 PostgreQSL 9.3 或更高版本
使用 PROGRAM 子句 with
cat
作为程序。这会将结果附加到末尾
/tmp/result.txt
而不是覆盖文件。使用旧版本的 PostgreSQL
命名管道可以被单独的进程用来连接结果。例子:
最后一个命令将阻塞。让它运行,直到所有结果都累积,然后可以用 ^C 或 kill 终止它。
在 SQL 中,fifo 必须输入:
我认为您不能(轻松)这样做(至少在您的 PostgreSQL 版本上,请参阅 Daniel 的回答)。但是,您绝对可以改变您的方法,并
UNION ALL
从COPY
. 这意味着没有循环,但您必须从收集的表名中构造查询。结果看起来像
笔记:
psql
函数这样的东西。psql
是 PostgreSQL 的客户端。但是,它内置了命令(基本上所有以 开头的命令\
)。这是@Daniel Vérité 的 9.3 答案的 Windows 替代品
我从这个答案中借用了这个 findstr 技术。