postgresql 如何上傳二進位制資料

2022-04-09 10:58:39 字數 854 閱讀 4440

postgresql的二進位制資料型別為bytea,可最多儲存2g的資料。在ado、odbc等介面,可通過帶引數化的插入sql語句上傳二進位制。

然而在某些介面、sql語句無法進行引數繫結,或者某些語言沒有二進位制的型別,或者介面的不相容等原因,常無法上傳二進位制資料。

碰到這種情況下,必須在客戶端將二進位制轉化為一定規則的字串行,然後插入語句時,來個顯示轉換

cast('字串行' as bytea).

二進位制轉化為字串行的規則:

分析每個位元組,當其ascii值在0到31,127到255,或為39、92,請將這位元組轉化為3位的八進位制字串,前面加上2個反斜槓,如chr(39)表示為\\\\047. 其他ascii值為可顯示字元,不變,當然你也可全部轉化為八進位制,但這樣整個字串太長,浪費空間。

如二進位制序列 chr(0)+'a'+'b'+chr(233)+chr(25)+'c'轉化為字串行為:

\\\\000ab\\\\351\\\\031c

上傳的時候再來個顯示轉換,如 insert into table1 (aa) values (cast('\\\\000ab\\\\351\\\\031c' as bytea))

如果二進位制資料太大,可分次上傳,用||連線符連線起來,如:

insert into table1 (id,aa) values (1,cast('序列1' as bytea))

update table1 set aa=aa||cast('序列2' as bytea) where id=1

... 

如果postgresql為9.0以上, 可用 hex格式, 字串前面加0x

如chr(255)+chr(0)+chr(254) 可轉化為 '0x ff00fe'

PostgreSQL如何匯入SJIS字符集的檔案

磨礪技術珠磯,踐行資料之道,追求卓越價值 回到上一級頁面 postgresql雜記頁 回到頂級頁面 postgresql索引頁 作者 高健 luckyjackgao gmail.com 外部檔案來自於windows,日語sjis字符集。由於sjis字符集和標準的posix有衝突,故linux平台一般...

如何更新Postgresql的Jsonb陣列

假設你決定將資料以json或者jsonb的形式儲存在資料庫中,然後發現你剛剛給自己製造了新的問題,而這些問題是以前沒有的。jsonb是乙個強大的工具,但它也有一定的代價,因為你需要調整查詢和處理資料的方式。而且將整個jsonb物件載入到記憶體中,用你喜歡的程式語言進行轉換,然後將其儲存回資料庫,這並...

PostgreSQL陣列如何去除交集

postgresql中支援多種型別的資料型別,其中陣列型別在pg中也是被頻繁使用的一種,我們可以定義某列為變長多維陣列。那麼對於不同陣列我們怎麼獲取陣列的交集,進行去除交集等操作呢?對於字串,我們可以使用except來直接進行去除交集,那麼陣列該怎麼辦呢?對於陣列的去除交集我們的思路大致為 1 先把...