Как изменить положение столбца в таблице базы данных PostgreSQL?

Я пробовал следующее, Но мне не удалось:

ALTER TABLE person ALTER COLUMN dob POSITION 37;

6 ответов


"изменить положение колонки " в Вики PostgreSQL говорится:

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

Это довольно слабо, но в их защиту, в стандартном SQL, нет решения для перестановки столбца любой. Бренды базы данных, поддерживающие изменение порядкового положения столбца, определяют расширение синтаксиса SQL.

мне приходит в голову еще одна идея: вы можете определить VIEW это определяет порядок столбцов, как вам нравится, без изменения физического положения столбца в базовой таблице.


этот пост старый и, вероятно, решена, но у меня была та же проблема. Я решил это, создав представление исходной таблицы с указанием нового порядка столбцов.

отсюда я мог бы использовать представление или создать новую таблицу из представления.

    CREATE VIEW original_tab_vw AS
    SELECT a.col1, a.col3, a.col4, a.col2
    FROM original_tab a
    WHERE a.col1 IS NOT NULL --or whatever
    SELECT * INTO new_table FROM original_tab_vw

переименуйте или удалите исходную таблицу и установите имя новой таблицы в старую таблицу.


один, хотя и неуклюжий вариант для перестановки столбцов, когда порядок столбцов должен быть абсолютно изменен, а внешние ключи используются, заключается в том, чтобы сначала сбросить всю базу данных с данными, а затем сбросить только схему (pg_dump -s databasename > databasename_schema.sql). Затем измените файл схемы, чтобы изменить столбцы по своему усмотрению, затем воссоздайте базу данных из схемы и, наконец, восстановите данные во вновь созданной базе данных.


Я не думаю, что вы можете в настоящее время: см. эта статья на Postgresql wiki.

три обходных пути из этой статьи:

  1. восстановить таблицу
  2. добавить столбцы и переместить данные
  3. скрыть разногласия.

откройте таблицу в PGAdmin и на панели SQL внизу скопируйте инструкцию SQL Create Table. Затем откройте инструмент запрос и вставьте. Если в таблице есть данные, измените имя таблицы на "new_name", если нет, удалите комментарий " -- " в строке таблицы. При необходимости измените последовательность столбцов. Обратите внимание на отсутствующую/лишнюю запятую в последнем столбце, если вы ее переместили. Выполните новую команду SQL Create Table. Освежать и. .. вот.

для пустых таблиц в дизайн этап Этот метод вполне практичен.

если в таблице есть данные, нам также нужно изменить последовательность столбцов данных. Это просто: используйте INSERT импортировать старую таблицу в новую версию:

INSERT INTO new ( c2, c3, c1 ) SELECT * from old;

... где c2, c3, c1 колонки c1, c2, c3 старого стола в их новых позициях. Обратите внимание, что в этом случае вы необходимо использовать "новое" имя для отредактированной "старой" таблицы или вы потеряет ваши данные. Если имен столбцов много, длинные и / или сложные используйте тот же метод, что и выше, чтобы скопировать новую структуру таблицы в текстовый редактор и создать там новый список столбцов, прежде чем копировать его в INSERT заявление.

после проверки, что все хорошо,DROP старая таблица и измените "новое" имя на "старое", используя ALTER TABLE new RENAME TO old; и вы сделали.


в PostgreSQL при добавлении поля оно будет добавлено в конце таблицы. Если нам нужно вставить в определенное положение, то

alter table tablename rename to oldtable;
create table tablename (column defs go here);
insert into tablename (col1, col2, col3) select col1, col2, col3 from oldtable;