PostgreSQL 學習筆記

批量插入:

方式一:

insert into tb1_batch1(user_id,user_name) select user_id,user_name from user_ini;

 

方式二:

create table tb1_batch3(id int4,info text);

insert into tb1_batch3(id,info) values (1,'a'),(2,'b'),(3,'c');

 

方式二能減少和數據庫的交互,減少數據庫WAL(Write-Ahead Logging)日誌的生成,提升插入效率。

 

導入導出數據:

copy pguser.tb1_batch3 to 'd:\\1.txt';   //導出數據到D盤1.txt文件

copy pguser.tb1_batch3 from 'd:\\1.txt';  //導入數據到npas.tb1_batch3表,如果該表有數據,則追加寫入導入的數據內容。

 

 

Returning 返回修改的數據:

insert into tb1_batch3(id,info) values (1,'a') returning *; //返回插入的整行數據

insert into tb1_batch3(id,info) values (1,'a') returning id; //返回插入的id字段

 

returning *            返回操作的整行數據

returning 字段名字     返回操作的具體字段數據

 

數據抽樣

SYSTEM   方式 抽樣數據,隨機抽取表上數據塊上的數據,數據塊級別,適用於性能優先

insert into tb1_batch3(id,info) select n,n ||'_system_sample'

from generate_series(1,10000) n;

select * from tb1_batch3 TABLESAMPLE SYSTEM(0.1);//系統抽樣0.1%的數據

 

BERNOULLI 方式抽樣數據,隨機抽取數據行,性能比System方式低很多,適用於隨機性優先

select * from tb1_batch3 TABLESAMPLE BERNOULLI(0.01);

 

 

並行查詢相關

1,  max_worker_processes    設置系統支持的最大後臺進程數,默認8

2,  max_parallel_workers    設置系統支持的最大並行查詢進程數,默認8

3,  max_parallel_workers_per_gather  設置允許啓用的並行進程數,默認2,設置成0表示禁用並行查詢

4,  三個參數的配置大小關係:1 > 2 > 3

 

事務與併發控制

由於Postgresql內部將read uncommitted 設計爲和read commited一樣,所以不會產生髒讀。

髒讀,第一個事務讀取了第二個事務已經修改但還沒有提交的數據

不可重複讀,第一個事務讀取數據之後,被讀取數據被另一個已提交事務修改,再次讀取時發現數據已經被修改,兩次讀結果不一致

幻讀,一個事務兩次查詢結果不一致。

 

ANSI SQL標準的事務隔離級別:

Read uncommited 讀未提交,很少用於實際應用

Read commited 讀已提交,postgresql默認隔離級別

Repeatable read 可重複讀

Serializable 可序列化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章