Как изменить положение столбца в таблице базы данных PostgreSQL?
Я пробовал следующее, Но мне не удалось:
ALTER TABLE person ALTER COLUMN dob POSITION 37;
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 whateverSELECT * INTO new_table FROM original_tab_vwпереименуйте или удалите исходную таблицу и установите имя новой таблицы в старую таблицу.
один, хотя и неуклюжий вариант для перестановки столбцов, когда порядок столбцов должен быть абсолютно изменен, а внешние ключи используются, заключается в том, чтобы сначала сбросить всю базу данных с данными, а затем сбросить только схему (
pg_dump -s databasename > databasename_schema.sql
). Затем отредактируйте файл схемы, чтобы изменить порядок столбцов по своему усмотрению, затем воссоздайте базу данных из схемы и, наконец, восстановите данные во вновь созданную базу данных.
Я не думаю, что вы можете в настоящее время: см. эта статья на Postgresql wiki.
три решения из этой статьи:
- восстановить таблицу
- добавить столбцы и переместить данные
- скрыть разногласия.
откройте таблицу в 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;
и вы сделали.