나는 당신이 다시에서 기존의 쌍을 끌어와 (이름을 바꾼 키) 새로운 쌍을 넣어해야한다는 맞아 생각
이
당신은 한 줄에 그것을 할 수 :.
(h - from_key) || hstore(to_key, h -> from_key)
여기에서 h
은 hstore이고 from_key
은 변경하려는 키이고 to_key
은 변경하려는 항목입니다. 그러면 원하는 변경 사항이 적용된 새 펌웨어가 반환되지만 from_key
은 h
에 있다고 가정합니다. from_key
이 h
이 아니면 hstore에 to_key -> NULL
가 표시됩니다. 모든 상냥한 사람들처럼, 당신이 누락 된 NULL을 원하지 않는다면, 논리를 간단한 함수로 둘러 싸서 존재 체크를 더 쉽게 만들 수 있습니다. 이런 일이 :
create or replace function
change_hstore_key(h hstore, from_key text, to_key text) returns hstore as $$
begin
if h ? from_key then
return (h - from_key) || hstore(to_key, h -> from_key);
end if;
return h;
end
$$ language plpgsql;
이 그럼 당신은이 두 가지를 말하고 예상 결과를 얻을 수 있습니다 :
=> select change_hstore_key('a=>1,b=>2,c=>3'::hstore, 'b', 'pancakes');
change_hstore_key
------------------------------
"pancakes"=>"2", "a"=>"1", "c"=>"3"
=> select change_hstore_key('a=>1,b=>2,c=>3'::hstore, 'pancakes', 'X');
change_hstore_key
------------------------------
"a"=>"1", "b"=>"2", "c"=>"3"
아름다운, 감사합니다. – Jeff
한 번에 여러 개의 키 이름을 바꿀 때 hstore 열과 함께 약 1 백만 개의 레코드를 빠르게 처리 할 수있는 방법이 있습니까? 나는 9.3에있어. – szimek
@szimek : AFAIK, 각 hstore를 열고 수정 한 다음 다시 넣어야합니다 (위와 같이 어려운 방법). 실제 PostgreSQL 전문가 중 일부가 도울 수 있도록 다른 질문을 시도해 볼 수 있습니다. –