2016-03-27 1 views
3

Я хочу перенести данные из одного столбца (VARCHAR) в другую колонку (jsonb)PostgreSQL обновления JSONB столбец со значением другого столбца

Column |   Type    |      Modifiers       
------------+-----------------------------+-------------------------------------------------------- 
id   | integer      | not null default nextval('merchants_id_seq'::regclass) 
name  | character varying   | not null 
nameb  | jsonb      | not null default '{}'::jsonb 

Так что nameb воли стала {"en": "$name"} где $name этим значение в name поле ,

Например:

SELECT, имя, NAMEB

перед:

    name     | nameb  
--------------------------------------+------------ 
hello        | {} 
world        | {} 

после:

    name     | nameb  
--------------------------------------+------------ 
hello        | {"en": "hello"} 
world        | {"en": "world"} 

С regualar типов я могу сделать UPDATE SET whatever = (SELECT ...), но как это сделать с jsonb?

UPDATE merchants SET nameb = (SELECT '{"en": "fillme!"}'::jsonb); работает, но как установить «fillme!» значение из другого поля?

ответ

0

Я нашел решение:

UPDATE merchants AS m1 
SET nameb = (
    SELECT row_to_json(t) FROM (
    SELECT name as en FROM merchants AS m2 WHERE m1.id = m2.id 
) t 
)::jsonb; 

Не уверен, что это правильно, но это работает