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

125*_*748 62 sql postgresql

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

INSERT INTO "imageTagBusinessMainCategory"
(id, businessMainCategory)
VALUES
(DEFAULT, "auto dealer")
Run Code Online (Sandbox Code Playgroud)

其中id设置为主键,自动增量,而不是null.这些是我在phpPgAdmin中设置表时勾选的框.

我收到这个错误但是:

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

我把我的表名放在双引号中,正如我在这里读到的那样.

并且用于DEFAULT自动增加id,就像我在这里读到的那样.

有任何想法吗?谢谢!

Mat*_*att 133

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

也:

  • 如果这是一个新项目,请不要使用混合大小写表; 这是后来沮丧的根源.您必须引用标识符名称并使案例更正,而不是在SQL语句中使用任何大小写.

  • 没有必要指定id/ DEFAULT,你要求它做它本来已经做过的事情.我没有遇到需要你包含columnName/ 的DBMS,DEFAULT如果你想让它把默认值放在列中,所以我认为这个额外的KV对不会让以后阅读你的代码的人更清楚.

  • 您可能创建了大小写混合的列,就像表名一样。如果是这种情况,您还必须引用列名。不要在命名中使用混合大小写,你会为大家省去很多痛苦。 (2认同)

Ran*_*ndy 8

INSERT INTO "imageTagBusinessMainCategory"
("businessMainCategory")
VALUES
('auto dealer')
Run Code Online (Sandbox Code Playgroud)

编辑:在列名称周围添加双引号


ran*_*ess 5

Postgres、Oracle 等希望列名在大小写混合的情况下用引号引起来。因此,要么为表格列创建全部小写或全部大写的惯例,要么按照 David Faber 建议使用引号

INSERT INTO "imageTagBusinessMainCategory"
("businessMainCategory")
VALUES
('auto dealer')
Run Code Online (Sandbox Code Playgroud)