Postgresql

如何將 bytea 列轉換為文本?

  • November 25, 2020

如何在 PostgreSQL 中將 bytea 列轉換為文本,以便我可以在 PGADMIN 中正確讀取該列?

我在 PGADMIN 的查詢編輯器中有以下 SQL 查詢:

SELECT event_type, created_at, encode(metadata::bytea, 'escape') 
FROM public.events 
ORDER BY created_at DESC
LIMIT 100

但是,它會生成一個encoded列,其中每個記錄或多或少類似於以下輸出:

\203t\00000some_textd\000some_other_textd\0000

我怎樣才能擺脫這種編碼,以便我只能看到該列的原始值,以文本格式:

some_text some_data

我也嘗試過:

SELECT event_id, event_type, created_at, decode((encode(metadata, 'escape')::text), 'escape')
FROM public.events
ORDER BY created_at DESC
LIMIT 100

但在上述情況下,查詢返回一個decode類型的列,bytea我只看到該[binary data]列的每條記錄的欄位。

我也嘗試過這裡提到的前兩個答案,但沒有成功,無法正確翻譯我的查詢的最後一個答案。

我終於找到瞭如何將bytea列顯示為文本!我可以convert_from像這樣使用該功能:

SELECT event_type, convert_from(metadata, 'UTF8') as metadata
FROM public.events 
ORDER BY created_at DESC
LIMIT 100

然後,我將擁有人類可讀格式的元數據列。

我怎樣才能擺脫這種編碼,讓我只看到列的原始值,以文本格式

當只有大約 95 個視覺化 ASCII 字元時,字節有 256 個可能的值,(範圍

$$ 32:126 $$),因此 ASCII 文本和二進製表示之間的映射不能是一對一的。 產生的格式encode(metadata::bytea, 'escape')只是一種可能的表示,其中一些字節由字元序列表示。其他常見的表示是十六進制(每個字節輸出為 2 個字元)和 base64(每個 3 個字節輸出為 4 個字元)。

如果您不想要這些並且對如何將metadata列輸出為文本有具體想法,那麼您始終可以提供使用者函式而不是 encode. 現在你的問題沒有指定你想看到什麼輸出,只是它不是escape格式。

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