postgresql - добавить логический столбец в набор таблиц по умолчанию


159

Это правильный синтаксис postgresql для добавления столбца в таблицу со значением по умолчанию false

ALTER TABLE users
ADD "priv_user" BIT
ALTER priv_user SET DEFAULT '0'

Спасибо!


3
Вы хотите битовый столбец или фактический booleanстолбец?
rfusca

Ответы:


285
ALTER TABLE users
  ADD COLUMN "priv_user" BOOLEAN DEFAULT FALSE;

Вы также можете напрямую указать NOT NULL

ALTER TABLE users
  ADD COLUMN "priv_user" BOOLEAN NOT NULL DEFAULT FALSE;

ОБНОВЛЕНИЕ : следующее верно только для версий до postgresql 11.

Как упомянул Крейг на заполненных таблицах, более эффективно разбить его на этапы:

ALTER TABLE users ADD COLUMN priv_user BOOLEAN;
UPDATE users SET priv_user = 'f';
ALTER TABLE users ALTER COLUMN priv_user SET NOT NULL;
ALTER TABLE users ALTER COLUMN priv_user SET DEFAULT FALSE;

28
Обратите внимание, что если ваш стол большой, это может занять много времени и заблокировать стол на все время. Быстрее разбить его на шаги: добавьте столбец без значения по умолчанию ALTER TABLE users ADD COLUMN priv_user BOOLEAN;, затем UPDATE users SET priv_user = 'f';и, наконец, если вам нужно ALTER TABLE users ALTER COLUMN priv_user SET NOT NULL;.
Крейг Рингер

Подход, который разбит на шаги, не добавляет значения по умолчанию. Еще быстрее добавить "DEFAULT 'f'" на отдельном шаге?
Чарли Браун

1
Да, добавление значения по умолчанию на отдельном шаге является только операцией метаданных и, следовательно, очень быстрым.
Eelke

что это - «операция метаданных»? В чем смысл и почему это отличается от установки значения за один раз? Спасибо
Андрей Михайлович Степанов

1
Фактические правила заключаются в том, что ключевые слова и идентификаторы без кавычек не чувствительны к регистру, поэтому BOOLEAN разрешено, хотя внутри postgresql будет использовать логическое значение. Я обычно пишу стандартные типы и ключевые слова SQL в верхнем регистре, я использую строчные буквы для всех моих собственных идентификаторов.
Eelke

17

Если вы хотите фактический логический столбец:

ALTER TABLE users ADD "priv_user" boolean DEFAULT false;

Примечание: не все версии Postgres поддерживают это определение в одной строке.
Бенджамин Р

14

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

ALTER TABLE users
  ALTER COLUMN priv_user SET DEFAULT false;

5

Если вы используете postgresql, то вы должны использовать тип столбца BOOLEAN в нижнем регистре в качестве логического значения.

Пользователи ALTER TABLE ДОБАВИТЬ "priv_user" логическое ПО УМОЛЧАНИЮ false;


4

В psql измените синтаксис запроса столбца, как это

Alter table users add column priv_user boolean default false ;

логическое значение (true-false) сохранить в БД как значение (tf) .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.