2011-07-09 9 views
6

Mam tabelę z polem bytea i byłoby wygodne, gdybym mógł wykonywać zapytania za pomocą wiersza poleceń (lub executora kwerend pgAdmin). Mam wartość szesnastkową jako ciąg znaków. Czy istnieje wbudowana funkcja konwertująca hex na bajt?Zapytanie o pole bytea w postgresie za pomocą wiersza polecenia

chciałbym zrobić coś takiego:

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

gdzie „fa26e312” jest wartość hex pola bytea chcę.

Uwaga: jest to pomocne, gdy zajmuję się programowaniem/debugowaniem, mogę to zrobić za pomocą kodu, ale chciałbym to zrobić ręcznie w zapytaniu.

+1

Nowy (9+ lub więcej) [format "hex"] (http://www.postgresql.org/docs/current/static/datatype-binary.html#AEN5037) nie działa dla ciebie? –

+0

Mam uruchomiony 8.4 –

Odpowiedz

4

Spróbuj użyć wbudowanej funkcji decode(string text, type text) (zwraca bytea). Można uruchomić zapytań poprzez CLI za pomocą psql w trybie non-interactive, czyli z -c przełącznika (istnieją pewne opcje formatowania jeśli chcesz):

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

Przykład:

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'; 

Wystarczy jak w przykładzie w dokumentach Binary Data Types (zwróć uwagę na prefiks E '\\ x'):

SELECT E'\\xDEADBEEF'; 
Powiązane problemy