Задать вопрос
@kr_ilya

Как добавить колонку в базу с данными из другой колонки?

Появилась необходимость добавить новую колонку item_id и заполнить её значениями id из другой колонки, которая имеет вид
5f1daea05f629555784602.png
У меня была мысль написать функцию, которая возвращала бы значение id из jsonb объекта для текущей строки и указать эту функцию в качестве дефолтного значения, но я не знаю, как передать значение поля item для текущей строки.
CREATE FUNCTION public.get_item_id(item items)
    RETURNS bigint
    LANGUAGE 'sql'
    
AS $BODY$ 
SELECT item.item ->> "id"
FROM items
$BODY$;

ALTER FUNCTION public.get_item_id()
    OWNER TO postgres;


Этот код не работает.

Может есть гораздо проще способ? Без использования функций?
  • Вопрос задан
  • 1118 просмотров
Подписаться 2 Средний 3 комментария
Решения вопроса 1
@dzhebrak
Сначала добавьте новый столбец:
ALTER TABLE items ADD COLUMN item_id VARCHAR (16) DEFAULT NULL;

Затем заполните созданный столбец данными из другой колонки:
UPDATE items SET item_id = item->>'id';

В примере выше items - таблица, а item - столбец типа jsonb

Если новый столбец типа BIGINT:
ALTER TABLE items ADD COLUMN item_id_int BIGINT DEFAULT NULL;
UPDATE items SET item_id_int = (item->>'id')::bigint;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы