无法使简单的 PostgreSQL 插入工作

我试图在 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,因为我已经阅读了 给你我应该。

Any ideas? 谢谢!

72563 次浏览

PostgreSQL 将 "解释为标识符的引号,将 '解释为字符串的引号。

另外:

  • 如果这是一个新项目,就不要使用混合大小写表; 它是一个 而不是能够使用任何情况下,以后的挫折来源 在您的 SQL 语句中,必须引用标识符名称并获取 情况正确

  • 不需要指定 id/DEFAULT,您是 要求它做它已经做过的事情。我还没有遇到一个数据库管理系统 这要求你包括 columnName/DEFAULT,如果你想 将默认值放在列中,所以我不认为这个额外的 KV 这一对将使读者更清楚地了解正在发生的事情 your code later.

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

EDIT: Added double-quotes around the column name

Postgres, Oracle etc expect the column name to be in quotes if they have mixed case. So either create a convention of all small or all caps for your table columns or use quotes as David Faber suggested

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

在我的案例中,我不得不将列名从 camelCase'isAdmin'改为 Snake _ case'is_admin'