einfache PostgreSQL-Einfügung kann nicht funktionieren

82

Ich versuche, eine einfache Einfügung in eine Postgres-Tabelle vorzunehmen, erhalte jedoch die Fehlermeldung, dass der Wert, den ich einzufügen versuche, als Spaltenname interpretiert wird

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

Wobei id als Primärschlüssel eingerichtet ist und automatisch inkrementiert wird und nicht null. Dies sind die Kästchen, die ich angekreuzt habe, als ich die Tabelle in phpPgAdmin eingerichtet habe.

Ich erhalte jedoch diesen Fehler:

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

Ich habe meinen Tabellennamen in doppelte Anführungszeichen gesetzt, wie ich hier gelesen habe.

Und verwendet, DEFAULTum die ID automatisch zu erhöhen, wie ich hier gelesen habe, sollte ich.

Irgendwelche Ideen? Vielen Dank!

1252748
quelle
13
Verwenden Sie einfache Anführungszeichen für "Autohändler".
Muratgu
2
Einzelzitate. Lass den Ausweis weg.
Paul Tomblin
@ Muratgu, die den Fehler gibt:ERROR: ERROR: syntax error at or near "'imageTagBusinessMainCategory'" Position: 13
1252748
@PaulTomblin wie meinst du "lass die ID weg"? Vielen Dank!
1252748
Ich meine, wie es in @ Randys Antwort zeigt. Außer es sieht so aus, als ob Sie auch doppelte Anführungszeichen um den Spaltennamen benötigen.
Paul Tomblin

Antworten:

165

Verwenden Sie 'auto dealer'stattdessen. PostgreSQL interpretiert "als Anführungszeichen für Bezeichner, 'als Anführungszeichen für Zeichenfolgen.

Ebenfalls:

  • Wenn dies ein neues Projekt ist, verwenden Sie keine gemischten Falltabellen. es ist später eine Quelle der Frustration. Anstatt einen beliebigen Fall in Ihren SQL-Anweisungen verwenden zu können, müssen Sie sowohl den Bezeichnernamen angeben als auch den Fall korrekt angeben.

  • Es ist nicht erforderlich, id/ anzugeben DEFAULT. Sie fordern es auf, das zu tun, was es bereits getan hätte. Ich habe nicht ein DBMS erfüllt , die Sie einschließen erfordert columnName/ , DEFAULTwenn Sie es möchten in der Spalte den Standardwert setzen, ich dies so glaube nicht , dass zusätzliche KV Paar geht zu machen , was einem klareren geschieht Code zu lesen später .

Matt
quelle
das gibt mir diesen FehlerERROR: ERROR: column "businessmaincategory" of relation "imageTagBusinessMainCategory" does not exist
1252748
1
Sie haben die Spalte wahrscheinlich in gemischter Groß- und Kleinschreibung erstellt, genau wie der Tabellenname. In diesem Fall müssen Sie auch den Spaltennamen angeben. Verwenden Sie keine gemischten Groß- und Kleinschreibung mehr, und Sie sparen allen viel Schmerz.
Matt
@Matt Ich habe das gleiche Problem und der Versuch, pg mit C ++ zu verwenden, ist ein Schmerz, wenn ich diese doppelten Anführungszeichen eingeben muss. Gibt es nicht eine Problemumgehung wie eine Einstellung, die die Notwendigkeit dieser Anführungszeichen beseitigt?
Itsols
@itsols Faustkugel des "Also" würde die Notwendigkeit für die Anführungszeichen beseitigen; Definieren Sie Ihre Identitäten nur mit [a-z0-9] und geben Sie nicht an, dass sie einen bestimmten Fall haben (definieren Sie ohne Anführungszeichen). Dann können Sie sich ohne Anführungszeichen für immer auf sie beziehen. Wenn Sie oder jemand anderes entschieden haben, dass es wirklich wichtig ist, Tabellennamen mit Leerzeichen oder im Fall eines Kamels zu haben, haben Sie Spaß daran, überall zu zitieren!
Matt
Gut gemacht, Matt ... Ich glaube, ich habe mich gerade in gewisser Weise an CamelCase gewöhnt - es ist lange her (über 20 Jahre) ... Eigentlich liegt das Problem nicht in doppelten Anführungszeichen (ja, es wäre einfacher ohne es), aber der wahre Schmerz besteht darin, ihnen in Fäden zu entkommen. Ich habe das nicht kommen sehen, bis ich C ++ und pg zusammengefügt habe. Trotzdem danke für deine Beiträge!
Itsols
9
INSERT INTO "imageTagBusinessMainCategory"
("businessMainCategory")
VALUES
('auto dealer')

BEARBEITEN: Um den Spaltennamen wurden doppelte Anführungszeichen hinzugefügt

Geil
quelle
1
Hallo danke. das gibt diesen Fehler:ERROR: ERROR: column "businessmaincategory" of relation "imageTagBusinessMainCategory" does not exist
1252748
Klingt so, als müssten Sie den Spaltennamen auch in doppelte Anführungszeichen setzen. Ein Grund, warum gemischte Tabellennamen in PostgreSQL eine schlechte Idee sind.
David Faber
@ DavidFaber Ja, du hast recht. macht es ein bisschen schwierig zu lesen .. kann ich Bindestriche verwenden? ^^
1252748
1
@ DavidFaber: Ich persönlich denke, dass Bezeichner, die zitiert werden müssen (z. B. gemischte Groß- und Kleinschreibung), in jedem DBMS eine schlechte Idee sind
a_horse_with_no_name
1
Beachten Sie, dass Sie beim Erstellen des Bezeichners überall außer in Anführungszeichen und ohne Anführungszeichen darauf verweisen können. Auf die genannte Tabelle thishasareallylongnamekonnte also mit zugegriffen werden select * from thisHasAReallyLongName.
Matt
4

Postgres, Oracle usw. erwarten, dass der Spaltenname in Anführungszeichen steht, wenn sie Groß- und Kleinschreibung haben. Erstellen Sie also entweder eine Konvention aller Small- oder Caps für Ihre Tabellenspalten oder verwenden Sie Anführungszeichen, wie von David Faber vorgeschlagen

INSERT INTO "imageTagBusinessMainCategory"
("businessMainCategory")
VALUES
('auto dealer')
Zufälligkeit
quelle