Я не знаю простого способа ... COPY имеет двоичный формат с заголовком переменной длины, который не очень легко "обрезать".Помимо этого, PG довольно текстоцентричен, я не думаю, что есть способ форсировать «сырой» (двоичный) вывод из SELECT для поля BYTEA.
Вы можете получить текстовый шестнадцатеричный вывод инапишите себе небольшую программу (C, Perl или что-то еще), чтобы преобразовать ее из скажем \x000102414243
в двоичный файл.Не сложно, но не так просто (и шестнадцатеричный формат в Postgresql 9.0)
psql -t -q -c "select binaryfield from.. where ..." mydb | myhextobin > tmp.gz
Кстати, ответ Гжегожа очень уместен.
Добавлено: не очень чисто и не защищено от ошибокчто-то находит это полезным ...
/* expects a pg hexadecimal string, in "\x....." format, and converts to binary*/
/* warning: no checks! it just ignores chars outside [0-9a-f] */
#include<stdio.h>
int main() {
int x, pos, v;
char hex[3]={0,0,0};
pos = 0;
while( (x = getchar()) >= 0) {
if(( x >='0' && x <= '9') || ( x >= 'a' && x <= 'f' )) {
hex[pos++] = (char)x;
if(pos == 2) {
sscanf(hex, "%x", &v);
putchar((char)v);
pos = 0;
}
}
}
return pos==0 ? 0 : 1;
}