我正在尝试从包含JSON转储的CSV文件将一些数据存入我的Postgres数据库。只要它是字符串就可以,但我希望我的包含时间戳的字符串作为时间戳存储在Postgres中。因此,我需要对registerdate和dateofbirth两个字段进行一些转换。以下代码有效,除了日期转换行...有没有什么线索可以成功地将下面的两个字符串转换为时间戳:
在mongo_users中的数据格式:
CREATE TABLE users (
id SERIAL,
mongo_id TEXT,
password VARCHAR(128),
firstname VARCHAR(200),
lastname VARCHAR(200),
dateofbirth TIMESTAMP,
registerdate TIMESTAMP,
displayname VARCHAR(200),
language VARCHAR(200),
country VARCHAR(200),
profilepicture VARCHAR(200),
backgroundpicture VARCHAR(200),
type VARCHAR(200),
sex VARCHAR(6),
offlinemode BOOLEAN,
email VARCHAR(200),
friends VARCHAR(255)[]
);
INSERT INTO users (mongo_id, password,firstname,lastname, dateofbirth, registerdate, displayname, language)
SELECT data->>'_id',
data->>'password',
data->>'firstName',
data->>'secondName',
to_timestamp(data->'dateOfBirth'->>'$date'), /*<------*/
to_timestamp(data->'registerDate'->>'$date'), /*<-------*/
data->>'displayName',
data->>'language'
FROM import.mongo_users;
在mongo_users中的数据格式:
{ "_id" : "1164", "password" : "aaa123123", "firstName" : "Adam", "secondName" : "Kowlalski", "dateOfBirth" : { "$date" : "2014-05-18T07:41:09.202+0200" }, "registerDate" : { "$date" : "2016-06-01T12:59:53.941+0200" }, "displayName" : "Adam Kowlalski", "language" : "nb", "country" : null, "profilePicture" : null, "backgroundPicture" : null, "type" : "USER", "sex" : "MALE", "offlineMode" : true, "email" : "bk_1164@test.email", "friends" : [ "KUE" ] }
db=# with j(b) as (values(jsonb '{ "$date" : "2016-06-01T12:59:53.941+0200" }')) select b->>'$date', timestamptz (b->>'$date') from j; ?column? | timestamptz ------------------------------+---------------------------- 2016-06-01T12:59:53.941+0200 | 2016-06-01 10:59:53.941+00 (1 row)
- Vao Tsun