Как сделать новую колонку первой в PostgresSQL
Я хочу добавить новую колонку в уже существующую таблицу и хочу что бы она была первой, в MySQL я использовал следующую команду:
ALTER TABLE my_contacts
ADD COLUMN contact_id SERIAL NOT NULL FIRST,
ADD PRIMARY KEY (contact_id);
Но в PostgresSQL я получаю ошибку:
[42601] ОШИБКА: ошибка синтаксиса (примерное положение: "FIRST") Позиция: 68
Ответы (1 шт):
Дам отрывок отсюда
Чтобы изменить порядок колонок, необходимо либо пересоздать таблицу, либо создать новые колонки с последующим переносом данных. Сама по себе идея перемещения колонок разработчикам PostgreSQL не претит, просто шаги к разработке данной функциональности не предпринимались. Назначение этого документа заключается в разъяснении обходных путей и тонких моментов, которые необходимо учитывать, при желании реализовать эту возможность.
Существует две основные причины, по которым может понадобиться изменить порядок колонок в реалиях PostgreSQL:
- размещение колонок фиксированной длины в начале таблицы влияет на оптимизацию физической структуры
- измененный порядок следования колонок в результатах выборок может быть более привлекательным внешне
На текущий момент PostgreSQL хранит порядок следования колонок таблиц к колонке attnum системной таблицы pg_attribute. Единственный путь изменить порядок колонки - пересоздать таблицу, или добавить колонки, переливая данные между старыми и новыми до тех пор, пока не будет достигнут нужный порядок.