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 великими літерами, я використовую малі регістри для всіх власних ідентифікаторів.
Ельке

17

Якщо ви хочете фактичну булеву колонку:

ALTER TABLE users ADD "priv_user" boolean DEFAULT false;

Примітка: не всі версії Postgres підтримують це визначення в одному рядку.
Бенджамін Р

14

Просто для подальшої довідки, якщо у вас вже є булева колонка, і ви просто хочете додати команду do:

ALTER TABLE users
  ALTER COLUMN priv_user SET DEFAULT false;

5

Якщо ви використовуєте postgresql, тоді ви повинні використовувати тип стовпця BOOLEAN в нижньому регістрі як булевий.

АЛЬТЕР ТАБЛИЦІ користувачів додають "priv_user" булева DEFAULT хибна;


4

У psql alter-синтаксисі запиту стовпця, як це

Alter table users add column priv_user boolean default false ;

булеве значення (true-false) зберегти в БД як (tf) значення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.