Comment puis-je spécifier la valeur par défaut d'une colonne dans la DDL? J'étais à peu près sûr que la méthode suivante fonctionnait il y a quelque temps:
CREATE TABLE test
(
col_1 CHAR(12) NOT NULL,
col_2 INTEGER NOT NULL WITH DEFAULT,
col_3 CHAR(12) NOT NULL WITH DEFAULT
);
Je voudrais juste définir que la base de données doit utiliser la valeur par défaut pour le type de données de colonne (comme dans mon exemple ci-dessus), sans spécifier exactement quelle valeur.
La valeur par défaut par défaut pour toute nouvelle colonne de table est la valeur par défaut du type de données.
Et la valeur par défaut par défaut pour les types de données est NULL
- ce qui est le cas pour tous les types de données de base dans Postgres. Mais toute valeur valide est autorisée pour les types ou domaines personnalisés.
Une valeur par défaut peut être spécifiée, dans le cas où un utilisateur souhaite que les colonnes du type de données par défaut soient différentes de la valeur nulle. Spécifiez la valeur par défaut avec la clé
DEFAULT
. (Une telle valeur par défaut peut être remplacée par une clause expliciteDEFAULT
attachée à une colonne particulière.)
L'expression par défaut sera utilisée dans toute opération d'insertion qui ne spécifie pas de valeur pour la colonne. Si une valeur par défaut est définie pour une colonne particulière, elle remplace toute valeur par défaut associée au domaine. À son tour, la valeur par défaut du domaine remplace toute valeur par défaut associée au type de données sous-jacent.
Vous utilisez uniquement la clause DEFAULT
pour les colonnes dans CREATE TABLE
pour spécifier une valeur par défaut différente. Sinon, vous ne faites rien . comme vous le voyez dans la question n'est pas valable dans PostgresWITH DEFAULT
Pour réinitialiser une colonne par défaut à par défaut par défaut du type de données (généralement NULL
), drop la valeur par défaut spécifiée de la colonne.
ALTER [ COLUMN ] column_name DROP DEFAULT
NOT NULL
Contraintes sont liés mais complètement indépendants. Une colonne définie NOT NULL
Et sans DEFAULT
personnalisé (et sans valeur par défaut non nulle pour le type) vous oblige à fournir une valeur non nulle pour chaque INSERT
.
En plus: vous ne voulez probablement pas utiliser le type de données char(12)
dans Postgres.
Vous devez spécifier quelle est la valeur par défaut. Si je me souviens bien, la contrainte par défaut devrait être avant NOT NULL:
CREATE TABLE test
( col_1 CHAR(12) NOT NULL,
col_2 INTEGER DEFAULT 0 NOT NULL,
col_3 CHAR(12) DEFAULT '' NOT NULL
);