web-dev-qa-db-fra.com

impossible de faire fonctionner un simple insert PostgreSQL

J'essaie de faire une insertion simple dans une table postgres, mais j'obtiens une erreur indiquant que la valeur que j'essaie d'insérer est interprétée comme un nom de colonne

INSERT INTO "imageTagBusinessMainCategory"
(id, businessMainCategory)
VALUES
(DEFAULT, "auto dealer")

Où id est configuré pour être la clé primaire et l'incrémentation automatique, et non null. Ce sont les cases que j'ai cochées lorsque j'ai configuré la table dans phpPgAdmin.

Je reçois cette erreur cependant:

ERROR: ERROR: column "auto dealer" does not exist
Query = INSERT
INTO "imageTagBusinessMainCategory"
(id, businessMainCategory)
VALUES
(DEFAULT,
"auto dealer")

J'ai mis mon nom de table entre guillemets, comme je l'ai lu ici je devrais.

Et utilisé DEFAULT pour incrémenter automatiquement l'identifiant comme je l'ai lu ici je devrais.

Des idées? Merci!

58
1252748

Utilisation 'auto dealer' au lieu. PostgreSQL interprète " comme étant des guillemets pour les identifiants, ' comme étant des guillemets pour les chaînes.

Également:

  • S'il s'agit d'un nouveau projet, n'utilisez pas de tables à casse mixte; c'est une source de frustration plus tard. Au lieu de pouvoir utiliser n'importe quelle casse dans vos instructions SQL, vous devez à la fois citer le nom de l'identifiant et obtenir la casse correcte.

  • Il n'est pas nécessaire de spécifier id/DEFAULT, vous lui demandez de faire ce qu'il aurait déjà fait. Je n'ai pas rencontré de SGBD qui vous oblige à inclure columnName/DEFAULT si vous voulez qu'il mette la valeur par défaut dans la colonne, donc je ne pense pas que cette paire KV supplémentaire va pour que ce qui se passe soit plus clair pour quiconque lira votre code plus tard.

125
Matt
INSERT INTO "imageTagBusinessMainCategory"
("businessMainCategory")
VALUES
('auto dealer')

EDIT: Ajout de guillemets doubles autour du nom de la colonne

8
Randy

Postgres, Oracle, etc. s'attendent à ce que le nom de la colonne soit entre guillemets s'ils ont une casse mixte. Donc, créez une convention de toutes les petites ou toutes les majuscules pour vos colonnes de tableau ou utilisez des guillemets comme l'a suggéré David Faber

INSERT INTO "imageTagBusinessMainCategory"
("businessMainCategory")
VALUES
('auto dealer')
3
randomness