2013-04-18 1 views
3

어떤 SQL 쿼리가 PostgreSQLhstore 열을 모든 hstore 행의 고유 키가 테이블의 열을 형성하고 값이 해당 열의 행을 채우는 일반 테이블로 변환합니까? I는 "등가"테이블PostgreSQL hstore 열을 어떻게 행으로 변환 할 수 있습니까?

a b c d 
--------------- 
1 | 2 | 3 | 
4 | 6 | 5 | 7 
8 | 3 | 8 | 

구별 hstore 키 A, B, C로 hstore 열

hstore 
------------------------------------ 
"a"=>"1", "b"=>"2", "c"=>"3" 
"a"=>"4", "b"=>"6", "c"=>"5", "d"=>7 
"a"=>"8", "b"=>"3", "c"=>"8" 

변환 할 수 있으며,의 열을 형성 d는 방법을 예를 들어

, 테이블과 그 값이 각 열의 행을 채 웁니다?

답변

4

이 작업은 동적으로 수행 할 수 없지만 출력과 일치하는 유형을 만들면이 작업을 수행 할 수 있습니다.

create table foo (data hstore); 
create type foo_type as (a text, b text, c text); 

insert into foo (data) 
values 
('a => 1, b => 2'), 
('a => 1, b=>2, c => 3'), 
('a => 1'); 

select (populate_record(null::foo_type, data)).* 
from foo; 

반환 : 당신은 당신이 원하는 열을 일치하는 테이블이있는 경우 당신은 또한 "테이블 유형을"사용할 수 있습니다

 
a | b | c 
--+---+-- 
1 | 2 | 
1 | 2 | 3 
1 | | 

참고.

0

질문에 답을 얻었지만 비슷한 문제가 발생했습니다. hstore 값을 변환해야 테이블에 데이터를 직접 삽입 할 수있었습니다. 이 내가 입수 한 솔루션입니다 : 물론

INSERT INTO foo 
SELECT (populate_record(null::foo, 'a => 1, b=>2, c => 3'::hstore)).*; 

의 hstore 열은 테이블에 있어야하거나 무시됩니다. 희망은 나를 좋아하는 다른 사람들에게 도움이되기를 바랍니다. :)