@alexeysikora

Как изменить тип столбца и имеющиеся строки используя данные из другой таблицы?

У меня есть две таблицы: progress и subjects. В progress есть столбец subject типа text, а в таблице subjects есть 2 столбца: subject_id типа integer и subject типа text.
Как мне заменить тип столбца subject в таблице progress на integer, заодно изменив имеющиеся записи в этой таблице?
Пробовал такой вариант (переименовал subject на subject_id для дальнейшего присвоения ему внешнего ключа):
ALTER TABLE progress RENAME COLUMN subject TO subject_id;

ALTER TABLE progress ALTER COLUMN subject_id TYPE INTEGER USING (
SELECT subjects.subject_id 
FROM subjects, progress
WHERE progress.subject_id = subjects.subject
);

но это неправильный запрос:
ОШИБКА: нельзя использовать подзапрос в выражении преобразования
СТРОКА 1: ...ogress ALTER COLUMN subject_id TYPE INTEGER USING (SELECT su...
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
@galaxy
ALTER TABLE progress ADD COLUMN subject_id INT;

UPDATE progress p SET p.subject_id = s.subject_id 
  FROM subjects s
 WHERE p.subject = s.subject;

-- ALTER TABLE progress DROP COLUMN subject;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы