Заполнение поля NEW postgres значением jsonb в той же записи? - PullRequest
0 голосов
/ 02 апреля 2020

Извините, если об этом уже спрашивали, я не смог найти ничего, что ответило бы на этот вопрос.

Что я хочу сделать:

  • У меня уже есть таблица , который имеет поле JSONB с именем «данные».
  • Внутри этого jsonb одно из значений называется «packageId».
  • Теперь мне нужно добавить "packageId" в качестве столбца к фактической таблице.
  • Мне также нужно «выполнить обратное заполнение» всех элементов, находящихся в данный момент в таблице, с помощью packageId, который в данный момент находится в поле jsonb этой строки.
  • после завершения обратного заполнения добавьте ненулевое значение ограничение

Вот моя текущая попытка:

ALTER TABLE existing_table
    ADD COLUMN package_id UUID UNIQUE;

UPDATE existing_table
    SET package_id = uuid(data->>'packageId')
WHERE package_id IS NULL;

ALTER TABLE existing_table
    ALTER COLUMN package_id SET NOT NULL;

Я получаю ошибку:

SQL State : 42000
Error Code : 42000
Message : Syntax error in SQL statement "UPDATE EXISTING_TABLE
SET PACKAGE_ID = UUID(DATA-[*]>>'packageId')
WHERE PACKAGE_ID IS NULL"; SQL statement:
UPDATE existing_table
SET package_id = uuid(data->>'packageId')
WHERE package_id IS NULL [42000-200]
Location : <file omitted for brevity and privacy>
Line : 4
Statement : UPDATE existing_table
SET package_id = uuid(data->>'packageId')
WHERE package_id IS NULL

Дополнительные примечания:

Я новичок в postgres, и теперь я использую его для jsonb. Вполне возможно, что мой запрос совершенно неправильный, а не просто проблема с синтаксисом, но, согласно моему мыслительному процессу, это, кажется, имеет смысл. Если есть лучший способ, пожалуйста, скажите мне.

Это мой первый вопрос о переполнении стека - я изо всех сил старался следовать рекомендациям!

Технологии, используемые в этой ситуации:

  • Технология базы данных - postgres
  • Инструмент миграции
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...