Sql добавить поле в таблицу: ALTER TABLE — изменение таблицы в SQL и работа со столбцами (add delete rename column)

«Как добавить поле в большую таблицу PostgreSQL без блокировки?» — Яндекс Кью

Информация ниже нуждается в тестированиии

==========================================

Источник https://leopard.in.ua/2016/09/20/safe-and-unsafe-operations-postgresql#.Yl_LRxxBzmU

===========================================

Безопасные и небезопасные операции с большими объемами PostgreSQL

===========================================

PostgreSQL — это объектно-реляционная система управления базами данных, которую я часто использую для многих продуктов. Некоторые из этих продуктов должны иметь высокую доступность и работать без простоев. Это означает, что я должен выполнять миграцию схемы базы данных, пока приложение работает и обслуживает запросы. Я должен быть очень осторожен в отношении того, какие операции с базой данных я запускаю. Если я запускаю неверную команду, она может заблокировать обновления таблицы на долгое время. Например, если я создаю новый индекс для таблицы, я не могу создать новую запись в этой таблице, пока этот индекс строится. Любой, кто попытается внести запись в эту таблицу, будет заблокирован и, возможно, истечет время ожидания, что приведет к частичному отключению. В целом, я согласен с тем, что операции с базой данных занимают много времени. Однако любая операция, которая блокирует таблицу для обновлений более чем на несколько секунд, означает для меня время простоя.

============================================

Я решил составить список операций, которые можно сделать безопасно (без даунтайма) и небезопасно.

Добавить новый столбец (безопасный)

Эта операция не блокирует таблицу и может быть выполнена безопасно. Но существуют некоторые случаи, которые могут заблокировать вашу таблицу.

===========================================

Добавьте столбец со значением по умолчанию (небезопасно, если PostgreSQL < 11)

Добавление столбца со значением по умолчанию требует обновления каждой строки таблицы (для сохранения нового значения столбца). Для большой таблицы это создаст длительную операцию, которая ее заблокирует. Поэтому, если вы намереваетесь заполнить столбец в основном значениями, отличными от значений по умолчанию, лучше всего добавить столбец без значений по умолчанию, вставить правильные значения с помощью UPDATE (правильный способ — выполнять пакетные обновления, например, обновлять 1000 строк за раз, потому что большое обновление создаст блокировку для всей таблицы), а затем добавьте любое желаемое значение по умолчанию.

==============================================

ОБНОВЛЕНИЕ: в PostgreSQL 11 теперь можно использовать такие операторы DDL:

==============================================

ALTER TABLE users ADD COLUMN foo_factor integer NOT NULL DEFAULT 42;

выполняться за постоянное время. Строки не затрагиваются, когда это выполняется, а вместо этого обновляются «лениво».

Добавьте столбец, который не может быть нулевым (небезопасно, если PostgreSQL < 11)

Это будет иметь ту же проблему, что и «Добавить столбец со значением по умолчанию». Чтобы сделать эту операцию без блокировки, вы можете создать новую таблицу с добавлением ненулевого столбца, записать в обе таблицы, выполнить обратное заполнение, а затем переключиться на новую таблицу. Этот обходной путь невероятно обременительный и требует в два раза больше места, чем занимает таблица.

===========================================

ОБНОВЛЕНИЕ: в PostgreSQL 11 теперь можно использовать такие операторы DDL:

ALTER TABLE users ADD COLUMN foo_factor integer NOT NULL DEFAULT 42;

выполняться за постоянное время. Строки не затрагиваются, когда это выполняется, а вместо этого обновляются «лениво».

Борис Державец

20 апреля 2022

Смотри также
https://dba.stackexchange.com/questions/211221/add-column-with-default-in-postgresql-without-table-lev… Читать дальше

Комментировать ответ…Комментировать…

Тег | htmlbook.ru

Internet ExplorerChromeOperaSafariFirefoxAndroidiOS
3.0+1.0+4.0+1.0+1.0+1.0+1.0+

Спецификация

HTML:3.24.015.0XHTML:1. 01.1

Описание

Тег <select> позволяет создать элемент интерфейса
в виде раскрывающегося списка, а также список с одним или множественным выбором,
как показано далее. Конечный вид зависит от использования атрибута size тега <select>, который устанавливает высоту списка.
Ширина списка определяется самым широким текстом, указанным в теге <option>,
а также может изменяться с помощью стилей. Каждый пункт создается с помощью
тега <option>, который должен быть вложен в контейнер <select>. Если планируется отправлять данные
списка на сервер, то требуется поместить элемент <select> внутрь формы. Это также необходимо, когда к данным списка идет обращение через
скрипты.

