使用来自流的 COPY 和 node-postgres 的 Postgres 日期
Postgres date using COPY from stream with node-postgres
我在 PostgreSQL 中有以下 table:
CREATE TABLE history (
request_date timestamp without time zone DEFAULT now() NOT NULL,
user_id uuid,
client_id character varying(255),
resource character varying(255) NOT NULL,
latency integer NOT NULL
);
我正在使用 node-postgres to perform a COPY FROM 任务。这是我目前所拥有的:
var pg = require('pg');
var copyFrom = require('pg-copy-streams').from;
var Readable = require('stream').Readable;
pg.connect(config.database.connection, function(err, client, done) {
var stream = client.query(copyFrom('COPY history FROM STDIN WITH NULL as \'null\''));
var rs = new Readable;
rs.push(new Date() + '\tnull\tnull\t"' + req.originalUrl + '"\t' + responseTime);
rs.push(null);
rs.on('error', done);
rs.pipe(stream).on('finish', done).on('error', function (err) {
console.log(err);
done();
});
});
但是我的日期(第一列)有问题,我不知道 Postgres 需要什么格式,我收到以下错误:
{ [error: time zone "gmt-0300" not recognized]
name: 'error',
length: 175,
severity: 'ERROR',
code: '22023',
detail: undefined,
hint: undefined,
position: undefined,
internalPosition: undefined,
internalQuery: undefined,
where: 'COPY history, line 1, column request_date: "Thu Feb 19 2015 09:51:47 GMT-0300 (ART)"',
file: 'datetime.c',
line: '926',
routine: 'DecodeDateTime' }
通过该日期的正确方法应该是什么?
new Date().toUTCString()
成功了:
rs.push(new Date().toUTCString() + '\tnull\tnull\t"' + req.originalUrl + '"\t' + responseTime);
然后就可以了:)
我在 PostgreSQL 中有以下 table:
CREATE TABLE history (
request_date timestamp without time zone DEFAULT now() NOT NULL,
user_id uuid,
client_id character varying(255),
resource character varying(255) NOT NULL,
latency integer NOT NULL
);
我正在使用 node-postgres to perform a COPY FROM 任务。这是我目前所拥有的:
var pg = require('pg');
var copyFrom = require('pg-copy-streams').from;
var Readable = require('stream').Readable;
pg.connect(config.database.connection, function(err, client, done) {
var stream = client.query(copyFrom('COPY history FROM STDIN WITH NULL as \'null\''));
var rs = new Readable;
rs.push(new Date() + '\tnull\tnull\t"' + req.originalUrl + '"\t' + responseTime);
rs.push(null);
rs.on('error', done);
rs.pipe(stream).on('finish', done).on('error', function (err) {
console.log(err);
done();
});
});
但是我的日期(第一列)有问题,我不知道 Postgres 需要什么格式,我收到以下错误:
{ [error: time zone "gmt-0300" not recognized]
name: 'error',
length: 175,
severity: 'ERROR',
code: '22023',
detail: undefined,
hint: undefined,
position: undefined,
internalPosition: undefined,
internalQuery: undefined,
where: 'COPY history, line 1, column request_date: "Thu Feb 19 2015 09:51:47 GMT-0300 (ART)"',
file: 'datetime.c',
line: '926',
routine: 'DecodeDateTime' }
通过该日期的正确方法应该是什么?
new Date().toUTCString()
成功了:
rs.push(new Date().toUTCString() + '\tnull\tnull\t"' + req.originalUrl + '"\t' + responseTime);
然后就可以了:)