Я хочу того же. Да, заказывайте сейчас обязательно, но это меня просто теряет :):
Что я делаю, чтобы решить это следующим образом.
Этот метод гарантирует, что вы СОХРАНИТЕ любые существующие данные,
- Создайте новую версию таблицы, используя нужный порядок, используя временное имя.
- Вставить все данные в эту новую таблицу из существующей.
- Оставь старый стол.
- Переименуйте новую таблицу в «собственное имя» из «временного имени».
- Повторно добавьте все индексы, которые у вас были ранее.
- Сброс последовательности ID для приращений первичного ключа.
Текущий порядок стола:
id, name, email
1. Создайте новую версию таблицы, используя нужный порядок, используя временное имя.
В этом примере я хочу, чтобы email
был до name
.
CREATE TABLE mytable_tmp
(
id SERIAL PRIMARY KEY,
email text,
name text
);
2. Вставьте все данные в эту новую таблицу из существующей.
INSERT INTO mytable_tmp --- << new tmp table
(
id
, email
, name
)
SELECT
id
, email
, name
FROM mytable; --- << this is the existing table
3. Оставьте старый стол.
DROP TABLE mytable;
4. Переименуйте новую таблицу в «Собственное имя» из «Временное имя».
ALTER TABLE mytable_tmp RENAME TO mytable;
5. Повторно добавьте все индексы, которые у вас были ранее.
CREATE INDEX ...
6. Сброс последовательности ID для приращений первичного ключа.
SELECT setval('public.mytable_id_seq', max(id)) FROM mytable;