postgresql - ajoute une colonne booléenne au jeu de table par défaut

159

Cette syntaxe postgresql est-elle appropriée pour ajouter une colonne à une table avec une valeur par défaut de false

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

Merci!

1252748
la source
3
voulez-vous une colonne de bits ou une booleancolonne réelle ?
rfusca

Réponses:

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

vous pouvez également spécifier directement NOT NULL

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

UPDATE : ce qui suit n'est vrai que pour les versions antérieures à postgresql 11.

Comme Craig l'a mentionné sur les tableaux remplis, il est plus efficace de le diviser en étapes:

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;
Anguille
la source
28
Notez que si votre table est grande, cela peut prendre beaucoup de temps et verrouiller la table pendant tout le temps. Il est plus rapide de le diviser en étapes: ajoutez la colonne sans valeur par défaut avec ALTER TABLE users ADD COLUMN priv_user BOOLEAN;, puis UPDATE users SET priv_user = 'f';et enfin si vous en avez besoin ALTER TABLE users ALTER COLUMN priv_user SET NOT NULL;.
Craig Ringer
L'approche divisée en étapes n'ajoute pas de valeur par défaut. Est-il encore plus rapide d'ajouter un "DEFAULT 'f'" dans une étape séparée?
Charlie Brown
1
Oui, l'ajout de la valeur par défaut dans une étape distincte n'est qu'une opération de méta-données et donc très rapide.
Eelke
qu'est-ce que c'est - «une opération de méta-données»? Dans quel sens et pourquoi est-ce différent de fixer la valeur en une seule fois? Merci
Andrey M. Stepanov
1
Les règles réelles sont que les mots-clés et les identifiants sans guillemets ne sont pas sensibles à la casse, donc BOOLEAN est autorisé en pensant qu'en interne postgresql utilisera boolean. J'ai tendance à écrire des types standard et des mots clés SQL en majuscules, j'utilise des minuscules pour tous mes propres identifiants.
Eelke
17

Si vous voulez une colonne booléenne réelle:

ALTER TABLE users ADD "priv_user" boolean DEFAULT false;
rfusca
la source
Remarque: toutes les versions de Postgres ne prennent pas en charge cette définition sur une seule ligne.
Benjamin R
14

Juste pour référence future, si vous avez déjà une colonne booléenne et que vous voulez simplement ajouter une valeur par défaut, faites:

ALTER TABLE users
  ALTER COLUMN priv_user SET DEFAULT false;
LondresRob
la source
5

Si vous utilisez postgresql, vous devez utiliser le type de colonne BOOLEAN en minuscules comme booléen.

ALTER TABLE utilisateurs ADD "priv_user" booléen DEFAULT false;

Faisal Chohan
la source
4

Dans psql, modifier la syntaxe de requête de colonne comme celle-ci

Alter table users add column priv_user boolean default false ;

valeur booléenne (vrai-faux) enregistrer dans la base de données comme valeur (tf) .

Rencontrez Patel
la source