Postgresql
如何將 bytea 列轉換為文本?
如何在 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
格式。