2016-01-12 4 views
1

Я использую PostgreSQL 9.4.PostgreSQL 9.4 переносит JSON в HSTORE

Первоначально я был на моих ПОЛЬЗОВАТЕЛЕЙ стол ДЕТАЛИ поле, которое было поле типа HSTORE.

Я обновил этот тип столбца HSTORE к JSONB очень легко с помощью:

ALTER TABLE users ALTER COLUMN details TYPE jsonb USING CAST(details AS jsonb) 

Этот вопрос я столкнулся в настоящее время является то, что я должен написать откат, но я не смог найти способ отливки из JSONB - HSTORE.

Я попытался с помощью:

ALTER TABLE users ALTER COLUMN details TYPE hstore USING CAST(details AS hstore) 

И получил:

ERROR: cannot cast type jsonb to hstore 

Может кто-то помочь мне с этим, пожалуйста?

Спасибо заранее, EZEQUIEL

ответ

2

Если значения jsonb в простом виде пара {"key":"value",...}, вы можете использовать эту функцию:

create or replace function simple_jsonb_to_hstore(jdata jsonb) 
returns hstore language sql immutable 
as $$ 
    select hstore(array_agg(key), array_agg(value)) 
    from jsonb_each_text(jdata) 
$$; 

ALTER TABLE users ALTER COLUMN details TYPE hstore USING simple_jsonb_to_hstore(details); 
+0

Если не то, что также может быть помечен как 'IMMUTABLE' ? –

+0

Функция может быть неизменной. Ответ обновлен. Благодарю. – klin

Смежные вопросы