新聞中心
PostgreSQL開(kāi)源免費(fèi)企業(yè)級(jí)數(shù)據(jù)庫(kù)用著比較爽的地方有哪些?
1),PostgreSQL是通用型數(shù)據(jù)庫(kù)。
目前創(chuàng)新互聯(lián)建站已為上千多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁(yè)空間、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、通化縣網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
PG有著豐富的數(shù)據(jù)類(lèi)型(數(shù)值、字符、時(shí)間、布爾、貨幣、枚舉、網(wǎng)絡(luò)地址、JSONB等等)和索引類(lèi)型( B-tree、Hash、GiST、SP-GiST 、GIN 和 BRIN等 )??梢源鎯?chǔ)和計(jì)算大多數(shù)場(chǎng)景的業(yè)務(wù)數(shù)據(jù),如 ERP、交易系統(tǒng)、財(cái)務(wù)系統(tǒng)涉及資金、客戶(hù)等信息,數(shù)據(jù)不能丟失且業(yè)務(wù)邏輯復(fù)雜,選擇 PostgreSQL 作為數(shù)據(jù)底層存儲(chǔ),一是可以幫助您在數(shù)據(jù)一致性前提下提供高可用性,二是可以用簡(jiǎn)單的編程實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)邏輯 。適合各種OLTP和部分OLAP場(chǎng)景。
2),PostgreSQL數(shù)據(jù)庫(kù)包含許多第三方插件。
如PostGIS等可以直接在數(shù)據(jù)庫(kù)里進(jìn)行地理位置相關(guān)的gis類(lèi)存儲(chǔ)和運(yùn)算(LBS地理位置相關(guān)業(yè)務(wù)等O2O場(chǎng)景),其他的插件如Pg_stat_statements、uuid-ossp、pg_trgm、btree-gist插件、 pgcrypto加密等插件 。
3),中小型企業(yè)快速搭建 數(shù)據(jù)倉(cāng)庫(kù)和數(shù)據(jù)分析平臺(tái)(TB級(jí)別)
PostgreSQL 提供豐富的數(shù)據(jù)類(lèi)型和強(qiáng)大的計(jì)算能力,能夠幫助您更簡(jiǎn)單搭建數(shù)據(jù)庫(kù)倉(cāng)庫(kù)或大數(shù)據(jù)分析平臺(tái),為企業(yè)運(yùn)營(yíng)加分。
4),冷熱分離
針對(duì)流水類(lèi)的大表,PG可以使用分區(qū)表,線上保留熱數(shù)據(jù), 歷史 數(shù)據(jù)存放在分區(qū)表里或者OSS等冷數(shù)據(jù)平臺(tái),冷熱分離。
5),公有云支持度高如阿里云、騰訊云、華為云等公有云都有對(duì)應(yīng)的RDS-PG產(chǎn)品,開(kāi)箱即用,并提供技術(shù)支持。
OLTP:事務(wù)處理是PostgreSQL的本行
OLAP:ANSI SQL兼容,窗口函數(shù),CTE,CUBE等高級(jí)分析功能,任意語(yǔ)言寫(xiě)UDF,citus分布式插件
流處理:PipelineDB擴(kuò)展,Notify-Listen,物化視圖,規(guī)則系統(tǒng),靈活的存儲(chǔ)過(guò)程與函數(shù)編寫(xiě)
時(shí)序數(shù)據(jù):timescaledb時(shí)序數(shù)據(jù)庫(kù)插件,分區(qū)表,BRIN索引
空間數(shù)據(jù):PostGIS擴(kuò)展(殺手锏),內(nèi)建的幾何類(lèi)型支持,GiST索引。
搜索索引:全文搜索索引足以應(yīng)對(duì)簡(jiǎn)單場(chǎng)景;豐富的索引類(lèi)型,支持函數(shù)索引,條件索引
NoSQL:JSON,JSONB,XML,HStore原生支持,至NoSQL數(shù)據(jù)庫(kù)的外部數(shù)據(jù)包裝器
數(shù)據(jù)倉(cāng)庫(kù):能平滑遷移至同屬Pg生態(tài)的GreenPlum,DeepGreen,HAWK等,使用FDW進(jìn)行ETL
PostgreSQL學(xué)習(xí)系列—EXPLAIN ANALYZE查詢(xún)計(jì)劃解讀
PostgreSQL命令 EXPLAIN ANALYZE 是日常工作中了解和優(yōu)化SQL查詢(xún)過(guò)程所用到的最強(qiáng)大工具,后接如 SELECT ... , UPDATE ... 或者 DELETE ... 等SQL語(yǔ)句,命令執(zhí)行后并不返回?cái)?shù)據(jù),而是輸出查詢(xún)計(jì)劃,詳細(xì)說(shuō)明規(guī)劃器通過(guò)何種方式來(lái)執(zhí)行給定的SQL語(yǔ)句。
下面是從 Postgres Using EXPLAIN 提取的查詢(xún):
它生成的查詢(xún)計(jì)劃:
Postgres構(gòu)建了一個(gè)規(guī)劃節(jié)點(diǎn)的樹(shù)結(jié)構(gòu),以表示所采取的不同操作,其中root根和每個(gè) - 指向其中一個(gè)操作。在某些情況下, EXPLAIN ANALYZE 會(huì)提供除執(zhí)行時(shí)間和行數(shù)之外的額外執(zhí)行統(tǒng)計(jì)信息,例如上面例子中的 Sort 及 Hash 。除第一個(gè)沒(méi)有 - 的行之外的任何行都是諸如此類(lèi)的信息,因此查詢(xún)的結(jié)構(gòu)是:
每個(gè)樹(shù)分支代表子動(dòng)作,從里到外以確定哪個(gè)是“第一個(gè)”發(fā)生(盡管同一級(jí)別的節(jié)點(diǎn)順序可能不同)。
在 tenk_unique1 索引上執(zhí)行的第一個(gè)操作是 Bitmap Index Scan :
這對(duì)應(yīng)于SQL WHERE t1.unique1 100 。Postgres查找與條件 unique1 100 匹配的行位置。此處不會(huì)返回行數(shù)據(jù)本身。成本估算 (cost=0.00..5.04 rows=101 width=0) 意味著Postgres預(yù)期將“花費(fèi)” 任意計(jì)算單位的 5.04 來(lái)找到這些行。0.00是此節(jié)點(diǎn)開(kāi)始工作的成本(在這種情況下,即為查詢(xún)的啟動(dòng)時(shí)間)。 rows 是此索引掃描將返回的預(yù)估行數(shù), width 是這些返回行的預(yù)估大?。ㄒ宰止?jié)為單位)(0是因?yàn)檫@里只關(guān)心位置,而不是行數(shù)據(jù)的內(nèi)容)。
因?yàn)槭褂昧?ANALYZE 選項(xiàng)運(yùn)行 EXPLAIN ,所以查詢(xún)被實(shí)際執(zhí)行并捕獲了計(jì)時(shí)信息。 (actual time=0.049..0.049 rows=100 loops=1) 表示索引掃描執(zhí)行了1次( loops 值),結(jié)果返回了100行,實(shí)際時(shí)間是0 ..如果節(jié)點(diǎn)執(zhí)行了多次,實(shí)際時(shí)間是每次迭代的平均值,可以將該值乘以循環(huán)次數(shù)以獲取實(shí)際時(shí)間。基于成本的最小/最大時(shí)間的概念,范圍值也可能會(huì)有所不同。通過(guò)這些值,我們可以為該查詢(xún)生成一個(gè)成本比率,每個(gè)成本單位為0.049ms / 5.04單位≈0.01ms/單位。
索引掃描的結(jié)果將傳遞給 Bitmap Heap Scan 操作。在此節(jié)點(diǎn)中,Postgres將獲取別名為t1的tenk1表中行的位置,根據(jù) unique1 100 條件篩選并獲取行。
當(dāng)乘以之前計(jì)算的0.01值時(shí),我們可以得到成本預(yù)期的大概時(shí)間(229.20 - 5.07)*0.01≈2.24ms,同時(shí)每行實(shí)際時(shí)間為除以4后的結(jié)果:0.526ms。這可能是因?yàn)槌杀竟浪闶侨〉纳舷薅皇侨∷行枳x取的行,也或者因?yàn)镽echeck條件總是生效。
和表順序讀取行(a Seq Scan )相比, Bitmap Index Scan 和 Bitmap Heap Scan 關(guān)聯(lián)操作成本要昂貴得多,但是因?yàn)樵谶@種情況下只需要訪問(wèn)相對(duì)較少的行,所以關(guān)聯(lián)操作最終會(huì)變得更快。通過(guò)在獲取行之前將行按照物理順序排序來(lái)進(jìn)一步加速,這會(huì)將單獨(dú)獲取的成本降到最低。節(jié)點(diǎn)名稱(chēng)中的“Bitmap”完成了排序操作。
表掃描的結(jié)果(tenk1表中滿(mǎn)足 unique1 100 條件的那些行)將在讀取時(shí)被插入到內(nèi)存的哈希表中。正如我們從成本中看到的那樣,這根本不需要時(shí)間。
哈希節(jié)點(diǎn)包括散列桶(hash buckets)和批次數(shù)(batches)相關(guān)的信息,以及內(nèi)存使用峰值情況。如果批次 1,則還會(huì)包括未顯示的磁盤(pán)使用信息。內(nèi)存占用在100行* 244字節(jié)= 24.4 kB時(shí)是有意義的,它非常接近28kB,我們假定這是哈希鍵本身所占用的內(nèi)存。
接下來(lái),Postgres從別名為t2的tenk2表讀取所有的10000行,并根據(jù)tenk1表行的Hash檢查它們。散列連接意味著將一個(gè)表的行輸入到內(nèi)存中的散列(先前的操作中已構(gòu)建),之后掃描另一個(gè)表的行,并根據(jù)散列表探測(cè)其值以進(jìn)行匹配。在第二行可以看到“匹配”的條件, Hash Cond: (t2.unique2 = t1.unique2) 。請(qǐng)注意,因?yàn)椴樵?xún)是從tenk1和tenk2中選擇所有值,所以在散列連接期間每行的寬度加倍。
現(xiàn)在已經(jīng)收集了滿(mǎn)足條件的所有行,可以對(duì)結(jié)果集進(jìn)行排序 Sort Key: t1.fivethous 。
Sort節(jié)點(diǎn)包含排序算法 quicksort 相關(guān)的信息 ,排序是在內(nèi)存中還是在磁盤(pán)上完成(這將極大地影響速度),以及排序所需的內(nèi)存/磁盤(pán)空間量。
熟悉如何解讀查詢(xún)計(jì)劃會(huì)非常有助于優(yōu)化查詢(xún)。例如,Seq Scan節(jié)點(diǎn)通常表示添加索引的必要性,讀取速度可能要快得多。
翻譯并編輯,原文出處:
postgresql里面怎么得到兩個(gè)日期相差多少秒,或者多少分鐘
PostgreSQL中直接用兩個(gè)date(或者timestamp)值相減,其返回的是一個(gè)interval值,再有該interval值取出天數(shù)轉(zhuǎn)換成分鐘或秒數(shù),再加上interval中分鐘(和秒數(shù))部分的值就可以了。
示例SQL:
select?interval_value,?date_part('day',?interval_value)?as?day_value,?date_part('day',?interval_value)?*?24?*?60?+?date_part('minute',?interval_value)?as?minutes
from?(
select?(current_timestamp?-?to_timestamp('2013-08-21?13:23',?'yyyy-mm-dd?hh24:mi'))?as?interval_value
)?s;
網(wǎng)站欄目:postgresql計(jì)算的簡(jiǎn)單介紹
網(wǎng)站網(wǎng)址:http://www.dlmjj.cn/article/dscgcec.html