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


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

ALTER TABLE person ALTER COLUMN dob POSITION 37;
6 65

6 ответов:

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

PostgreSQL в настоящее время определяет столбец заказ на основе из элемент 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;