2013-07-28 60 views
0

的表变更的SQL是:PostgreSQL的INSERT查询时间戳返回错误42601字第191

CREATE TABLE changesets 
    (
     changeset_id bigint NOT NULL, 
     user_id integer NOT NULL, 
     created_at timestamp with time zone, 
     closed_at timestamp with time zone, 
     open boolean, 
     min_lat double precision, 
     min_lon double precision, 
     max_lat double precision, 
     max_lon double precision, 
     CONSTRAINT pk_changeset PRIMARY KEY (changeset_id) 
    ) 
    WITH (
     OIDS=FALSE 
    ); 
    ALTER TABLE changesets 
     OWNER TO postgres; 

我试图运行查询:

INSERT INTO changesets (changeset_id,user_id,open,min_lat,min_lon,max_lat,max_lon,created_at,closed_at) 
SELECT 16465146,1315463,false,27.6785105,85.3408257,27.6849711,85.350291,2013-06-08T06:29:51Z,2013-06-08T06:32:52Z 
WHERE NOT EXISTS (SELECT * FROM changesets WHERE changeset_id=16465146); 

但它引发错误:

ERROR: syntax error at or near ":" 
LINE 1: ...5105,85.3408257,27.6849711,85.350291,2013-06-08T06:29:51Z,20... 
                  ^

********** Error ********** 

ERROR: syntax error at or near ":" 
SQL state: 42601 
Character: 191 

如果我删除了created_at,closed_at目标列IND其时间戳-VA从SQL中取出2013-06-08T06:29:51Z,2013-06-08T06:32:52Z,然后sql成功执行。

这个SQL有什么问题?是否有问题: - 时间戳?

感谢,

回答

1

通时间戳作为字符串文字
参考documentation

尽量此插入:

INSERT INTO changesets 
(changeset_id,user_id,open,min_lat,min_lon,max_lat,max_lon,created_at,closed_at) 
SELECT 16465146,1315463,false,27.6785105,85.3408257,27.6849711,85.350291, 
     '2013-06-08T06:29:51Z','2013-06-08T06:32:52Z' 
WHERE NOT EXISTS (SELECT * FROM changesets WHERE changeset_id=16465146); 

甚至更​​好的给他们喜欢这里明确的类型:

INSERT INTO changesets (changeset_id,user_id,open,min_lat,min_lon,max_lat,max_lon,created_at,closed_at) 
SELECT 16465146,1315463,false,27.6785105,85.3408257,27.6849711,85.350291, 
TIMESTAMP WITH TIME ZONE '2013-06-08T06:29:51Z', 
TIMESTAMP WITH TIME ZONE '2013-06-08T06:32:52Z' 
WHERE NOT EXISTS (SELECT * FROM changesets WHERE changeset_id=16465146); 
+0

谢谢。两种方法都奏效。现在我正在阅读文档。 –

+0

请不要链接到旧版本的文档。使用'docs/current/static'而不是'docs/8.4/static'。 –