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!


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;

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;

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;

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;


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.