postgresql - adiciona coluna booleana ao conjunto de tabelas padrão

159

Esta é a sintaxe correta do postgresql para adicionar uma coluna a uma tabela com um valor padrão de false

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

Obrigado!

1252748
fonte
3
você quer uma coluna de bits ou uma booleancoluna real ?
Rfusca

Respostas:

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

você também pode especificar diretamente NOT NULL

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

UPDATE : o seguinte é verdadeiro apenas para versões anteriores ao postgresql 11.

Como Craig mencionou nas tabelas preenchidas, é mais eficiente dividi-lo em etapas:

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
fonte
28
Observe que, se sua mesa for grande, isso poderá levar um longo tempo e travar a mesa o tempo todo. É mais rápido dividi-lo em etapas: adicione a coluna sem um padrão com ALTER TABLE users ADD COLUMN priv_user BOOLEAN;, then UPDATE users SET priv_user = 'f';e finalmente, se necessário ALTER TABLE users ALTER COLUMN priv_user SET NOT NULL;.
Craig Ringer
A abordagem dividida em etapas não está adicionando um valor padrão. Ainda é mais rápido adicionar um "PADRÃO 'f'" em uma etapa separada?
Charlie Brown
1
Sim, adicionar o padrão em uma etapa separada é apenas uma operação de metadados e, portanto, muito rápido.
Eelke
o que faz - 'uma operação de metadados'? Em que sentido e por que é diferente de definir o valor de uma só vez? Obrigado
Andrey M. Stepanov
1
As regras reais são que palavras-chave e identificadores não citados não diferenciam maiúsculas de minúsculas; portanto, o BOOLEAN é permitido, pois internamente o postgresql usará booleano. Costumo escrever tipos padrão e palavras-chave SQL em maiúsculas, uso minúsculas para todos os meus próprios identificadores.
Eelke
17

Se você deseja uma coluna booleana real:

ALTER TABLE users ADD "priv_user" boolean DEFAULT false;
rfusca
fonte
Nota: nem todas as versões do Postgres suportam isso sendo definido em uma linha.
Benjamin R
14

Apenas para referência futura, se você possui uma coluna booleana e deseja adicionar um padrão:

ALTER TABLE users
  ALTER COLUMN priv_user SET DEFAULT false;
LondonRob
fonte
5

Se você estiver usando o postgresql, precisará usar o tipo de coluna BOOLEAN em minúsculas como booleano.

Usuários ALTER TABLE ADICIONAM "priv_user" booleano DEFAULT false;

Faisal Chohan
fonte
4

No psql, altere a sintaxe da consulta da coluna como esta

Alter table users add column priv_user boolean default false ;

valor booleano (verdadeiro-falso) salva no DB como valor (tf) .

Conheça Patel
fonte