婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > PostgreSQL timestamp踩坑記錄與填坑指南

PostgreSQL timestamp踩坑記錄與填坑指南

熱門標(biāo)簽:重慶自動(dòng)外呼系統(tǒng)定制 地圖標(biāo)注和圖片名稱的區(qū)別 外呼調(diào)研系統(tǒng) 漯河外呼電話系統(tǒng) 海豐有多少商家沒(méi)有地圖標(biāo)注 辦公外呼電話系統(tǒng) 美容工作室地圖標(biāo)注 合肥公司外呼系統(tǒng)運(yùn)營(yíng)商 打電話智能電銷機(jī)器人授權(quán)

項(xiàng)目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()
})

不同時(shí)區(qū)to_timestamp查詢結(jié)果

測(cè)試輸入數(shù)據(jù)為1514736000(UTC時(shí)間2017-12-31 16:00:00,北京時(shí)間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官方文檔對(duì)timestamp的一個(gè)描述

詳見(jiàn):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進(jìn)行時(shí)間轉(zhuǎn)換且DB時(shí)區(qū)非UTC時(shí),寫入**timestamp without time zone**類型的COLUMN則會(huì)與預(yù)期結(jié)果不符。

不同Timezone/columnType查詢結(jié)果

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

據(jù)以上結(jié)果可判定:

使用pg查詢**timestamp without time zone**類型的COLUMN時(shí),會(huì)將數(shù)據(jù)庫(kù)存儲(chǔ)的時(shí)間當(dāng)做北京時(shí)間而非UTC時(shí)間,與數(shù)據(jù)庫(kù)時(shí)區(qū)沒(méi)有關(guān)系。

總結(jié)

網(wǎng)上類似問(wèn)題的解決辦法是將DB時(shí)區(qū)改為UTC+08。

原理:寫入DB的時(shí)間實(shí)際為北京時(shí)間,pg庫(kù)恰好是當(dāng)做北京時(shí)間讀取,所以時(shí)間戳就不會(huì)出問(wèn)題了。

假如應(yīng)用部署在不同的地域,使用timestamp without time zone存儲(chǔ)timestamp這樣的設(shè)計(jì)簡(jiǎn)直是災(zāi)難。

不要用timestamp without time zone存儲(chǔ)timestamp!

不要用timestamp without time zone存儲(chǔ)timestamp!

不要用timestamp without time zone存儲(chǔ)timestamp!

補(bǔ)充:pg查詢時(shí)間間隔(timestamp類型)

create_date timestamp(6) without time zone

1.從2015-10-12到2015-10-13 之間的4點(diǎn)到9點(diǎn)的數(shù)據(jù)

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;

結(jié)果:

2.2015-10-12五點(diǎn)的數(shù)據(jù)

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

結(jié)果:

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • PostgreSQL的generate_series()函數(shù)的用法說(shuō)明
  • Postgresql通過(guò)查詢進(jìn)行更新的操作
  • 如何為PostgreSQL的表自動(dòng)添加分區(qū)
  • postgresql 實(shí)現(xiàn)得到時(shí)間對(duì)應(yīng)周的周一案例
  • PostgreSQL的upsert實(shí)例操作(insert on conflict do)
  • PostgreSQL 字符串拆分與合并案例
  • 淺談PostgreSQL消耗的內(nèi)存計(jì)算方法

標(biāo)簽:晉城 蚌埠 株洲 來(lái)賓 珠海 衡陽(yáng) 烏海 錦州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PostgreSQL timestamp踩坑記錄與填坑指南》,本文關(guān)鍵詞  PostgreSQL,timestamp,踩坑,記錄,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PostgreSQL timestamp踩坑記錄與填坑指南》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于PostgreSQL timestamp踩坑記錄與填坑指南的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 博爱县| 金塔县| 黄陵县| 双城市| 凤城市| 巴青县| 诸城市| 班戈县| 项城市| 湾仔区| 伊宁市| 惠安县| 宁城县| 金溪县| 南康市| 临夏市| 铜梁县| 湘阴县| 新乡市| 军事| 昆明市| 上高县| 宁都县| 琼结县| 海伦市| 什邡市| 车致| 吉林市| 班玛县| 三亚市| 城口县| 沈阳市| 靖江市| 读书| 道真| 蓬莱市| 佛坪县| 双城市| 红河县| 平陆县| 济宁市|