列是不带时区的时间戳types,但expression式的types是整数
我得到像下面的错误信息,当我创build这个表就像其他人设置列时间戳timestamp without time zone NOT NULL
,但是当我试图插入2015-08-16 18:51:05
到这张表,然后我得到错误,但其他表是工作,为什么以及如何解决呢?
CREATE TABLE IF NOT EXISTS "UserForgetPasswordPending"( "UserForgetPasswordPendingId" SERIAL NOT NULL, "Email" varchar(50) NOT NULL, "TokenTimestamp" timestamp without time zone NOT NULL, "Token" varchar(100) NOT NULL, PRIMARY KEY ("UserForgetPasswordPendingId") ); ALTER TABLE "UserForgetPasswordPending" OWNER TO db_admin;
错误
[error: column "TokenTimestamp" is of type timestamp without time zone but expression is of type integer] name: 'error', length: 216, severity: 'ERROR', code: '42804', detail: undefined, hint: 'You will need to rewrite or cast the expression.',
插
var utc = moment(new Date()).unix(); var tokenTimestamp = moment.unix(utc).format('YYYY-MM-DD HH:mm:ss'); var upsertUserForgetPasswordPending = function(userEmail, tokenTimestamp, token) { return new Promise(function (fulfill, reject){ var queryInsert = 'INSERT INTO "UserForgetPasswordPending" ("Email","TokenTimestamp","Token") SELECT $1,2,$3'; var queryUpsert = 'UPDATE "UserForgetPasswordPending" SET "TokenTimestamp" = $2, "Token" = $3 WHERE "Email" = $1'; var query = 'WITH upsert AS ('+queryUpsert+' RETURNING *) '+queryInsert+' WHERE NOT EXISTS (SELECT * FROM upsert)'; console.log(tokenTimestamp); dbClient.query(query, [userEmail,tokenTimestamp,token], function(error, result) { if (error) { reject(error); } else { fulfill(result); } }); }); };
这是因为您正在将整数数据插入time stamp
列。
更正以下语法:
var queryInsert = 'INSERT INTO "UserForgetPasswordPending ("Email","TokenTimestamp","Token") SELECT $1,2,$3';
在上面的查询中,您select2
为TokenTimestamp
,这就是为什么你得到这个错误。
你应该用一些date时间格式replace2
yyyy-mm-dd hh:mm:ss
。
例如: '2015-08-07 05:00:01'