2011-07-09 20 views
6

Tengo una tabla con un campo bytea, y sería conveniente si pudiera hacer consultas a través de la línea de comandos (o ejecutor de consultas de pgAdmin). Tengo el valor hexadecimal como una cadena. ¿Hay una función incorporada para convertir hex a bytea?campo Query bytea en postgres a través de la línea de comando

me gustaría hacer algo como:

SELECT * FROM table WHERE my_bytea_field=some_???_function('fa26e312'); 

donde 'fa26e312' es el valor hexadecimal del campo bytea que quiero.

Nota: Esto es útil mientras estoy desarrollando/depurando cosas, puedo hacerlo a través de código, pero me gustaría poder hacerlo a mano en una consulta.

+1

el nuevo (9.0+) ["hex" formato "] (http://www.postgresql.org/docs/current/static/datatype-binary.html#AEN5037) no funciona para usted? –

+0

Me estoy ejecutando en 8.4 –

Respuesta

4

Pruebe usar la función incorporada decode(string text, type text) (devuelve bytea). Puede ejecutar consultas a través de CLI utilizando psql en modo no interactivo, es decir, con -c interruptor (hay algunas opciones de formato si se quiere):

psql -c "SELECT * FROM table WHERE my_bytea_field=decode('fa26e312', 'hex');" 

Ejemplo:

CREATE TABLE test(id serial, my_bytea_field bytea); 
INSERT INTO test (my_bytea_field) VALUES 
    (E'\\320\\170'::bytea), 
    (E'\\100\\070'::bytea), 
    (E'\\377\\377'::bytea); 

psql -tc "SELECT * FROM test WHERE my_bytea_field=decode('ffff', 'hex');" 
    3 | \377\377 
0
SELECT * FROM table WHERE my_bytea_field=E'\\xfa26e312'; 

Justo como en el ejemplo en los Binary Data Types docs (nótese el E '\\ x' prefijo):

SELECT E'\\xDEADBEEF'; 
Cuestiones relacionadas