105

我正在尝试在 postgres 表中进行简单的插入,但我收到一个错误,即我尝试插入的值被解释为列名

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

其中 id 设置为主键,自动递增,不为空。这些是我在 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/DEFAULT如果您希望它在列中放置默认值的 DBMS,所以我认为这个额外的 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 回答
0

在我的情况下,我不得不将列名从 camelCase 更改'isAdmin'为 snake_case 'is_admin'

于 2021-06-07T14:57:06.423 回答