ЧебурашкаКрокодил ГенаШапоклякКрыса ЛарисаВыберите герояЧебурашкаКрокодил ГенаШапоклякКрыса Лариса
Список множественного выбораРаскрывающийся список

Синтаксис

<select>
  <option>Пункт 1</option>
  <option>Пункт 2</option>
</select>

Атрибуты

accesskey
Позволяет перейти к списку с помощью некоторого сочетания клавиш.
autofocus
Устанавливает, что список получает фокус после загрузки страницы.
disabled
Блокирует доступ и изменение элемента.
form
Связывает список с формой.
multiple
Позволяет одновременно выбирать сразу несколько элементов
списка.
name
Имя элемента для отправки на сервер или обращения через скрипты.
required
Список обязателен для выбора перед отправкой формы.
size
Количество отображаемых строк списка.
tabindex
Определяет последовательность перехода между элементами при нажатии на клавишу Tab

Также для этого тега доступны универсальные атрибуты и события.

Закрывающий тег

Обязателен.

Пример

HTML5IECrOpSaFx

<!DOCTYPE HTML>
<html>
 <head>
  <meta charset="utf-8">
  <title>Тег SELECT</title>
 </head>
 <body>  
 
  <form action="select1.php" method="post">
   <p><select size="3" multiple name="hero[]">
    <option disabled>Выберите героя</option>
    <option value="Чебурашка">Чебурашка</option>
    <option selected value="Крокодил Гена">Крокодил Гена</option>
    <option value="Шапокляк">Шапокляк</option>
    <option value="Крыса Лариса">Крыса Лариса</option>
   </select></p>
   <p><input type="submit" value="Отправить"></p>
  </form>
 </body>
</html>

Строчные элементыФормы

  • Поле со списком

SQL Alter View

В этом разделе мы описали Alter View с подробным примером.

Примечание. ALTER INDEX применяется к SQL Server (все поддерживаемые версии), базе данных SQL Azure, управляемому экземпляру Azure SQL, Azure Synapse Analytics, параллельному хранилищу данных.

В некоторых случаях нам может потребоваться изменить структуру представления из-за добавления дополнительных столбцов или сокрытия нежелательных столбцов от отображения пользователям. Для этой цели мы можем использовать ALTER VIEW. В операторе ALTER VIEW мы можем добавить новые столбцы или удалить столбцы, не удаляя представление.

Используя оператор ALTER VIEW, мы можем изменить структуру представления.

Синтаксис —
 ALTER VIEW имя существующего_представления КАК
ВЫБЕРИТЕ столбец1, столбец2, …, столбецN
ОТ имя_таблицы
[ГДЕ условие];
 
  • exists_view_name — Указывает имя существующего представления.
  • столбец1, столбец2, …, столбецN — указывает имена столбцов.
  • имя_таблицы — Указывает имя базовой таблицы.
  • условие — указывает имя условия.

Пример —

Давайте рассмотрим приведенную ниже таблицу (таблицы) в качестве примера таблицы (таблиц) для создания SQL-запроса для получения желаемых результатов.

emp_id emp_name обозначение
001 Сотрудник1 Директор
002 Сотрудник2 Директор
003 Сотрудник3 Менеджер
004 Сотрудник4 Менеджер
005 Сотрудник5 Аналитик
006 Сотрудник6 Аналитик
007 Сотрудник7 Клерк
008 Сотрудник8 Продавец
009 Сотрудник9 Продавец

Сценарий — изменение существующего представления без добавления новых столбцов.

Требование – Измените существующее представление employee_v, удалив из него столбец обозначений. Запрос был следующим:

 ALTER VIEW employee_v AS SELECT emp_id, emp_name
ОТ employee_details;
 

Выполнив вышеуказанный запрос, мы можем изменить представление employee_v. Результат был показан ниже —

emp_id emp_name
001 Сотрудник1
002 Сотрудник2
003 Сотрудник3
004 Сотрудник4
005 Сотрудник5
006 Сотрудник6
007 Сотрудник7
008 Сотрудник8
009 Сотрудник9

Сценарий — изменение существующего представления с добавлением новых столбцов.

