postgresql: agrega una columna booleana al conjunto de tablas predeterminado

159

¿Es esta la sintaxis postgresql adecuada para agregar una columna a una tabla con un valor predeterminado de false

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

¡Gracias!

1252748
fuente
3
¿Quieres una columna de bits o una booleancolumna real ?
rfusca

Respuestas:

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

también puede especificar directamente NOT NULL

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

ACTUALIZACIÓN : lo siguiente solo es cierto para las versiones anteriores a postgresql 11.

Como Craig mencionó en las tablas llenas, es más eficiente dividirlo en pasos:

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
fuente
28
Tenga en cuenta que si su mesa es grande, esto puede llevar mucho tiempo y bloquear la mesa todo el tiempo. Es más rápido dividirlo en pasos: agregue la columna sin un valor predeterminado con ALTER TABLE users ADD COLUMN priv_user BOOLEAN;, luego UPDATE users SET priv_user = 'f';y finalmente si es necesario ALTER TABLE users ALTER COLUMN priv_user SET NOT NULL;.
Craig Ringer el
El enfoque que se divide en pasos no es agregar un valor predeterminado. ¿Sigue siendo más rápido agregar una "DEFAULT 'f'" en un paso separado?
Charlie Brown
1
Sí, agregar el valor predeterminado en un paso separado es solo una operación de metadatos y, por lo tanto, muy rápido.
Eelke
¿Qué significa "una operación de metadatos"? ¿En qué sentido y por qué es diferente de establecer el valor de una vez? Gracias
Andrey M. Stepanov
1
Las reglas reales son que las palabras clave y los identificadores sin comillas no distinguen entre mayúsculas y minúsculas, por lo que se permite que BOOLEAN internamente postgresql use boolean. Tiendo a escribir tipos estándar y palabras clave SQL en mayúsculas, uso minúsculas para todos mis propios identificadores.
Eelke
17

Si desea una columna booleana real:

ALTER TABLE users ADD "priv_user" boolean DEFAULT false;
rfusca
fuente
Nota: no todas las versiones de Postgres admiten que se defina en una línea.
Benjamin R
14

Sólo como referencia futura, si usted ya tiene una columna booleana y lo que desea añadir un defecto hacer:

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

Si está utilizando postgresql, debe usar el tipo de columna BOOLEAN en minúsculas como boolean.

ALTER TABLE users AGREGAR "priv_user" boolean DEFAULT false;

Faisal Chohan
fuente
4

En psql alter column sintaxis de consulta como esta

Alter table users add column priv_user boolean default false ;

valor booleano (verdadero-falso) guardar en DB como valor (tf) .

Conoce a patel
fuente