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!


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;

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;

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;

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;


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.