Требование — изменить существующее представление employee_v, добавив столбец manager_id. Запрос был следующим:

 ALTER VIEW employee_v AS SELECT emp_id, emp_name, manager_id
С работника;
 

Выполнив приведенный выше запрос, мы можем изменить представление employee_v, добавив новый столбец, не удаляя существующее представление. Результат был показан ниже —

emp_id emp_name manager_id
001 Сотрудник1
002 Сотрудник2
003 Сотрудник3 Сотрудник1
004 Сотрудник4 Сотрудник2
005 Сотрудник5 Сотрудник3
006 Сотрудник6 Сотрудник3
007 Сотрудник7 Сотрудник3
008 Сотрудник8 Сотрудник4
009 Сотрудник9 Сотрудник4

ALTER TABLE добавить столбец — SQL Server

ALTER TABLE добавить столбец — SQL Server — SS64. com

  • SS64
  • SQL-сервер
  • Инструкции
 Синтаксис
      ALTER TABLE  таблица  ALTER COLUMN  столбец  [ WITH {CHECK | НЕТ ПРОВЕРКИ} ]
         ДОБАВИТЬ  определение_столбца  [...  n  ] [;]

столбец_определение:

     столбец data_type 
      [РАЗБОРКА  имя_сортировки  ]
         [НУЛЬ | НЕ НОЛЬ]
            [ОГРАНИЧЕНИЕ  ограничение  ] ПО УМОЛЧАНИЮ  константное_выражение  ]
            [ИДЕНТИЧНОСТЬ [( seed ,  приращение )] [НЕ ДЛЯ РЕПЛИКАЦИИ]
               [ROWGUIDCOL] [ column_constraint  [...n]]
    
тип данных:
   [  type_schema  .]  тип 
      [ (  точность  [ ,  масштаб  ] | макс |
          [ {  СОДЕРЖИМОЕ  | ДОКУМЕНТ } ]  xml_schema_collection  ) ]

 
стол:
  база данных.схема.таблица
    база данных.. таблица
    схема.таблица 
 

Аргументы:

ВСЕ — все ограничения или триггеры в таблице включены или отключены.

Столбец

— не более 128 символов. Имя ‘timestamp’ используется, если имя не указано для столбца типа данных timestamp.

TEXTIMAGE_ON — указывает альтернативное хранилище файловую группу для столбцов типа: text, ntext, image, xml, varchar(max), nvarchar(max), varbinary(max) и определяемый пользователем тип CLR.

СОДЕРЖИМОЕ — разрешить несколько элементов верхнего уровня в каждом экземпляре типа данных xml.
ДОКУМЕНТ. Разрешить только один элемент верхнего уровня в каждом экземпляре типа данных xml.

ПО УМОЛЧАНИЮ — значение, предоставляемое для столбца, если во время вставки ничего не указано явно.
IDENTITY — столбец идентификаторов, по одному на таблицу: tinyint, smallint, int, bigint, decimal (p, 0) или numeric (p, 0)

ONLINE — Сделать базовые таблицы и связанные индексы доступными во время операции с индексами.

НЕ ДЛЯ РЕПЛИКАЦИИ — не применяйте ограничения для агента репликации (ограничения IDENTITY, FOREIGN KEY и CHECK).
CONSTRAINT — определите ограничение PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY или CHECK.

NULL / NOT NULL — может ли столбец принимать нулевые значения.

ГРУППА | NONCLUSTERED — тип индекса создается для ограничения PRIMARY KEY или UNIQUE. Ограничения PRIMARY KEY по умолчанию имеют значение CLUSTERED, а ограничения UNIQUE по умолчанию имеют значение NONCLUSTERED. 931-1 байт символьных/двоичных/Unicode данных.

WITH CHECK / WITH NOCHECK — Проверяются ли данные в таблице на соответствие новому ограничению FOREIGN KEY или CHECK.

Чтобы изменить столбец таблицы, вам может потребоваться: Удалить статистику, Удалить первичный, внешний ключ или ограничения проверки, Удалить индексы.

Нельзя изменять следующие столбцы:
ROWGUIDCOL, тип данных метки времени, вычисляемый столбец (или используемый в вычисляемом столбце), связанный с определением DEFAULT (может по-прежнему регулировать длину, точность и масштаб). Вы не можете изменить существующий столбец, чтобы добавить свойство IDENTITY.