序列數(shù)可以增加postgresql數(shù)據(jù)表的檢索速度,同時(shí)降低數(shù)據(jù)查詢時(shí)的資源消耗。那么如何在postgresql中創(chuàng)建序列數(shù)并且應(yīng)用呢?下面我給大家分享一下。
從策劃到設(shè)計(jì)制作,每一步都追求做到細(xì)膩,制作可持續(xù)發(fā)展的企業(yè)網(wǎng)站。為客戶提供成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)站策劃、網(wǎng)頁設(shè)計(jì)、域名注冊、雅安服務(wù)器托管、網(wǎng)絡(luò)營銷、VI設(shè)計(jì)、 網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,以客戶的口碑塑造優(yōu)易品牌,攜手廣大客戶,共同發(fā)展進(jìn)步。
工具/材料
pgAdmin4
創(chuàng)建序列數(shù)
首先打開pgAdmin4,展開postgresql數(shù)據(jù)庫,找到模式下面的public選項(xiàng),如下圖所示
接下來在public下面右鍵單擊序列,然后點(diǎn)擊Create下面的sequence選項(xiàng),如下圖所示
在彈出的創(chuàng)建Sequence界面中首先給序列數(shù)起一個(gè)名字,如下圖所示,注意都用英文
然后切換到Definition頁卡,定義一下序列的增加量,如下圖所示,其中maximum根據(jù)自己的需要進(jìn)行設(shè)置
最后回到數(shù)據(jù)庫主界面,你會(huì)看到序列下面多出了一個(gè)項(xiàng),這就是我們創(chuàng)建的序列數(shù)了,如下圖所示
在數(shù)據(jù)表中應(yīng)用序列數(shù)
首先選中一個(gè)數(shù)據(jù)表,點(diǎn)擊右側(cè)的編輯按鈕,如下圖所示
在彈出的編輯界面中切換到Columns頁卡,點(diǎn)擊ID簽名的編輯按鈕,如下圖所示
最后在字段的編輯界面中切換到Variables選項(xiàng)卡,然后在Value列中通過nextval函數(shù)帶入剛才定義的序列數(shù)即可,如下圖所示
表分區(qū)是解決一些因單表過大引用的性能問題的方式,比如某張表過大就會(huì)造成查詢變慢,可能分區(qū)是一種解決方案。一般建議當(dāng)單表大小超過內(nèi)存就可以考慮表分區(qū)了。PostgreSQL的表分區(qū)有三種方式:
本文通過示例講解如何進(jìn)行這三種方式的分區(qū)。
為方便,我們通過Docker的方式啟動(dòng)一個(gè)PostgreSQL,可參考:《Docker啟動(dòng)PostgreSQL并推薦幾款連接工具》。我們要選擇較高的版本,否則不支持Hash分區(qū),命令如下:
先創(chuàng)建一張表帶有年齡,然后我們根據(jù)年齡分段來進(jìn)行分區(qū),創(chuàng)建表語句如下:
這個(gè)語句已經(jīng)指定了按age字段來分區(qū)了,接著創(chuàng)建分區(qū)表:
這里創(chuàng)建了四張分區(qū)表,分別對應(yīng)年齡是0到10歲、11到20歲、21到30歲、30歲以上。
接著我們插入一些數(shù)據(jù):
可以看到這里的表名還是 pkslow_person_r ,而不是具體的分區(qū)表,說明對于客戶端是無感知的。
我們查詢也一樣的:
但實(shí)際上是有分區(qū)表存在的:
而且分區(qū)表與主表的字段是一致的。
查詢分區(qū)表,就只能查到那個(gè)特定分區(qū)的數(shù)據(jù)了:
類似的,列表分區(qū)是按特定的值來分區(qū),比較某個(gè)城市的數(shù)據(jù)放在一個(gè)分區(qū)里。這里不再給出每一步的講解,代碼如下:
當(dāng)我們查詢第一個(gè)分區(qū)的時(shí)候,只有廣州的數(shù)據(jù):
哈希分區(qū)是指按字段取哈希值后再分區(qū)。具體的語句如下:
可以看到創(chuàng)建分區(qū)表的時(shí)候,我們用了取模的方式,所以如果要?jiǎng)?chuàng)建N個(gè)分區(qū)表,就要取N取模。
隨便查詢一張分區(qū)表如下:
可以看到同是SZ的哈希值是一樣的,肯定會(huì)分在同一個(gè)分區(qū),而BJ的哈希值取模后也屬于同一個(gè)分區(qū)。
本文講解了PostgreSQL分區(qū)的三種方式。
代碼請查看:
先在本機(jī)安裝PostgreSQL數(shù)據(jù)庫,然后在開始菜單中找到該程序,雙擊并打開該數(shù)據(jù)庫。
找到數(shù)據(jù)庫服務(wù)器點(diǎn)擊要加表的數(shù)據(jù)庫,將鼠標(biāo)移到"數(shù)據(jù)表"后,點(diǎn)擊鼠標(biāo)右鍵 ,出現(xiàn)如下圖的對話框,點(diǎn)擊"新數(shù)據(jù)表"。
彈出"新數(shù)據(jù)表"的對話框后,如下圖1,在名稱中輸入表的名字,擁有人按照默認(rèn)的選擇就好,表空間是指表存放的位置,最好選擇數(shù)據(jù)庫名稱,注釋中最好要填寫,便于后續(xù)的閱讀,填寫完后效果如下圖2。
在填寫好屬性信息后,點(diǎn)擊上方菜單的"字段",如下圖1標(biāo)紅的位置。這里是用來為新建的表增加字段使用的。點(diǎn)擊"新增",出現(xiàn)"新字段"的屬性對話框如下圖2,填寫相關(guān)的屬性信息如下圖3,點(diǎn)擊"確定"后退出對話框。
字段新增之后,必須在為該表添加約束,為表增加一個(gè)屬性便于索引。對話框如下圖1,點(diǎn)擊"新增"彈出對話框,切換到"字段",如下圖2,選擇字段,點(diǎn)擊"新增”就退出主鍵的對話框
到這里為止,表的新建已經(jīng)完成,點(diǎn)擊"確定"就可以正常退出,如下圖1.。這時(shí)在數(shù)據(jù)表那邊就可以看到新增的表了如下圖2。到這里為止就可以正常的使用該表。
1. 查詢表名稱
在psql狀態(tài)下查詢表名稱:\dt
SQL方式查看表名稱:
SELECT?tablename?FROM?pg_tables;
SELECT ? viewname ? FROM ? pg_views ?
WHERE ? ? schemaname ='public'
PostgreSQL獲取數(shù)據(jù)庫中所有view名?視圖
SELECT ? viewname ? FROM ? pg_views
WHERE ? ? schemaname ='public'
2. 查詢表結(jié)構(gòu)
在psql狀態(tài)下查詢表結(jié)構(gòu) \d?tablename
SQL方式查看表結(jié)構(gòu)
SELECT a.attnum,
a.attname AS field,
t.typname AS type,
a.attlen AS length,
a.atttypmod AS lengthvar,
a.attnotnull AS notnull,
b.description AS comment
FROM pg_class c,
pg_attribute a
LEFT OUTER JOIN pg_description b ON a.attrelid=b.objoid AND a.attnum = b.objsubid,
pg_type t
WHERE c.relname = 'udoc_saldiscount'
and a.attnum 0
and a.attrelid = c.oid
and a.atttypid = t.oid
ORDER BY a.attnum;
擴(kuò)展資料:
PostgreSQL存儲系統(tǒng)是由以下幾個(gè)子模塊所構(gòu)成的:
1)頁面管理子模塊:對PostgreSQL緩沖區(qū)頁面的組織結(jié)構(gòu)進(jìn)行定義以及提供頁面操作的方法。
2)緩沖區(qū)管理子模塊:管理PostgreSQL的緩沖區(qū),包括本地緩沖區(qū)和共享緩沖區(qū)。
3)存儲設(shè)備管理子模塊:數(shù)據(jù)庫記錄是存儲在存儲介質(zhì)上的,存儲設(shè)備管理子模塊將屏蔽不同物理存儲設(shè)備(塊設(shè)備,流設(shè)備)接口函數(shù)的差異,向上層緩沖區(qū)管理子模塊提供統(tǒng)一的訪問接口函數(shù)。
4)文件管理子模塊:一般的操作系統(tǒng)對一個(gè)進(jìn)程允許打開的文件數(shù)是有限制的,而PostgreSQL服務(wù)器有些時(shí)候需要打開的文件數(shù)是很多的,因此PostgreSQL文件管理子模塊自身為了突破這個(gè)瓶頸,封裝了文件的讀寫操作。
最近老板又來了一個(gè)新需求,需要寫一個(gè)函數(shù)動(dòng)態(tài)返回一個(gè)臨時(shí)視圖(即視圖的名字和結(jié)構(gòu)都不確定),研究后發(fā)現(xiàn)沒辦法這樣做,只能退而求其次,用函數(shù)創(chuàng)建一個(gè)臨時(shí)視圖,結(jié)果還是不出意外的遇到一些坑。
Postgresql 中的臨時(shí)表、臨時(shí)視圖具有會(huì)話隔離性,而我一開始以為是事務(wù)隔離的,結(jié)果收獲了一大堆視圖已存在的報(bào)錯(cuò)。同一個(gè)會(huì)話中能看到之前定義的臨時(shí)表、臨時(shí)視圖,以及臨時(shí)表中的數(shù)據(jù),會(huì)話退出后都隨之消失。
創(chuàng)建臨時(shí)表時(shí)加上on commit drop,即可讓臨時(shí)表在事務(wù)結(jié)束后自動(dòng)刪除。但此方法不能用于臨時(shí)視圖?。。?/p>
名稱欄目:postgresql表的簡單介紹
分享鏈接:http://jinyejixie.com/article4/dsdgiie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、網(wǎng)站設(shè)計(jì)公司、響應(yīng)式網(wǎng)站、品牌網(wǎng)站制作、App設(shè)計(jì)、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)