Я хочу того же. Да, порядок не важен для моего варианта использования, но он просто неправильно меня натирает :)
Что я делаю, чтобы решить это следующим образом.
Этот метод гарантирует, что вы СОХРАНИТЕ любые существующие данные,
- Создайте новую версию таблицы, используя порядок, который я хочу, используя временное имя.
- Вставьте в эту новую таблицу все данные из существующей.
- Скиньте старый стол.
- Переименуйте новую таблицу в «собственное имя» из «временного имени».
- Повторно добавьте все индексы, которые у вас были ранее.
- Сбросить последовательность идентификаторов для приращений первичного ключа.
Текущий порядок столов:
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. Сбросить последовательность идентификаторов для приращений первичного ключа.
SELECT setval('public.mytable_id_seq', max(id)) FROM mytable;
person
Turgs
schedule
01.02.2018