PostgreSQL插入查询

3

我试图向日志表中插入一行数据,但出现了错误信息。><

log表的结构如下:

no         integer  NOT NULL nextval('log_no_seq'::regclass)    
ip         character varying(50)    
country    character varying(10)    
region     character varying(10)    
city       character varying(50)    
postalCode character varying(10)    
taken      numeric  
date       date

我的查询如下:
INSERT INTO log (ip,country,region,city,postalCode,taken,date) VALUES 
("24.24.24.24","US","NY","Binghamton","11111",1,"2011-11-09")

=> 错误:关系“log”的列“postalcode”不存在

第二次尝试查询:(不包含postalcode)

INSERT INTO log (ip,country,region,city,taken,date) VALUES 
("24.24.24.24","US","NY","11111",1,"2011-11-09")

=> 错误:列“24.24.24.24”不存在

我不知道我做错了什么...

PostgreSQL没有日期时间类型吗?(2011-11-09 11:00:10)


2
PostgreSQL有一个日期时间类型,称为timestamp。此外,该产品的名称是PostgreSQL,而不是Postgre。如果要缩短它的名称,应该使用Postgres(这实际上是它在获得SQL支持之前的名称)。 - derobert
2
双引号用于引用标识符(例如表和列名),单引号用于字符串字面量。 - mu is too short
1
人们在MySQL上学习时,时间戳最初被定义为自动更新最新时间戳(如果它是第一个时间戳列)。后来意识到他们使用了SQL保留关键字和类型来执行其他任务,MySQL为了保持向后兼容性,需要一个不自动更新的时间戳类型字段,因此他们发明了datetime作为一种类型。 SQL规范定义了Timestamp和带有时区的timestamp类型。 Datetime是MySQL的创造。但愿他们至少在很久以前就颠倒了这些含义... - Scott Marlowe
3个回答

11

尝试使用单引号(例如 '2011-11-09')


2
同时:不要使用 MixedCase。总有一天它会反噬你。另外:date 是一个保留字(类型名),不要使用它,即使它似乎有效。 - wildplasser
是的,那是很好的建议。postalCode错误可能已经是混合大小写引起的问题。 - C. Ramseyer

5
PostgreSQL有一个“datetime”类型:timestamp。请在此处阅读手册。
如果您想要标识符“原样”,则使用双引号""。最好像@wildplasser建议的那样永远不要使用它们。
字符串文字用单引号''括起来。
首先阅读词法结构章节。它非常详细。 :)

2
尝试按照以下方式重写:

INSERT INTO log (ip,country,region,city,"postalCode",taken,date) VALUES ('24.24.24.24','美国','纽约','宾汉姆顿','11111',1,'2011-11-09');

当您在列名中使用混合大小写或保留字(如“column”,“row”等)时,必须使用双引号而不是值,其中必须使用单引号,正如您在示例中所看到的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接