Как изменить положение столбца в таблице базы данных 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.
три обходных пути из этой статьи:
- восстановить таблицу
- добавить столбцы и переместить данные
- скрыть разногласия.
откройте таблицу в 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;