Bạn có thể chuyển đổi một chuỗi hex thành bytea bằng cách sử dụng decode
chức năng (trong đó "mã hóa" có nghĩa là mã hóa một giá trị nhị phân thành một giá trị văn bản nào đó). Ví dụ:
select decode('DEADBEEF', 'hex');
decode
------------------
\336\255\276\357
dễ hiểu hơn với đầu ra mặc định của 9.0:
decode
------------
\xdeadbeef
Lý do bạn không thể chỉ nói E'\xDE\xAD\xBE\xEF'
là điều này nhằm mục đích tạo ra một giá trị văn bản, không phải là một bytea, vì vậy Postgresql sẽ cố gắng chuyển đổi nó từ mã hóa máy khách sang mã hóa cơ sở dữ liệu. Bạn có thể viết định dạng thoát bytea như vậy, nhưng bạn cần phải nhân đôi dấu gạch chéo ngược:E'\\336\\255\\276\\357'::bytea
. Tôi nghĩ bạn có thể hiểu tại sao định dạng bytea lại bị thay đổi .... IMHO the decode()
hàm là một cách hợp lý để viết đầu vào, mặc dù có một số chi phí liên quan.