Как переименовать столбцы таблицы в PostgreSQL
PostgreSQL предоставляет предложение RENAME COLUMN , которое используется совместно с командой ALTER TABLE для переименования столбца. Команда RENAME COLUMN позволяет переименовать один или несколько столбцов. PostgreSQL не предоставляет параметр «IF EXISTS» для команды «RENAME COLUMN» .
В этой статье объясняются перечисленные ниже варианты использования Команда RENAME COLUMN в PostgreSQL .
● Как использовать команду RENAME COLUMN для переименования столбцов в PostgreSQL?
● Как переименовать столбец, имеющий несколько зависимых объектов?
● Как использовать команду RENAME COLUMN для переименования нескольких столбцов в PostgreSQL?
Итак, приступим.
Как использовать команду RENAME COLUMN для переименования столбцов в PostgreSQL?
Команда «RENAME COLUMN» также может использоваться как «ПЕРЕИМЕНОВАТЬ» . Команда RENAME COLUMN выполняется с помощью команды ALTER TABLE , как показано в следующем синтаксисе:
ALTER TABLE tab_name ПЕРЕИМЕНОВАТЬ КОЛОННУ old_col_name В new_col_name;
Давайте разберемся, как работает приведенный выше фрагмент:
— ALTER TABLE — это предложение, используемое для изменения или изменения таблицы.
— tab_name — таблица, которую нужно изменить/модифицировать.
— ПЕРЕИМЕНОВАТЬ КОЛОННУ — это команда, которая переименовывает столбец.
— old_col_name представляет столбец, который нужно переименовать.
— new_col_name представляет новое/измененное имя столбца.Пример №1: Как переименовать столбец таблицы в Postgres? Шаг 1: Выберите базу данных0004 и установить соединение с базой данных с помощью команды «\c» :
\c пример;
Вывод показывает, что мы успешно подключились к базе данных «example» .
Шаг 2: Выберите таблицу
Запустите команду «\dt» , чтобы проверить доступные таблицы в подключенной базе данных:
\dt;
Выберите стол по вашему выбору из доступных столов.
Шаг 3: Опишите таблицу
Давайте запустим команду «\d»
\d staff_details;
Шаг 4: Переименуйте столбец
Предположим, нам нужно переименовать столбец «staff_location» в «staff_address» . Выполните команду «RENAME COLUMN» , чтобы переименовать выбранный столбец:
ALTER TABLE staff_details
RENAME COLUMN staff_location TO staff_address;
Шаг 5: Проверка имени столбца
Давайте выполним команду «\d», а затем имя таблицы, чтобы проверить, было ли изменено имя столбца:
\d staff_details;
Вывод подтвердил, что столбец «staff_location» был переименован в «staff_address» .
Как переименовать столбец, который имеет несколько зависимых объектов?
Переименование столбца с зависимыми объектами, такими как внешние ключи, представления, хранимые процедуры и т. д., также приведет к изменениям зависимых объектов.
Пример: как переименовать внешний ключ в PostgreSQL?
Рассмотрим приведенные ниже шаги для переименования столбца, от которого зависят некоторые другие объекты:
Шаг 1. Получение таблиц
Во-первых, мы получим «article_details» и «author_details4»4 таблицы с помощью команды
«\d» :
Вышеприведенный фрагмент кода показывает, что «article_id» является внешним ключом в
Шаг 2: Переименуйте столбец
Давайте запустим приведенную ниже команду, чтобы переименовать столбец «article_id» в «id» :
ALTER TABLE article_details ПЕРЕИМЕНОВАТЬ СТОЛБЦ article_id В id;
Шаг 3. Проверьте имя столбца
Введите команду «\d» , за которой следует имя таблицы (например, «article_detials» ), чтобы увидеть изменения, внесенные в выбранную таблицу:
\d article_detials;
Приведенный выше фрагмент поясняет, что «article_id» был переименован в «id» в выбранной таблице, а также в зависимых объектах/таблицах.
Как использовать команду RENAME COLUMN для переименования нескольких столбцов?
Следуйте синтаксису, разделенному точкой с запятой, чтобы переименовать несколько столбцов в PostgreSQL :
ИЗМЕНИТЬ ТАБЛИЦУ tab1_name ПЕРЕИМЕНОВАТЬ КОЛОННУ old_col_name В new_col_name;
ИЗМЕНИТЬ ТАБЛИЦУ tab2_name ПЕРЕИМЕНОВАТЬ КОЛОННУ old_col_name В new_col_name;
Пример: как переименовать несколько столбцов в Postgres?
В этом примере, во-первых, мы переименуем столбец «id» таблицы «article_details» в «article_id» .
ИЗМЕНИТЬ ТАБЛИЦУ article_details ПЕРЕИМЕНОВАТЬ ИДЕНТИФИКАТОР КОЛОННЫ В article_id;
ИЗМЕНИТЬ ТАБЛИЦУ author_details ПЕРЕИМЕНОВАТЬ СТОЛБЦУ author_id В a_id;
Давайте выполним этот запрос из инструмента запросов pgAdmin:
Вывод подтвердил, что выбранные таблицы были успешно изменены.
Заключение
PostgreSQL предоставляет предложение RENAME COLUMN , которое используется совместно с командой ALTER TABLE для переименования столбца. PostgreSQL не предоставляет параметр «IF EXISTS» для команды «RENAME COLUMN» . Таким образом, Postgres выдаст ошибку, если целевой столбец не существует в выбранной таблице. В этой статье рассмотрено несколько примеров, объясняющих работу пункта «RENAME COLUMN» .
Как практически переименовать таблицы и столбцы в PostgreSQL в рабочей системе?
Часто бывает, что оригинальное имя чему-то дается не самое лучшее. Возможно, требования немного изменились, а может быть, со временем появилось лучшее понимание представляемой концепции. Иногда при разработке функции используется одно имя, но тестирование с реальными пользователями показывает, что требуется лучшее имя, и было бы неплохо, чтобы имена для вещей в БД соответствовали именам, используемым в пользовательском интерфейсе.
PostgreSQL позволяет переименовывать таблицы и столбцы с помощью alter table
, но часто это невозможно в рабочей среде без значительных простоев. Если существующие клиенты используют старое имя, вы не можете просто вытащить его из-под них.
Я надеялся, что есть какой-то способ «добавить имя» к таблице или столбцу, чтобы old_name
new_name
оба работали, а потом удалить старое имя. Тогда миграция имен может работать следующим образом:- добавить
новое_имя
- изменить все клиенты для использования
new_name
вместоold_name
- после обновления всех клиентов удалить
old_name
Есть ли способ сделать это? Если нет, существует ли рекомендуемая процедура переименования столбца с минимальным временем простоя? Как насчет стола?
- PostgreSQL
6
Несколько рабочих рецептов переименования таблиц и/или столбцов в производственной системе. Однако я тестировал их только на небольшой тестовой базе данных, а не на большой производственной системе. Однако переименование и создание представления должны быть очень быстрыми.
Переименование таблицы
Переименование таблицы и временное добавление обновляемого представления со старым именем:
начало; изменить таблицу old_table переименовать в new_table; создать представление old_table как select * from new_table; совершить;
Перенесите клиенты для использования нового имени таблицы.
После переноса всех клиентов удалите представление:
открыть вид old_table;
Переименование столбцов без переименования таблицы
Переименование столбца без переименования таблицы немного сложнее, потому что у нас не может быть тени для таблицы (очевидно).
Переименуйте столбцы, временно переименуйте таблицу и добавьте обновляемый представление, которое добавляет старое имя для столбца с правильным именем таблицы:
начало; изменить таблицу my_table переименовать столбец old_name в new_name; изменить таблицу my_table переименовать в my_table_tmp; создать представление my_table как выберите *, новое_имя как старое_имя из my_table_tmp; совершить;
Перенесите клиенты для использования нового имени столбца.
После переноса всех клиентов отбросить представление, переименовать таблицу обратно:
начало; отбросить представление my_table; изменить таблицу my_table_tmp переименовать в my_table; совершить;
Одновременное переименование таблицы и некоторых ее столбцов
Переименование таблицы и столбцов и временное добавление обновляемого представления со старым именем и старыми столбцами:
начало; изменить таблицу old_table переименовать в new_table; изменить таблицу new_table переименовать столбец из old_name в new_name; создать представление old_table как выберите *, old_name как новое_имя из новой_таблицы; совершить;
Вместо
выберите *, old_name как new_name
, может быть лучше иметь только исходный набор столбцов, поэтому клиенты должны перейти на новую таблицу имя, чтобы получить новые имена столбцов:создать представление old_table как выберите неизменяемое_имя, старое_имя как новое_имя из новой_таблицы;
Перенастройте клиенты для использования новых имен таблиц и столбцов.