2012-01-10 32 views
6

Có cách nào tốt hơn để có được một hàng của một bảng sang định dạng hstore vì điDễ dàng đầu ra định dạng hstore của một dòng của bảng

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

Nó hoạt động, nhưng tôi hình dung đó có phải là một cách tốt hơn gõ từng cột. hstore có một loại bản ghi cho đầu vào, nhưng tôi không thể tìm ra cách để nạp truy vấn sản xuất một hàng vào hàm và làm cho nó hạnh phúc. Postgres phiên bản 9.0.4.

Trả lời

10

Có - bạn có thể truyền hàng thành loại hstore với chức năng hstore().

SELECT hstore(tbl.*) FROM tbl; 

trình cho tôi:

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

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

+1

Ah! Tôi không nghĩ đặt tên bảng vào đó. Tôi vừa thử SELECT hstore (*) FROM tbl. Cảm ơn! – EvilAmarant7x

+1

Từ một số lý do dấu hoa thị một mình '(*)' được phân tách theo cách khác với '(foo. *)'. Lạ nhưng đó là cách nó hoạt động. – filiprem

-1

Thay vì * bạn phải tham khảo bảng bí danh:

SELECT hstore(tbl) FROM tbl; 

Với dấu một của nó dài hơn và cú pháp lên tất cả ít :

SELECT hstore(tbl.*) FROM tbl; 
Các vấn đề liên quan