no puede hacer que funcione una simple inserción de PostgreSQL

82

Estoy tratando de hacer una inserción simple en una tabla de postgres, pero obtengo un error de que el valor que estoy tratando de insertar se está interpretando como un nombre de columna

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

Donde id está configurado para ser la clave principal y auto incremento, y no nulo. Esas son las casillas que marqué cuando configuré la tabla en phpPgAdmin.

Sin embargo, recibo este error:

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

He puesto el nombre de mi tabla entre comillas dobles, como he leído aquí , debería hacerlo.

Y solía DEFAULTincrementar automáticamente la identificación como he leído aquí .

¿Algunas ideas? ¡Gracias!

1252748
fuente
13
utilice comillas simples para "concesionario de automóviles".
Muratgu
2
Comillas simples. Deja la identificación.
Paul Tomblin
@muratgu que da el error:ERROR: ERROR: syntax error at or near "'imageTagBusinessMainCategory'" Position: 13
1252748
@PaulTomblin ¿a qué te refieres con "dejar fuera la identificación"? ¡Gracias!
1252748
Quiero decir, como se muestra en la respuesta de @ Randy. Excepto que parece que también necesita comillas dobles alrededor del nombre de la columna.
Paul Tomblin

Respuestas:

165

Úselo en su 'auto dealer'lugar. PostgreSQL se interpreta "como comillas para identificadores, 'como comillas para cadenas.

También:

  • Si se trata de un proyecto nuevo, no utilice tablas de casos mixtos; es una fuente de frustración más adelante. En lugar de poder usar cualquier caso en sus declaraciones SQL, debe citar el nombre del identificador y obtener el caso correcto.

  • No es necesario especificar id/ DEFAULT, le está pidiendo que haga lo que ya habría hecho. No he conocido un DBMS que requiera que incluya columnName/ DEFAULTsi desea que ponga el valor predeterminado en la columna, por lo que no creo que este par KV adicional aclare lo que está sucediendo para cualquiera que lea su código más adelante. .

Mate
fuente
que me da este errorERROR: ERROR: column "businessmaincategory" of relation "imageTagBusinessMainCategory" does not exist
1252748
1
Probablemente creó la columna en caso mixto, al igual que el nombre de la tabla. También debe citar el nombre de la columna si este es el caso. Deje de usar mayúsculas y minúsculas al nombrar y les ahorrará mucho dolor a todos.
Matt
@ Matt Estoy enfrentando el mismo problema y tratar de usar pg con C ++ es un dolor cuando tengo que escribir esas comillas dobles. ¿No hay una solución alternativa como alguna configuración que eliminaría la necesidad de estas citas?
itsols
@itsols La primera viñeta del "También" eliminaría la necesidad de las comillas; defina sus identidades solo usando [a-z0-9] y no las especifique como si tuvieran un caso particular (defina sin citar). Luego, puede consultarlos como desee sin comillas para siempre. Si usted u otra persona decidió que era realmente importante tener nombres de tablas con espacios o en caso de camello, ¡diviértase citando en todas partes!
Matt
Punto bien tomado Matt ... Supongo que me acabo de acostumbrar a CamelCase de alguna manera, ha pasado mucho tiempo (más de 20 años) ... En realidad, el problema no está en las citas dobles (sí, sería más fácil sin él), pero el verdadero dolor es tener que escapar de ellos en cuerdas. No vi venir esto hasta que puse C ++ y pg juntos. ¡Gracias de todos modos por sus aportes!
itsols
9
INSERT INTO "imageTagBusinessMainCategory"
("businessMainCategory")
VALUES
('auto dealer')

EDITAR: se agregaron comillas dobles alrededor del nombre de la columna

Cachondo
fuente
1
Hola Gracias. que da este error:ERROR: ERROR: column "businessmaincategory" of relation "imageTagBusinessMainCategory" does not exist
1252748
Parece que también necesita poner el nombre de la columna entre comillas dobles. Una de las razones por las que los nombres de tablas de mayúsculas y minúsculas en PostgreSQL son una mala idea.
David Faber
@DavidFaber sí, tienes razón. Sin embargo, hace que sea un poco difícil de leer ... ¿puedo usar guiones? ^^
1252748
1
@DavidFaber: personalmente creo que los identificadores que necesitan citar (por ejemplo, caso mixto) son una mala idea en cualquier DBMS
a_horse_with_no_name
1
Tenga en cuenta que en todas partes, EXCEPTO al crear el identificador, puede hacer referencia a él en mayúsculas y minúsculas y sin comillas. Entonces, thishasareallylongnamese puede acceder a la tabla nombrada usando select * from thisHasAReallyLongName.
Matt
4

Postgres, Oracle, etc. esperan que el nombre de la columna esté entre comillas si tienen mayúsculas y minúsculas. Por lo tanto, cree una convención de todo en mayúsculas o minúsculas para las columnas de su tabla o use comillas como sugirió David Faber

INSERT INTO "imageTagBusinessMainCategory"
("businessMainCategory")
VALUES
('auto dealer')
aleatoriedad
fuente