
Postgres使用体验:表中字段名最好都写成小写的
正在进行的一个项目中,有这样一个数据表:
-- Table: storeinfo
-- DROP TABLE storeinfo;
CREATE TABLE storeinfo
(
id serial NOT NULL,
version integer NOT NULL,
area_id bigint,
bigclass_id bigint,
smallclass_id bigint,
avatarimageurl text NOT NULL,
website text NOT NULL,
gpslat double precision NOT NULL,
gpslng double precision NOT NULL,
"queueNo" integer NOT NULL,
shopname text NOT NULL,
shopphonenumber text NOT NULL,
streetname text NOT NULL,
password text NOT NULL,
aqueuenextnumber integer,
bqueuenextnumber integer,
cqueuenextnumber integer,
dqueuenextnumber integer,
ticketnumberresettime interval,
lastticketnumberresettime timestamp without time zone,
"fullAddress" text,
CONSTRAINT storeinfo_pkey PRIMARY KEY (id),
CONSTRAINT fk_storeinfo_area FOREIGN KEY (area_id)
REFERENCES areainfo (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk_storeinfo_bigclass FOREIGN KEY (bigclass_id)
REFERENCES bigclassinfo (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk_storeinfo_smallclass FOREIGN KEY (smallclass_id)
REFERENCES smallclassinfo (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
OIDS=FALSE
);
ALTER TABLE storeinfo
OWNER TO postgres;
其中,有两个字段被写成了大小写混合的字段名字:
•queueNo
•fullAddress
这个项目的网页服务器是使用wt开发的,数据库访问部分使用了wt::dbo模块。
本座开发用的系统中,安装的postgres服务器版本为9.1.8。在这个系统中运行当前项目的网页应用程序时,一切正常。
实际部署用的服务器上安装的postgres服务器版本为8.4.18。在将项目中的网页应用程序部署到服务器上运行时,在访问上文所提到的数据表时,出现这样的错误:
[2014-Feb-20 04:23:09.561794] 3332 [/ pR7sMz6ig8vJaYPS] [error] "Wt: fatal error: Day of month value is out of range 1..31"
在不改动这个数据表结构的情况下,手动地随意修改一下这个数据表中的数据内容之后,再运行网页服务器,又是另一个不同的错误:
[2014-Feb-20 04:28:32.721063] 3332 [/ f1TKSxoLJYMGVX8V] [error] "Wt: fatal error: bad lexical cast: source type value could not be interpreted as target"
最后,将这个数据表中的 fullAddress 字段的名字改成 fulladdress ,全小写的,并且在网页服务器代码里也对应地修改了所引用的字段名字之后,运行就正常了。至于 queueNo ,它仍然是大小写混合的,为什么没有产生错误呢,这个,本座只能说是碰巧。
大小写混合的字段名导致postgres 8.4.18服务器在查询数据时产生了一些混乱。
由这次出错的经历得到的体验是: 在使用postgres数据库时,最好将所有字段名都写成全小写的,否则,如果妳坚持要带上一些大写字符的话,其行为将是 不确定的 。
伊能静
HxLauncher: Launch Android applications by voice commands