PostgreSQL實戰(12)高階特性

2021-09-13 01:49:13 字數 1993 閱讀 7318

1、with 查詢

先通過乙個簡單的 cte 示例了解 with 查詢,如下所示:

with t as ( 

select generate series(l,3)

select * from t;

generate_series

--------------------12

3(3 rows)

遞迴查詢使用 cte:

with 查詢的 乙個重要屬 性是 recursive ,使用 recursive 屬性可以引用自己的輸出,從而實現遞迴, 一般用於層次結構或樹狀結構的應用場景,乙個簡單的recursive 例子如下所示

with recursive t (x) as ( 

select 1

union

select x + 1

from t

where x < 5

)select sum(x) from t;

輸出結果為

sum

15 (1 row)

2、聚合函式

string_agg 函式:此函式語法如下所示:

string_agg(expression , delimiter)
簡單地說 string_agg 函式能將結果集某個欄位的所有行連線成字串,並用指定delimiter 分隔符分隔, expression 表示要處理的字元型別資料;引數的型別為(text, te~t)或(bytea, bytea ,函式返 回的型別同輸入引數型別一致, by tea 屬於 進製型別,使用情況不多,我們主 介紹 text 型別輸入引數,乙個例子:

mydb=> select * from city; 

country city

------------+--- ---

中國 | 台北

中國 |香港

中國 |上海

日本 東京

日本 大阪

(5 rows)

將city 段連線成 符串的**如下:

mydb=> select str ng agg c 工 ty ,』,』) from city; 

string_agg

台北,香港,上海,東京,大阪

(1 r ow )

array_agg 函式:array_agg 函式和 string_agg 函式類似,主要的區別為返回的型別為 陣列,陣列資料型別同輸入 引數資料型別 一致, array_agg 函式支援兩種語 第一種如下

array_agg (expression ) 輸入引數為任何非陣列型別
輸入 數可以是任何非陣列型別,返回的結果是一維陣列 array_agg 函式將結果集某個欄位的所有行連線成陣列,例如執行以下 詢:

mydb=> select coutry array_agg(city) from city group by country; 

country array_agg

-- + ------

日本 | {東京 大阪}

中國 | {台北 香港 上海}

第二種 array_agg 語法如下所示:

array_agg (expression ) 輸入引數為任何陣列型別
返回型別為多維陣列:例如:

資料如下所示:

select * from test_aray;

id-------------------------

(2 rows)

使用 array_agg 函式 如下

mydb=> select array_ agg(id) from test_arra y3 ;

array_agg

} (1 r ow )

PostgreSQL 內建高可用方案

注意 以下內容翻譯與postgresql 10.3 高可用篇 是sdf 修改過的乙個檔案系統複製的版本 若乙個電腦的檔案系統發生變化,則這些改變會被映象複製到其他所有的檔案系統中。唯一的約束是 映象複製的時候必須確保 從庫和要複製的檔案系統已經保持一致,尤其是 往從庫 寫操作的時候必須是和往主庫寫是...

高併發實戰

參考書籍netty,redis,zookeeper高併發實戰 作者 尼恩 鏈結 netty是jboss提供的乙個j a開源框架,是基於nio的客戶端 伺服器程式設計框架,它既能開發高併發,高可用,高可靠性的網路伺服器程式,也可以開發高可用,高可靠的客戶端程式 乙個可以快速儲存的記憶體資料庫,redi...

Postgresql12主從配置及切換

一 主從安裝 1 依據 centos7安裝最新版postgresql 操作,注意個別細節選擇主從配置 2 注意 從伺服器只能查詢,不能寫入 3 主庫ip 103,備庫ip 104 二 主伺服器 1 新增pg用於同步的使用者名稱 su postgres psql 建立具有複製流操作的使用者 repli...