ChatGPT解决这个技术问题 Extra ChatGPT

无法让简单的 PostgreSQL 插入工作

我正在尝试在 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")

我已经将我的表名放在双引号中,因为我应该阅读 here

并使用 DEFAULT 自动增加 id,因为我应该阅读 here

有任何想法吗?谢谢!

对“汽车经销商”使用单引号。
单引号。离开身份证。
@muratgu 给出错误:ERROR: ERROR: syntax error at or near "'imageTagBusinessMainCategory'" Position: 13
@PaulTomblin 你是什么意思“离开身份证”?谢谢!
我的意思是就像@Randy 的回答中显示的那样。除了看起来您还需要在列名周围加上双引号。

M
Matt

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

还:

如果这是一个新项目,请不要使用混合大小写表;这是后来沮丧的根源。不能在 SQL 语句中使用任何大小写,您必须同时引用标识符名称并正确区分大小写。

无需指定 id/DEFAULT,您是在要求它执行它已经完成的操作。如果您希望将默认值放入列中,我还没有遇到要求您包含 columnName/DEFAULT 的 DBMS,所以我认为这个额外的 KV 对不会让正在阅读您的任何人更清楚发生的事情稍后编码。


这给了我这个错误ERROR: ERROR: column "businessmaincategory" of relation "imageTagBusinessMainCategory" does not exist
您可能以混合大小写创建列,就像表名一样。如果是这种情况,您还必须引用列名。停止使用混合大小写命名,你会为大家省去很多痛苦。
@Matt我面临同样的问题,当我必须输入这些双引号时,尝试将 pg 与 C++ 一起使用是一件痛苦的事情。没有像某些设置这样的解决方法可以消除对这些引号的需求吗?
@itsols “也”的拳头子弹将消除对引号的需要;仅使用 [a-z0-9] 定义您的身份,并且不要将它们指定为具有任何特殊情况(定义不带引号)。然后,您可以随意引用它们,而无需永远使用引号。如果您或其他人认为使用空格或驼峰式命名的表名非常重要,请尽情享受引用!
点得好马特...我想我在某种程度上已经习惯了 CamelCase - 已经很长时间了(超过 20 年)...实际上问题不在于双引号(是的,这会更容易没有它),但真正的痛苦是不得不把它们串起来。直到我将 C++ 和 pg 放在一起,我才看到这一点。无论如何感谢您的投入!
D
David Faber
INSERT INTO "imageTagBusinessMainCategory"
("businessMainCategory")
VALUES
('auto dealer')

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


你好谢谢。这给出了这个错误:ERROR: ERROR: column "businessmaincategory" of relation "imageTagBusinessMainCategory" does not exist
听起来您也需要将列名放在双引号中。 PostgreSQL 中混合大小写的表名是一个坏主意的一个原因。
@DavidFaber 是的,你是对的。虽然有点难以阅读..我可以使用破折号吗? ^^
@DavidFaber:我个人认为需要引用的标识符(例如混合大小写)在任何 DBMS 中都是一个坏主意
请记住,除了在创建标识符时,您可以在任何地方以混合大小写和不带引号的方式引用它。因此可以使用 select * from thisHasAReallyLongName 访问名为 thishasareallylongname 的表。
r
randomness

Postgres、Oracle 等希望列名在大小写混合时用引号引起来。因此,要么为你的表格列创建一个全部小写或全部大写的约定,要么按照 David Faber 的建议使用引号

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

C
Cristea

在我的案例中,我不得不将列名从 camelCase 'isAdmin' 更改为 snake_case 'is_admin'