Извините, если об этом уже спрашивали, я не смог найти ничего, что ответило бы на этот вопрос.
Что я хочу сделать:
- У меня уже есть таблица , который имеет поле 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
- Инструмент миграции