Я пробовал следующее, но мне это не удалось:
ALTER TABLE person ALTER COLUMN dob POSITION 37;
sql
database
postgresql
alter-table
Huuuze
источник
источник
Ответы:
« Изменить позицию столбца » в PostgreSQL Wiki говорит:
Это довольно слабо, но в их защиту в стандартном SQL тоже нет решения для изменения положения столбца. Бренды баз данных, которые поддерживают изменение порядкового номера столбца, определяют расширение синтаксиса SQL.
Мне пришла в голову еще одна идея: вы можете определить,
VIEW
который определяет порядок столбцов, как вам нравится, без изменения физического положения столбца в базовой таблице.источник
В PostgreSQL при добавлении поля оно будет добавлено в конец таблицы. Если нам нужно вставить в определенную позицию, тогда
источник
Этот пост старый и, вероятно, решен, но у меня была та же проблема. Я решил эту проблему, создав представление исходной таблицы, указав новый порядок столбцов.
Отсюда я мог либо использовать представление, либо создать новую таблицу из представления.
Переименуйте или удалите исходную таблицу и задайте имя новой таблицы старой таблице.
источник
Один, хотя и неуклюжий вариант переупорядочения столбцов, когда порядок столбцов должен быть абсолютно изменен и используются внешние ключи, - сначала выгрузить всю базу данных с данными, а затем выгрузить только схему (
pg_dump -s databasename > databasename_schema.sql
). Затем отредактируйте файл схемы, чтобы изменить порядок столбцов по своему усмотрению, затем воссоздайте базу данных из схемы и, наконец, восстановите данные во вновь созданной базе данных.источник
Я не думаю, что в настоящее время это возможно: см. Эту статью в вики Postgresql .
Три обходных пути из этой статьи:
источник
Откройте таблицу в PGAdmin и на панели SQL внизу скопируйте оператор SQL Create Table. Затем откройте инструмент запросов и вставьте. Если в таблице есть данные, измените имя таблицы на 'new_name', если нет, удалите комментарий «-» в строке Drop Table. При необходимости отредактируйте последовательность столбцов. Обратите внимание на отсутствующую / лишнюю запятую в последнем столбце, если вы ее переместили. Выполните новую команду SQL Create Table. Обновите и ... вуаля.
Для пустых таблиц на этапе проектирования этот способ вполне практичен.
Если в таблице есть данные, нам также необходимо изменить порядок столбцов данных. Это просто: используйте,
INSERT
чтобы импортировать старую таблицу в новую версию с помощью:... где
c2
,c3
,c1
являются колонныc1
,c2
,c3
из старой таблицы в своих новых позициях. Обратите внимание, что в этом случае вы должны использовать «новое» имя для отредактированной «старой» таблицы, иначе вы потеряете свои данные . В случае, если имена столбцов много, длинные и / или сложные, используйте тот же метод, что и выше, для копирования новой структуры таблицы в текстовый редактор и создания нового списка столбцов там перед копированием вINSERT
оператор.Убедившись, что все в порядке,
DROP
используйте старую таблицу и измените «новое» имя на «старое»,ALTER TABLE new RENAME TO old;
и все готово.источник
Я работал над переупорядочиванием большого количества таблиц и не хотел писать одни и те же запросы снова и снова, поэтому я сделал сценарий, который сделает все это за меня. По сути, это:
pg_dump
pg_dump
запрос для создания переупорядоченной таблицы с даннымиЕго можно использовать, выполнив следующую простую команду:
Он распечатывает sql, чтобы вы могли проверить и протестировать его, и это была большая причина, по которой я его основал
pg_dump
. Вы можете найти репозиторий на github здесь .источник
Я использую Django, и для него требуется столбец id в каждой таблице, если вы не хотите иметь головную боль. К сожалению, я был неосторожен, и моя таблица bp.geo_location_vague не содержала этого поля. Я подписал маленькую хитрость. Шаг 1:
Шаг 2: (без создания таблицы - таблица будет создана автоматически!)
Шаг 3:
Потому что мне нужен псевдотип bigserial в таблице. После SELECT * в pg будет создан тип bigint insetad bigserial.
Шаг 4: Теперь мы можем отбросить представление, отбросить исходную таблицу и переименовать новую таблицу со старым именем. Уловка завершилась успешно.
источник
Есть несколько обходных путей, чтобы сделать это возможным:
Воссоздание всей таблицы
Создать новые столбцы в текущей таблице
Создать представление
https://tableplus.com/blog/2018/09/postgresql-is-it-possible-to-alter-column-order-position-in-a-table.html
источник