bash shell脚本访问PostgreSQL的三种方式
bash腳本里有三種方式訪問PostgreSQL數(shù)據(jù)庫
但前提是要設(shè)置密碼文件。當(dāng)然對于有系統(tǒng)對應(yīng)賬戶的數(shù)據(jù)庫角色可以繞過密碼登錄環(huán)節(jié),如
| 1 | $ sudo -u postgres psql |
或
| 1 2 | $ sudo su - postgres $ psql |
但是對于沒有系統(tǒng)賬戶對應(yīng)的數(shù)據(jù)庫角色,如要使用腳本登錄則必須使用PostgreSQL密碼文件
- heredoc方式
heredoc是一種很常用的方式,在bash環(huán)境下還可以使用變量替換,用法示例
1 2 3 psql -U ${role} -h ${host} -d mydb << EOF ????CREATE SCHEMA ${role}; EOF 也可以在循環(huán)語句中,向數(shù)據(jù)庫批量插入數(shù)據(jù),類似
1 2 3 4 5 6 for ... do psql -U ${role} -h ${host} -d mydb << EOF ????INSERT INTO ${table} VALUES(${value1},${value2},...); EOF done 但這種方式,每次插入一條語句都重新登錄一次數(shù)據(jù)庫,效率肯定不咋地。
UPDATE(05/05/2014):既然可以使用變量替換,可以將所有插入語句組合到一個(gè)變量中,然后就可以在一次登錄中批量插入數(shù)據(jù)了。還可以用以下方式來獲取查詢結(jié)果
1 2 3 4 5 result=`psql -U role -h localhost -d mydb << EOF ????SELECT * FROM products; EOF` echo ${result} - 使用psql命令行選項(xiàng)-f執(zhí)行sql腳本文件
1 psql -U ${role} -h ${host} -d mydb -f ${scriptname} - 使用psql命令行選項(xiàng)-c執(zhí)行SQL語句或psql命令
psql的-c選項(xiàng)可以指定SQL語句或者psql命令,但二者不能混合,除非使用管道。如果命令參數(shù)中有多條SQL語句,則它們在一個(gè)事務(wù)里執(zhí)行,除非使用BEGIN/COMMIT明確的指定事務(wù)。這與交互式使用psql終端不同,如果不明確指定事務(wù),則每條SQL屬于一個(gè)單獨(dú)的事務(wù)并自動(dòng)提交。只有最后一條SQL語句的結(jié)果被返回。
詳見psql(1)。
可以看出,雖然有三種方式,但其實(shí)都是利用了PostgreSQL提供的外部命令psql,所以更復(fù)雜的數(shù)據(jù)庫操作可以考慮使用Python
P.S.
事實(shí)證明用bash腳本插入大量數(shù)據(jù),其效率相當(dāng)?shù)拖?#xff0c;3510行的兩個(gè)簡單字段的數(shù)據(jù)竟然用了4分多種。
===
評斷一個(gè)國家的品格,不僅要看它培養(yǎng)了什么樣的人民,還要看它的人民選擇對什么樣的人致敬,對什么樣的人追懷。 —— 約翰·肯尼迪
原鏈接:http://openwares.net/database/bash_access_postgresql.html
總結(jié)
以上是生活随笔為你收集整理的bash shell脚本访问PostgreSQL的三种方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: inline用法详解
- 下一篇: 详解SQL中drop、delete和tr