Postgresql

使用 PostgreSQL 8.4,如何將 bytea 轉換為 postgres 中的文本值?

  • December 30, 2020

在我的應用程序中,我使用 C 程式碼在數據庫中插入數據,因為我從不受信任的來源收到的字元串我已經使用PQescapeByteaConnlibpq 庫對它們進行了轉義。這工作得很好,即產生八位字節格式的字元串。見下面的例子,

輸入字元串:\n\t\f\b\p\k\j\l\mestPrepared

輸出字元串:\\012\\011\\014\\010pkjlmestPrepared

輸出字元串被插入到數據庫中。現在,我使用 JDBC 以 java 程式碼從數據庫中檢索該數據。如何將字元串轉義回其原始值?

我想到了兩種可能的方法,

  1. 更改數據庫檢索查詢並將此欄位傳遞給 postgres 的任何字元串操作函式,即可以將 bytea 轉換為文本。
  2. 在 Java 程式碼中進行解碼。

我可以理解方法1會更有效。我已經嘗試了這裡列出的幾乎所有功能,但沒有任何效果。請幫忙!!

我在 linux 機器上使用 8.4 版的 postgres。

對於追隨者,因為這似乎是“將 bytea 轉換為文本”的規範問題(即,您實際上可以在 pgAdmin 等中看到它)。以下是如何讓它可見(假設your_column_name是 type bytea

select encode(table.your_column_name, 'escape') as your_alias_name from table_name

您是否嘗試過encode(data bytea, format text)withescape格式。在該語法format中可以是其中任何一個,

  • base64
  • 十六進制
  • 逃脫

所以encode(E'123\\000456'::bytea, 'hex')會將 bytea 輸出為十六進制編碼。

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