105

Postgres テーブルに単純な挿入を行おうとしていますが、挿入しようとしている値が列名として解釈されているというエラーが表示されます

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

ここで、id は主キーとなるように設定され、自動インクリメントされ、null ではありません。これらは、phpPgAdmin でテーブルを設定したときにチェックしたボックスです。

ただし、このエラーが発生します:

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

ここで読んだように、テーブル名を二重引用符で囲みました。

そして、ここでDEFAULT読んだように、IDを自動インクリメントするために使用する必要があります。

何か案は?ありがとう!

4

4 に答える 4

202

'auto dealer'代わりに使用してください。PostgreSQL"は、識別子の引用符として解釈'し、文字列の引用符として解釈します。

また:

  • これが新しいプロジェクトの場合は、大文字と小文字が混在するテーブルを使用しないでください。後でフラストレーションの元になります。SQL ステートメントで大文字と小文字を区別せずに、識別子名を引用符で囲み、大文字と小文字を正しく区別する必要があります。

  • id/を指定する必要はありませんDEFAULT。すでに行っていることを実行するように求めています。columnName列にデフォルト値を入れたい場合は/を含める必要がある DBMS に会ったことがないDEFAULTので、この追加の KV ペアが、後でコードを読む人にとって何が起こっているのかを明確にすることにはならないと思います。 .

于 2012-09-14T16:32:41.667 に答える
11
INSERT INTO "imageTagBusinessMainCategory"
("businessMainCategory")
VALUES
('auto dealer')

編集:列名の周りに二重引用符を追加しました

于 2012-09-14T16:33:43.230 に答える
4

Postgres、Oracle などでは、大文字と小文字が混在している場合、列名を引用符で囲む必要があります。したがって、テーブルの列にすべて小文字またはすべて大文字の規則を作成するか、David Faber が提案したように引用符を使用してください

INSERT INTO "imageTagBusinessMainCategory"
("businessMainCategory")
VALUES
('auto dealer')
于 2015-04-21T06:48:03.763 に答える