我不知道一個簡單的方法... COPY具有可變長度頭的二進制格式,不是很容易「修剪」。除此之外,PG是相當文本爲中心的,我不知道有什麼辦法可以強制SELECT的BYTE字段的「原始」(二進制)輸出。
你可以得到一個文本的十六進制輸出,並自己寫一個小程序(C,Perl或其他),將它從\x000102414243
轉換爲二進制。並不難,但不是直接的(和十六進制格式是在PostgreSQL 9.0)
psql -t -q -c "select binaryfield from.. where ..." mydb | myhextobin > tmp.gz
BTW,格熱戈日的回答很中肯。
補充:不是很乾淨,也不是萬無一失的,只是如果有什麼發現它有用......
/* 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;
}
我同意這是不是:-)最好的方式,但我不是一個誰決定這樣做,我只需要讓它離開那裏:-) – user797710 2011-06-15 07:25:02