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

159

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

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

Спасибо!

1252748
источник
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;
Eelke
источник
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;
rfusca
источник
Примечание: не все версии Postgres поддерживают это определение в одной строке.
Бенджамин Р
14

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

ALTER TABLE users
  ALTER COLUMN priv_user SET DEFAULT false;
LondonRob
источник
5

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

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

Фейсал Чохан
источник
4

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

Alter table users add column priv_user boolean default false ;

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

Знакомьтесь, Патель
источник