2012-09-14 35 views
36

我试图做一个简单的插入到一个Postgres的表,但我得到我想要插入值被视为列名不能得到简单的PostgreSQL的插入工作

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我应该。

任何想法? 谢谢!

+7

使用单引号。 – muratgu

+0

单引号。离开身份证。 –

+0

@muratgu给出了错误:'错误:错误:语法错误在''imageTagBusinessMainCategory'' 位置:13' – 1252748

回答

80

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

另外:

  • 如果这是一个新的项目,就是不使用大小写混合的表;这是后来挫折的根源。除了能够使用SQL语句中的任何一种情况外,您还必须引用标识符名称并获得正确的案例。

  • 有没有必要指定id/DEFAULT,你是 要求它做它已经做了什么。我还没有遇到一个DBMS ,这需要你包括columnName/DEFAULT如果你想它 把默认值放在列中,所以我不认为这对额外的KV 对将使事情更清楚地发生任何人以后阅读您的代码 。

+0

,这给了我这个错误'错误:错误:关系“imagemain”businessmaincategory“imageTagBusinessMainCategory” 不存在“# – 1252748

+1

您可能创建了列的混合大小写,就像表名。如果是这种情况,还必须引用列名。在命名过程中停止使用混合大小写,您将为每个人节省很多痛苦。 – Matt

+0

从混合大小写切换。很棒!谢谢! – 1252748

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

编辑:添加周围的列名

+1

嗨,谢谢。这给出了这个错误:'错误:错误:关系“imageTagBusinessMainCategory” 不存在的列“businessmaincategory”# – 1252748

+0

听起来像你需要把列名放在双引号中。 PostgreSQL中混合大小写表名称的一个原因是一个坏主意。 –

+0

@DavidFaber是的,你是对的。使阅读虽然有点困难..我可以使用破折号? ^^ – 1252748

0

Postgres的,甲骨文等双引号期望列名加引号,如果他们有混合的情况。因此,要么创建所有小或全部大写的约定您的表列或使用引号作为戴维·法伯建议“汽车经销商”

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