批量插入:
方式一:
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 可序列化