2012-01-10 10 views
6

Czy istnieje lepszy sposób, aby uzyskać wiersz tabeli w formacie hstore niż dziejeŁatwo wyjściowy format hstore wiersza tabeli

SELECT hstore(ARRAY['col1','col2','col3'], ARRAY[col1::text, col2::text, col3::text]) FROM tbl; 

To działa, ale postać nie musi być lepszy sposób niż wpisywanie każdej kolumny. hstore przyjmuje typ rekordu dla danych wejściowych, ale nie mogłem wymyślić, w jaki sposób wprowadzić zapytanie o jednorzędowe wywołanie do funkcji i sprawić, by był szczęśliwy. Wersja Postgres 9.0.4.

Odpowiedz

10

Tak - można rzutować wiersz na typ hstore z funkcją hstore().

SELECT hstore(tbl.*) FROM tbl; 

roboty dla mnie:

[email protected]=# select hstore(foo.*) from foo; 
     hstore 
------------------------ 
"bar"=>"1", "baz"=>"2" 
(1 row) 

Zobacz http://www.postgresql.org/docs/9.0/static/hstore.html#HSTORE-FUNC-TABLE

+1

Ah! Nie myślałem, żeby umieścić tam nazwę tabeli. Właśnie wypróbowałem SELECT hstore (*) FROM tbl. Dzięki! – EvilAmarant7x

+1

Z jakiegoś powodu sama gwiazdka '(*)' jest analizowana w inny sposób niż '(foo. *)'. Dziwne, ale tak to działa. – filiprem

-1

zamiast * trzeba zwrócić tabeli Alias:

SELECT hstore(tbl) FROM tbl; 

gwiazdką jego dłuższe i mniej składnia selfexplaining :

SELECT hstore(tbl.*) FROM tbl; 
Powiązane problemy