Postgresql
postgres bytea 欄位的反轉字節順序
我目前正在處理一個包含散列的表,以 bytea 格式儲存。然而,將散列轉換為十六進製字元串會產生錯誤的字節順序。例子:
SELECT encode(hash, 'hex') FROM mytable LIMIT 1; Output: 1a6ee4de86143e81 Expected: 813e1486dee46e1a
有沒有辦法顛倒所有條目的字節順序?
這是一種方法,但**我永遠不會這樣做。**將字節儲存在數據庫的
bytea
列中沒有任何問題。但是,我不會在數據庫中爭吵,如果我這樣做了,我會使用,
- C 語言函式,或
- 一些不需要我將輸入分解成一組字節的花哨的程序語言。
這是 sql-esque 並且應該可以工作——這就是我們正在做的事情,
- 生成一個由一系列偏移量*0 - (bytelength-1)*組成的集合。
- 將這些偏移量映射到以十六進製字元串表示的字節。
- 字元串以相反的順序聚合它們。
這是一個例子,
CREATE TABLE foo AS SELECT '\x813e1486dee46e1a'::bytea AS bar; SELECT bar, string_agg(to_hex(byte), '') AS hash FROM foo CROSS JOIN LATERAL ( SELECT get_byte(bar,"offset") AS byte FROM generate_series(0,octet_length(bar)-1) AS x("offset") ORDER BY "offset" DESC ) AS x GROUP BY bar;
兩個筆記,
- 我們可能無法使用
offset
,因為它是保留的,但您明白了。- 這假設您的雜湊(上面的條)是唯一的。