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