2011-07-09 7 views
6

私はバイトフィールドを持つテーブルを持っています。コマンドライン(またはpgAdminのクエリ実行プログラム)からクエリを実行できるのは便利です。私は文字列として16進数を持っています。 16進数をbyteaに変換する関数が組み込まれていますか?コマンドライン経由でpostgresのバイトアフィールドを問い合わせる

私はのような何かをしたい:

「fa26e312は」私が欲しいbytea型のフィールドの進値である
SELECT * FROM table WHERE my_bytea_field=some_???_function('fa26e312'); 

注:これは私が開発/デバッグしている間に役立ちますが、コードで実行できますが、クエリで手作業で行うことができます。

+1

の例のように、新しい(9.0+の接頭辞に注意してください)Binary Data Typesドキュメントの例のように、 )["hex" format "](http://www.postgresql.org/docs/current/static/datatype-binary.html#AEN5037)が機能しません。 –

+0

私は8.4で動作しています –

答えて

4

組み込みのdecode(string text, type text)関数を使用してみてください(byteaを返します)。あなたはそれが(あなたが好きならば、いくつかの書式設定オプションがあります)-cスイッチであり、非対話型モードでpsqlを使用してCLI経由でクエリを実行することができます。

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 
0
SELECT * FROM table WHERE my_bytea_field=E'\\xfa26e312'; 

だけ

SELECT E'\\xDEADBEEF'; 
関連する問題