重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
序列數可以增加postgresql數據表的檢索速度,同時降低數據查詢時的資源消耗。那么如何在postgresql中創建序列數并且應用呢?下面我給大家分享一下。
從策劃到設計制作,每一步都追求做到細膩,制作可持續發展的企業網站。為客戶提供成都網站制作、網站設計、網站策劃、網頁設計、域名注冊、雅安服務器托管、網絡營銷、VI設計、 網站改版、漏洞修補等服務。為客戶提供更好的一站式互聯網解決方案,以客戶的口碑塑造優易品牌,攜手廣大客戶,共同發展進步。
工具/材料
pgAdmin4
創建序列數
首先打開pgAdmin4,展開postgresql數據庫,找到模式下面的public選項,如下圖所示
接下來在public下面右鍵單擊序列,然后點擊Create下面的sequence選項,如下圖所示
在彈出的創建Sequence界面中首先給序列數起一個名字,如下圖所示,注意都用英文
然后切換到Definition頁卡,定義一下序列的增加量,如下圖所示,其中maximum根據自己的需要進行設置
最后回到數據庫主界面,你會看到序列下面多出了一個項,這就是我們創建的序列數了,如下圖所示
在數據表中應用序列數
首先選中一個數據表,點擊右側的編輯按鈕,如下圖所示
在彈出的編輯界面中切換到Columns頁卡,點擊ID簽名的編輯按鈕,如下圖所示
最后在字段的編輯界面中切換到Variables選項卡,然后在Value列中通過nextval函數帶入剛才定義的序列數即可,如下圖所示
表分區是解決一些因單表過大引用的性能問題的方式,比如某張表過大就會造成查詢變慢,可能分區是一種解決方案。一般建議當單表大小超過內存就可以考慮表分區了。PostgreSQL的表分區有三種方式:
本文通過示例講解如何進行這三種方式的分區。
為方便,我們通過Docker的方式啟動一個PostgreSQL,可參考:《Docker啟動PostgreSQL并推薦幾款連接工具》。我們要選擇較高的版本,否則不支持Hash分區,命令如下:
先創建一張表帶有年齡,然后我們根據年齡分段來進行分區,創建表語句如下:
這個語句已經指定了按age字段來分區了,接著創建分區表:
這里創建了四張分區表,分別對應年齡是0到10歲、11到20歲、21到30歲、30歲以上。
接著我們插入一些數據:
可以看到這里的表名還是 pkslow_person_r ,而不是具體的分區表,說明對于客戶端是無感知的。
我們查詢也一樣的:
但實際上是有分區表存在的:
而且分區表與主表的字段是一致的。
查詢分區表,就只能查到那個特定分區的數據了:
類似的,列表分區是按特定的值來分區,比較某個城市的數據放在一個分區里。這里不再給出每一步的講解,代碼如下:
當我們查詢第一個分區的時候,只有廣州的數據:
哈希分區是指按字段取哈希值后再分區。具體的語句如下:
可以看到創建分區表的時候,我們用了取模的方式,所以如果要創建N個分區表,就要取N取模。
隨便查詢一張分區表如下:
可以看到同是SZ的哈希值是一樣的,肯定會分在同一個分區,而BJ的哈希值取模后也屬于同一個分區。
本文講解了PostgreSQL分區的三種方式。
代碼請查看:
先在本機安裝PostgreSQL數據庫,然后在開始菜單中找到該程序,雙擊并打開該數據庫。
找到數據庫服務器點擊要加表的數據庫,將鼠標移到"數據表"后,點擊鼠標右鍵 ,出現如下圖的對話框,點擊"新數據表"。
彈出"新數據表"的對話框后,如下圖1,在名稱中輸入表的名字,擁有人按照默認的選擇就好,表空間是指表存放的位置,最好選擇數據庫名稱,注釋中最好要填寫,便于后續的閱讀,填寫完后效果如下圖2。
在填寫好屬性信息后,點擊上方菜單的"字段",如下圖1標紅的位置。這里是用來為新建的表增加字段使用的。點擊"新增",出現"新字段"的屬性對話框如下圖2,填寫相關的屬性信息如下圖3,點擊"確定"后退出對話框。
字段新增之后,必須在為該表添加約束,為表增加一個屬性便于索引。對話框如下圖1,點擊"新增"彈出對話框,切換到"字段",如下圖2,選擇字段,點擊"新增”就退出主鍵的對話框
到這里為止,表的新建已經完成,點擊"確定"就可以正常退出,如下圖1.。這時在數據表那邊就可以看到新增的表了如下圖2。到這里為止就可以正常的使用該表。
1. 查詢表名稱
在psql狀態下查詢表名稱:\dt
SQL方式查看表名稱:
SELECT?tablename?FROM?pg_tables;
SELECT ? viewname ? FROM ? pg_views ?
WHERE ? ? schemaname ='public'
PostgreSQL獲取數據庫中所有view名?視圖
SELECT ? viewname ? FROM ? pg_views
WHERE ? ? schemaname ='public'
2. 查詢表結構
在psql狀態下查詢表結構 \d?tablename
SQL方式查看表結構
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;
擴展資料:
PostgreSQL存儲系統是由以下幾個子模塊所構成的:
1)頁面管理子模塊:對PostgreSQL緩沖區頁面的組織結構進行定義以及提供頁面操作的方法。
2)緩沖區管理子模塊:管理PostgreSQL的緩沖區,包括本地緩沖區和共享緩沖區。
3)存儲設備管理子模塊:數據庫記錄是存儲在存儲介質上的,存儲設備管理子模塊將屏蔽不同物理存儲設備(塊設備,流設備)接口函數的差異,向上層緩沖區管理子模塊提供統一的訪問接口函數。
4)文件管理子模塊:一般的操作系統對一個進程允許打開的文件數是有限制的,而PostgreSQL服務器有些時候需要打開的文件數是很多的,因此PostgreSQL文件管理子模塊自身為了突破這個瓶頸,封裝了文件的讀寫操作。
最近老板又來了一個新需求,需要寫一個函數動態返回一個臨時視圖(即視圖的名字和結構都不確定),研究后發現沒辦法這樣做,只能退而求其次,用函數創建一個臨時視圖,結果還是不出意外的遇到一些坑。
Postgresql 中的臨時表、臨時視圖具有會話隔離性,而我一開始以為是事務隔離的,結果收獲了一大堆視圖已存在的報錯。同一個會話中能看到之前定義的臨時表、臨時視圖,以及臨時表中的數據,會話退出后都隨之消失。
創建臨時表時加上on commit drop,即可讓臨時表在事務結束后自動刪除。但此方法不能用于臨時視圖!!!