Как сделать новую колонку первой в PostgresSQL

Я хочу добавить новую колонку в уже существующую таблицу и хочу что бы она была первой, в MySQL я использовал следующую команду:

ALTER TABLE my_contacts
    ADD COLUMN contact_id SERIAL NOT NULL FIRST,
    ADD PRIMARY KEY (contact_id);

Но в PostgresSQL я получаю ошибку:

[42601] ОШИБКА: ошибка синтаксиса (примерное положение: "FIRST") Позиция: 68

Ответы (1 шт):

Автор решения: Aziz Umarov

Дам отрывок отсюда

Чтобы изменить порядок колонок, необходимо либо пересоздать таблицу, либо создать новые колонки с последующим переносом данных. Сама по себе идея перемещения колонок разработчикам PostgreSQL не претит, просто шаги к разработке данной функциональности не предпринимались. Назначение этого документа заключается в разъяснении обходных путей и тонких моментов, которые необходимо учитывать, при желании реализовать эту возможность.

Существует две основные причины, по которым может понадобиться изменить порядок колонок в реалиях PostgreSQL:

  • размещение колонок фиксированной длины в начале таблицы влияет на оптимизацию физической структуры
  • измененный порядок следования колонок в результатах выборок может быть более привлекательным внешне

На текущий момент PostgreSQL хранит порядок следования колонок таблиц к колонке attnum системной таблицы pg_attribute. Единственный путь изменить порядок колонки - пересоздать таблицу, или добавить колонки, переливая данные между старыми и новыми до тех пор, пока не будет достигнут нужный порядок.

→ Ссылка