我正在使用 COPY 将字段从表复制到文件。该字段是一个压缩文本文件,因此我使用二进制副本。 文件已创建,唯一的问题是 COPY 向文件添加了我不需要的标题和结尾(?)。这可以改变吗?是否有一个参数可以使 COPY 将字段完全按照数据库中的原样放置?
如果我手动删除不需要的 header ,我可以使用 zcat 或 gunzip 提取文件。
我正在做这样的事情:
psql -d some_database -c \
"copy (select some_column from a_table where id=900) to stdout with BINARY;" > /tmp/tmp.gz
然后我想做
gunzip /tmp/tmp.gz
有什么想法吗?
最佳答案
一种可能,尽管您可能不喜欢它,但它可行:
psql -At -c "select encode(content, 'base64') from t where ..." | base64 -d
即将内容打印为 base64 并对其进行解码。我认为现实是 psql 旨在产生可读的输出,并且故意说服它吐出原始二进制数据是困难的。
我想如果你想要足够的话,你可以编写一些工具(Perl/python 脚本)来连接到数据库并直接打印原始输出。
COPY 的“WITH BINARY”选项不仅执行简单的二进制输出,它还执行一些可能值得怀疑的编码。
关于linux - postgres 复制命令,二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6344120/