(PHP 4 >= 4.3.0, PHP 5, PHP 7)

pg_unescape_bytea Escape binary for bytea type


pg_unescape_bytea ( string $data ) : string

pg_unescape_bytea() unescapes string from bytea datatype. It returns unescaped string (binary).


When you SELECT bytea type, PostgreSQL returns octal byte value prefixed by \ (e.g. \032). Users are supposed to convert back to binary format by yourself.

This function requires PostgreSQL 7.2 or later. With PostgreSQL 7.2.0 and 7.2.1, bytea type must be casted when you enable multi-byte support. i.e. INSERT INTO test_table (image) VALUES ('$image_escaped'::bytea); PostgreSQL 7.2.2 or later does not need cast. Exception is when client and backend character encoding does not match, there may be multi-byte stream error. User must cast to bytea to avoid this error.

See also pg_escape_bytea() and pg_escape_string()

add a note add a note

User Contributed Notes 3 notes

liviu dot mirea at gmail dot com
9 years ago
PostgreSQL 9.0 introduced "hex" as the new default format for encoding binary data. Because "pg_unescape_bytea" only works with the old "escape" format, you need to do pg_query('SET bytea_output = "escape";'); before executing your select queries.

More details can be found here:

[Ed: Recent PostgreSQL versions support unescaping the "hex" format.]
muralito at montevideo dot com dot uy
9 years ago
The workaround is to configure a property in the postgres database for the user, to make postgres behave as the old default.

ALTER USER username SET bytea_output = 'escape';

(or using the pgadmin interface)
tiagopastorello at gmail dot com
12 years ago
= pg_connect("host=localhost dbname=name user=postgres password=123456") or die('Sorry =( : ' . pg_last_error());

$cod= $_GET['cod'];

$sql = "SELECT * FROM table WHERE cod_field = '$cod'";
$quer = pg_query($conexao, $sql);

$reg = pg_fetch_object($query);

pg_unescape_bytea($reg -> field_bytea);

To Top