无法获得简单的PostgreSQL插入工作

时间:2012-09-14 16:29:14

标签: sql 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")

我把我的表名用双引号括起来,因为我读过here我应该这样做。

并使用DEFAULT自动增加ID,因为我已阅读here我应该这样做。

有什么想法吗? 谢谢!

4 个答案:

答案 0 :(得分:114)

请改用'auto dealer'。 PostgreSQL将"解释为标识符的引号,'作为字符串的引号。

此外:

  • 如果这是一个新项目,请不要使用混合案例表;它是一个 后来沮丧的根源。而不是能够使用任何案例 在您的SQL语句中,您必须引用标识符名称并获取 案件正确。

  • 您无需指定id / DEFAULT 要求它做已经做过的事情。我还没有遇到过DBMS 如果您愿意,则需要包含columnName / DEFAULT 把默认值放在列中,所以我不认为这个额外的KV 对将使任何人阅读更清楚 你的代码稍后。

答案 1 :(得分:8)

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

编辑:在列名称

周围添加了双引号

答案 2 :(得分:3)

Postgres,Oracle等期望列名称如果它们具有混合大小写,则为引号。因此,要么为表格列创建所有小型或全部大写的约定,要么使用引号作为David Faber建议

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

答案 3 :(得分:0)

就我而言,我不得不将列名从 camelCase 'isAdmin' 更改为 snake_case 'is_admin'