Postgres以內部格式存儲時間戳,當您讀取它時,它會以您請求的格式顯示它。
knex_test=# update accounts set created_at = '2017-04-20T16:33:56.774Z'; UPDATE 47
knex_test=# select created_at from accounts where id = 3;
created_at
----------------------------
2017-04-20 19:33:56.774+03
(1 row)
knex_test=# \d accounts
Table "public.accounts"
Column | Type | Modifiers
------------+--------------------------+-------------------------------------------------------------
id | bigint | not null default nextval('test_table_one_id_seq'::regclass)
last_name | character varying(255) |
email | character varying(255) |
logins | integer | default 1
about | text |
created_at | timestamp with time zone |
updated_at | timestamp with time zone |
phone | character varying(255) |
Indexes:
"test_table_one_pkey" PRIMARY KEY, btree (id)
"test_table_one_email_unique" UNIQUE CONSTRAINT, btree (email)
"test_table_one_logins_index" btree (logins)
knex_test=#
您可以更改時區的Postgres返回時間戳與
knex_test=# SET timezone = 'UTC';
SET
knex_test=# select created_at from accounts where id = 3;
created_at
----------------------------
2017-04-20 16:33:56.774+00
(1 row)
knex_test=#
您的連接,這裏是如何與knex做https://github.com/tgriesser/knex/issues/97
var knex = Knex.initialize({
client: 'pg',
connection: {
host : '127.0.0.1',
user : 'your_database_user',
password : 'your_database_password',
database : 'myapp_test',
},
pool: {
afterCreate: function(connection, callback) {
connection.query('SET timezone = timezone;', function(err) {
callback(err, connection);
});
}
}
});
我一直在玩這個和設置如你所描述的,針對實際數據庫的時區工作得很好,但試圖用'afterCreate'函數以編程方式執行,正如你所描述的那樣不能在我的遷移和種子上運行秒。有沒有辦法強制運行或檢查我是否不知道? – loganhuskins
我把它運行在我的遷移和種子上,但我還沒有合適的時區。我會繼續嘗試。 – loganhuskins
您應該能夠將該查詢作爲事務中的第一個查詢,然後在同一事務中的所有查詢都應具有正確的時區。此外,該設置完全不影響數據在postgres中的存儲/讀取方式,因此您不需要在遷移中進行設置。 –