Postgresql

postgres bytea 欄位的反轉字節順序

  • April 1, 2021

我目前正在處理一個包含散列的表,以 bytea 格式儲存。然而,將散列轉換為十六進製字元串會產生錯誤的字節順序。例子:

SELECT encode(hash, 'hex') FROM mytable LIMIT 1;

Output: 1a6ee4de86143e81
Expected: 813e1486dee46e1a

有沒有辦法顛倒所有條目的字節順序?

這是一種方法,但**我永遠不會這樣做。**將字節儲存在數據庫的bytea列中沒有任何問題。但是,我不會在數據庫中爭吵,如果我這樣做了,我會使用,

  • C 語言函式,或
  • 一些不需要我將輸入分解成一組字節的花哨的程序語言。

這是 sql-esque 並且應該可以工作——這就是我們正在做的事情,

  1. 生成一個由一系列偏移量*0 - (bytelength-1)*組成的集合。
  2. 將這些偏移量映射到以十六進製字元串表示的字節。
  3. 字元串以相反的順序聚合它們。

這是一個例子,

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;

兩個筆記,

  1. 我們可能無法使用offset,因為它是保留的,但您明白了。
  2. 這假設您的雜湊(上面的條)是唯一的。

引用自:https://dba.stackexchange.com/questions/156700