Как добавить столбцы в таблицу в PostgreSQL
В PostgreSQL команда ADD COLUMN вместе с предложением ALTER TABLE используется для добавления/вставки одного или нескольких столбцов в существующую таблицу. Оператор ADD COLUMN позволяет нам добавлять ограничения к столбцу в PostgreSQL, , например NOT NULL , UNIQUE и т. д. Итак, давайте узнаем, как оператор ADD COLUMN работает в PostgreSQL 9.0004 с помощью нескольких примеров.
Как добавить/вставить новый столбец в таблицу в Postgres?
Вы должны следовать определенному синтаксису, чтобы добавить новый столбец в любую уже существующую таблицу:
ALTER TABLE tbl_name ДОБАВИТЬ КОЛОННУ имя_столбца тип_данных;
Давайте обсудим приведенный выше синтаксис пошагово:
— ALTER TABLE — это команда/предложение, используемое для модификации/изменения таблицы.
— tbl-name — имя таблицы, определяемое пользователем.
— ДОБАВИТЬ СТОЛБЦ вставляет один или несколько столбцов в таблицу.
— col_name представляет столбец, который нужно изменить.
— data_type представляет тип целевого столбца, такой как целое, символьный и т. д.
Пример: Как добавить один столбец в уже существующую таблицу?
Давайте выполним команду ADD COLUMN из pgAdmin , чтобы узнать, как она работает в PostgreSQL 9.0004 :
Шаг 1: Выберите нужную таблицу
Сначала откройте pgAdmin , выберите базу данных, найдите доступные «Таблицы» в разделе «Схемы» и выберите нужную:
Предположим, мы хотим изменить таблицу «team_info» .
Шаг 2. Откройте Инструмент запросов
В строке меню выберите Инструмент запросов на вкладке Инструменты , как показано в приведенном ниже фрагменте:
Шаг 3: Добавьте новый столбец
В настоящее время у нас есть три столбца в таблице «team_info» . Давайте выполним команду ADD COLUMN , чтобы добавить новый столбец с именем «team_lead» в таблицу «team_info» :
ALTER TABLE team_info ДОБАВИТЬ КОЛОНКУ team_lead VARCHAR;
Теперь нажмите F5 или нажмите кнопку «Выполнить/Обновить» , чтобы запустить команду ADD COLUMN
Вывод показывает, что «team_info» Таблица успешно изменена.
Шаг 4: Проверка работы команды ДОБАВИТЬ СТОЛБЦ
Щелкните правой кнопкой мыши нужную таблицу и выберите параметр «Обновить» , чтобы просмотреть изменения в выбранной таблице:
После нажатия кнопки « Обновить» , следовательно, выбранная таблица будет обновлена:
Фрагмент выше поясняет, что столбец «team_lead» был добавлен в «team_info» таблица успешно.
Как добавить более одного столбца в таблицу в Postgres?
Как мы уже говорили ранее, команда ADD COLUMN может использоваться для добавления нескольких столбцов в любую конкретную таблицу. Теперь мы изучим это практически.
Синтаксис
Приведенный ниже синтаксис будет использоваться для добавления нескольких столбцов в таблицу в PostgreSQL :
ALTER TABLE tbl_name ДОБАВИТЬ COLUMN ограничение first_col data_type, ДОБАВИТЬ COLUMN ограничение second_col data_type, ... ADD COLUMN nth-col ограничение data_type;
Приведенный выше фрагмент кода показывает, что мы можем добавить несколько столбцов в таблицу, используя синтаксис с разделителями-запятыми.
Пример: как добавить несколько столбцов в определенную таблицу в Postgres?
Следуйте приведенным ниже инструкциям, чтобы добавить несколько столбцов в таблицу:
Шаг 1: Выберите таблицу
Выберите таблицу, которую вы хотите изменить; допустим, мы хотим изменить таблицу
Фрагмент выше показывает, что «staff_details» таблица имеет два столбца.
Шаг 2. Добавление нескольких столбцов
Давайте выполним оператор «ADD COLUMNS» , чтобы добавить еще пару столбцов в таблицу «staff_details» :
ALTER TABLE staff_details ДОБАВИТЬ СТОЛБЦУ staff_email VARCHAR, ДОБАВИТЬ СТОЛБЦУ staff_location VARCHAR;
В приведенном выше запросе команда ALTER TABLE используется для изменения/модификации таблицы «staff_details» . В то время как Команда ADD COLUMN используется для добавления столбцов «staff_email» и «staff_location» в таблицу «staff_details»
:Refsh таблицу и щелкните раздел «Столбцы», чтобы увидеть доступные столбцы в выбранной таблице:
Приведенный выше фрагмент подтвердил, что столбцы «staff_email» и «staff_location» были добавлены к 9 столбцам.0003 «staff_details» таблица успешно.
Как добавить столбцы с ограничениями в Postgres?
В Postgres мы можем добавить столбец с ограничениями, такими как NOT NULL, DEFAULT, UNIQUE, и т. д. Вот основной синтаксис добавления столбца с ограничениями в Postgres :
ALTER TABLE tbl_name ДОБАВИТЬ COLUMN col_name ограничения типа данных;
Рассмотрите перечисленные ниже пункты для подробного понимания приведенного выше синтаксиса:
— tbl-name — таблица, которую необходимо изменить.
— ДОБАВИТЬ СТОЛБЦ добавляет/вставляет один или несколько столбцов в целевую таблицу.
— data_type представляет тип целевого столбца, например, целочисленный, символьный и т. д.
— Ограничения представляют собой правило, которое должно быть реализовано для столбца.
— col_name представляет столбец, добавляемый в таблицу с ограничениями.
Пример: как добавить столбец с ограничениями в Postgres
Выполните перечисленные ниже шаги, чтобы понять, как вставить новый столбец с ограничением в PostgreSQL :
Шаг 1: Добавьте ограничения по умолчанию 9Предположим, мы хотим добавить столбец «is_illegable» со значением по умолчанию «false» . Для этого мы будем использовать ограничение «DEFAULT» , как показано в приведенном ниже фрагменте:
ИЗМЕНИТЬ ТАБЛИЦУ team_info ADD COLUMN is_illegible BOOLEAN по умолчанию false;
Приведенный выше запрос добавит столбец «is_illegible» в таблицу «team_info» . Столбец «is_illegible» имеет логический тип данных со значением по умолчанию «false» :
Шаг 2. Опишите измененную таблицу
psql) для проверки работы ADD COLUMN команда:
\d team_info;
Заключение
В PostgreSQL команда/оператор ADD COLUMN вместе с предложением ALTER TABLE используется для добавления одного или нескольких столбцов в таблицу. Команда ADD COLUMN позволяет нам добавлять новые столбцы с такими ограничениями, как 9.0003 DEFAULT , NOT NULL , UNIQUE и т. д. В этом обзоре рассмотрены некоторые примеры, объясняющие работу команды ADD COLUMN в лучшем виде.
ALTER TABLE … ADD COLUMN … сделано правильно
Работает ALTER TABLE
… ADD COLUMN
может иметь побочные эффекты, которые могут вызвать серьезные проблемы в производстве. Изменение структур данных является важной проблемой и происходит часто, поэтому важно понимать, что происходит на самом деле.
Давайте углубимся и посмотрим, как запустить ALTER TABLE
… ADD COLUMN
таким образом, чтобы не повредить операции из-за блокировки или интенсивного ввода-вывода.
Начало работы с ALTER TABLE… ADD COLUMN
Следующий оператор создает простую таблицу, которая будет служить тестовым макетом для операций, которые мы планируем выполнить:
test=# СОЗДАТЬ ТАБЛИЦУ t_sample AS ВЫБЕРИТЕ a1 :: int ОТ generate_series(1, 100000000) КАК a1; ВЫБЕРИТЕ 100000000 Время: 56 272 917 мс (00:56 273)
Исходная таблица имеет размер около 3,4 ГБ, как показано в следующем листинге:
тест=# \d+ Список отношений Схема | Имя | Тип | Владелец | Стойкость | Метод доступа | Размер | Описание --------+----------+-------+-------+-------------+ ---------------+----------+------------- общественный | t_sample | стол | чс | постоянный | куча | 3458 МБ | (1 ряд)
Пока это то, что мы ожидали. Но что, если добавить столбцы? Как это влияет на базу данных?
Добавление столбца в таблицу в PostgreSQL
Здесь мы должны рассмотреть различные сценарии. Самый простой — добавить столбец без значений по умолчанию:
. test=# ИЗМЕНИТЬ ТАБЛИЦУ t_sample ДОБАВИТЬ СТОЛБЦУ a2 int; ИЗМЕНИТЬ ТАБЛИЦУ Время: 11 472 мс
Важным моментом здесь является то, что эта операция выполняется очень быстро, потому что все, что она делает, — это запускает какую-то магию в системном каталоге. Нам нужна полная блокировка таблицы, НО это действительно короткая блокировка, потому что PostgreSQL фактически не записывает этот столбец на диск. Системный столбец знает, что на диске должен быть еще один столбец — поскольку ничего не присутствует, механизм может с уверенностью предположить, что значение действительно равно NULL.
Аналогичный трюк можно применить, если мы добавим постоянное значение по умолчанию:
test=# ИЗМЕНИТЬ ТАБЛИЦУ t_sample ДОБАВИТЬ СТОЛБЦУ a3 int ПО УМОЛЧАНИЮ 10; ИЗМЕНИТЬ ТАБЛИЦУ Время: 3339 мс
Опять же, операция выполняется очень быстро и НЕ влияет на объем памяти, который нам нужен, потому что этот дополнительный столбец вообще не попадает на диск:
тест=# \d+ Список отношений Схема | Имя | Тип | Владелец | Стойкость | Метод доступа | Размер | Описание --------+----------+-------+-------+-------------+ ---------------+----------+------------- общественный | t_sample | стол | чс | постоянный | куча | 3458 МБ | (1 ряд)
Движок знает, что должно быть больше столбцов. Однако, если внутри строки ничего не найдено, PostgreSQL узнает, каким должно быть значение. В этом случае можно ожидать, что значение будет равно 10. Опять же, нет необходимости сохранять эту запись.
Однако ситуация начинает меняться, если значение, которое мы хотим добавить в столбец, больше не является постоянным.
ИЗМЕНИТЬ ТАБЛИЦУ и случайное()
test=# ИЗМЕНИТЬ ТАБЛИЦУ t_sample ДОБАВИТЬ КОЛОННУ a4 int DEFAULT random()*1000; ИЗМЕНИТЬ ТАБЛИЦУ Время: 65233,954 мс (01:05,234)
random()
не дает детерминированных значений. Однако содержимое таблицы должно быть статичным — оно не должно меняться на лету. Поэтому нам действительно нужно записать данные на диск. Имейте в виду, что операция занимает более одной минуты. Хотя это немного, это также означает, что таблица на данный момент заблокирована. Наличие сотен или, возможно, тысяч подключений, ожидающих этой операции, может серьезно снизить доступность и вызвать всевозможные проблемы, начиная от ограничения количества подключений и заканчивая тайм-аутами. Поэтому следует избегать обширных блокировок таблиц.
Из-за того, что дополнительный столбец пришлось записывать на диск, размер таблицы вырос до размера более 4 ГБ.
тест=# \d+ Список отношений Схема | Имя | Тип | Владелец | Стойкость | Метод доступа | Размер | Описание --------+----------+-------+-------+-------------+ ---------------+----------+------------- общественный | t_sample | стол | чс | постоянный | куча | 4223 МБ | (1 ряд)
Обратите внимание, что размер здесь не является основной проблемой, обычно это блокировка.
ALTER TABLE … DROP COLUMN …
После добавления столбцов нам также нужно посмотреть, что произойдет, если мы захотим от них избавиться. Так же, как и ADD COLUMN
, команда DROP COLUMN
пытается максимально избежать перезаписи таблицы. Поэтому DROP COLUMN
просто помечает столбец как удаленный:
test=# ALTER TABLE t_sample DROP COLUMN a3; ИЗМЕНИТЬ ТАБЛИЦУ Время: 8148 мс тест=# \d+ Список отношений Схема | Имя | Тип | Владелец | Стойкость | Метод доступа | Размер | Описание --------+----------+-------+-------+-------------+ ---------------+----------+------------- общественный | t_sample | стол | чс | постоянный | куча | 4223 МБ | (1 ряд)
Размер таблицы не меняется, поскольку физический столбец все еще существует.