Автор оригинала: micolo
да тип поля id не SERIAL и нет возможности его поменять
так как же тогда быть
ну что значит, не поменять?
способ нумер раз (для 8-ой ветки):
- BEGIN;
- ALTER TABLE RENAME COLUMN column TO new_column;
- потом создаем колонку
- переливаем данные из одной колонки в другую
- удаляем "лишнее"
- сиквенсы:
SELECT setval ('имя_нашей_таблицы_seq', ((SELECT id from имя_нашей_таблицы order by id desc limit 1) + 1));
(мне пришлось совсем недавно так извращаться, когда живую базу из mantis-а переливала из MySQL в PostgreSQL)
- проверяем (например INSERT-им туда что-то временное, потом DELETE эту запись)
- если все в порядке - COMMIT
Способ нумер два (годится и для более ранних версий постгреса и вообще имхо более щадящий:
- BEGIN;начинаем транзакцию
- создаем временную таблицу со всеми нашими полями, но делаем тип id SERIAL;
- переливаем туда нашу таблицу
- убиваем исходную таблицу
- переливаем нашу на ее место
- убиваем временную
- и, если сиквенс не заполнился, ... см выше
- проверяем (см выше)
- если все в порядке - COMMIT