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!


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;

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;

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;

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;


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) .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.