通过命令行查询postgres中的bytea字段

时间:2011-07-09 22:18:18

标签: postgresql

我有一个带有bytea字段的表,如果我可以通过命令行(或pgAdmin的查询执行程序)进行查询,那将会很方便。我将十六进制值作为字符串。是否有内置函数将十六进制转换为bytea?

我想做点什么:

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

其中'fa26e312'是我想要的bytea字段的十六进制值。

注意:这只是在我开发/调试时有用,我可以通过代码完成,但我希望能够在查询中手动完成。

2 个答案:

答案 0 :(得分:4)

尝试使用内置的decode(string text, type text)函数(它返回bytea)。您可以在非交互模式下使用psql通过CLI运行查询,即使用-c开关(如果您愿意,还有一些格式选项):

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

示例:

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

答案 1 :(得分:0)

SELECT * FROM table WHERE my_bytea_field=E'\\xfa26e312';

就像Binary Data Types文档中的示例一样(注意E'\\ x'前缀):

SELECT E'\\xDEADBEEF';