PostgreSQLtimestamp有哪些坑要注意一下-創新互聯

這篇文章主要介紹PostgreSQL timestamp有哪些坑要注意一下,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

創新互聯建站是一家專業提供臨西企業網站建設,專注與網站設計制作、成都網站設計、H5建站、小程序制作等業務。10年已為臨西眾多企業、政府機構等服務。創新互聯專業網站建設公司優惠進行中。

項目Timezone情況

NodeJS:UTC+08

PostgreSQL:UTC+00

timestampTest.js
const { Client } = require('pg')
const client = new Client()
 
client.connect()
let sql = ``
client.query(sql, (err, res) => {
 console.log(err ? err.stack : res.rows[0].datetime)
 client.end()
})

不同時區to_timestamp查詢結果

測試輸入數據為1514736000(UTC時間2017-12-31 16:00:00,北京時間2018-01-01 00:00:00)

1、timezone=UTC

BEGIN;
SET TIME ZONE 'UTC';
SELECT to_timestamp(1514736000) as datetime;
END;

直接查詢:2017-12-31 16:00:00+00YES

pg查詢:2017-12-31T16:00:00.000ZYES

2、timezone=PRC

BEGIN;
SET TIME ZONE 'PRC';
SELECT to_timestamp(1514736000) as datetime;
END;

直接查詢:2018-01-01 00:00:00+08NO

pg查詢:2017-12-31T16:00:00.000ZYES

PostgreSQL官方文檔對timestamp的一個描述

詳見:8.5.1.3. Time Stamps

In a literal that has been determined to be timestamp without time zone, PostgreSQL will silently ignore any time zone indication. That is, the resulting value is derived from the date/time fields in the input value, and is not adjusted for time zone.

使用to_timestamp進行時間轉換且DB時區非UTC時,寫入**timestamp without time zone**類型的COLUMN則會與預期結果不符。

不同Timezone/columnType查詢結果

1、timezone=UTC,timestamp with timezone

BEGIN;
SET TIME ZONE 'UTC';
SELECT TIMESTAMP WITH TIME ZONE '2017-12-31T16:00:00+00' as datetime;
END;

直接查詢:2017-12-31 16:00:00+00YES

pg查詢:2017-12-31T16:00:00.000ZYES

2、timezone=UTC,timestamp without timezone

BEGIN;
SET TIME ZONE 'UTC';
SELECT TIMESTAMP '2017-12-31T16:00:00+00' as datetime;
END;

直接查詢:2017-12-31 16:00:00YES

pg查詢:2017-12-31T08:00:00.000ZNO

3、timezone=PRC,timestamp with timezone

BEGIN;
SET TIME ZONE 'PRC';
SELECT TIMESTAMP WITH TIME ZONE '2017-12-31T16:00:00+00' as datetime;
END;

直接查詢:2018-01-01 00:00:00+08YES

pg查詢:2017-12-31T16:00:00.000ZYES

4、timezone=PRC,timestamp without timezone

BEGIN;
SET TIME ZONE 'PRC';
SELECT TIMESTAMP '2017-12-31T16:00:00+00' as datetime;
END;

直接查詢:2017-12-31 16:00:00YES

pg查詢:2017-12-31T08:00:00.000ZNO

據以上結果可判定:

使用pg查詢**timestamp without time zone**類型的COLUMN時,會將數據庫存儲的時間當做北京時間而非UTC時間,與數據庫時區沒有關系。

總結

網上類似問題的解決辦法是將DB時區改為UTC+08。

原理:寫入DB的時間實際為北京時間,pg庫恰好是當做北京時間讀取,所以時間戳就不會出問題了。

假如應用部署在不同的地域,使用timestamp without time zone存儲timestamp這樣的設計簡直是災難。

不要用timestamp without time zone存儲timestamp!

不要用timestamp without time zone存儲timestamp!

不要用timestamp without time zone存儲timestamp!

補充:pg查詢時間間隔(timestamp類型)

create_date timestamp(6) without time zone

PostgreSQL timestamp有哪些坑要注意一下

1.從2015-10-12到2015-10-13 之間的4點到9點的數據

select * from schedule where create_date 
between to_date('2015-10-12','yyyy-MM-dd') 
and to_date('2015-10-13','yyyy-MM-dd')
and EXTRACT(hour from create_date) between 4 and 9;

結果:

PostgreSQL timestamp有哪些坑要注意一下

2.2015-10-12五點的數據

select * from schedule where hospital_id='syzyyadmin' and date_trunc('hour',create_date)=to_timestamp('2015-10-12 05','YYYY-MM-DD HH24')

結果:

PostgreSQL timestamp有哪些坑要注意一下

以上是“PostgreSQL timestamp有哪些坑要注意一下”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注創新互聯行業資訊頻道!

當前標題:PostgreSQLtimestamp有哪些坑要注意一下-創新互聯
鏈接地址:http://m.kartarina.com/article4/ccgpoe.html

成都網站建設公司_創新互聯,為您提供網站制作服務器托管用戶體驗軟件開發企業網站制作網站設計

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都做網站
主站蜘蛛池模板: 无码日韩精品一区二区三区免费| 日韩AV无码不卡网站| 国产午夜无码精品免费看| 丰满少妇人妻无码专区| 亚洲无码视频在线| 日韩精品中文字幕无码一区| 无码人妻精品一区二区三区9厂| 中文字幕丰满乱孑伦无码专区| 91精品久久久久久无码| 内射人妻少妇无码一本一道 | 无码人妻AⅤ一区二区三区| 色欲aⅴ亚洲情无码AV蜜桃| 亚洲va中文字幕无码久久 | 成人午夜亚洲精品无码网站| 亚洲一区二区无码偷拍| 亚洲av无码一区二区三区乱子伦 | 成人无码WWW免费视频| 久久美利坚合众国AV无码| 久久精品国产亚洲AV无码麻豆| 韩日美无码精品无码| a级毛片无码免费真人| 无码人妻一区二区三区免费手机| 亚洲av永久无码精品秋霞电影影院 | 成年免费a级毛片免费看无码| 2019亚洲午夜无码天堂| 久久久久久久亚洲Av无码| 久久无码专区国产精品s| 亚洲熟妇无码八AV在线播放| 国产真人无码作爱免费视频| 国产精品白浆无码流出| 免费a级毛片无码av| 无码欧精品亚洲日韩一区夜夜嗨 | 91精品无码久久久久久五月天| 亚洲日韩v无码中文字幕| 亚洲AV无码一区二区二三区软件| 精品久久久久久无码免费| 亚洲人成影院在线无码按摩店 | 日韩av无码久久精品免费| 日韩人妻无码精品一专区| 精品无码久久久久国产| 欲色aV无码一区二区人妻|