bash shell指令碼訪問PostgreSQL的三種方式
bash指令碼里有三種方式訪問PostgreSQL資料庫
但前提是要設定密碼檔案。當然對於有系統對應賬戶的資料庫角色可以繞過密碼登入環節,如
1
|
$ sudo
-u postgres psql |
或
1
2
|
$ sudo
su - postgres $ psql |
但是對於沒有系統賬戶對應的資料庫角色,如要使用指令碼登入則必須使用PostgreSQL密碼檔案
- heredoc方式
heredoc是一種很常用的方式,在bash環境下還可以使用變數替換,用法示例
123psql -U ${role} -h ${host} -d mydb << EOF
CREATE SCHEMA ${role};
EOF
也可以在迴圈語句中,向資料庫批量插入資料,類似
123456for
...
do
psql -U ${role} -h ${host} -d mydb << EOF
INSERT INTO ${table} VALUES(${value1},${value2},...);
EOF
done
但這種方式,每次插入一條語句都重新登入一次資料庫,效率肯定不咋地。
UPDATE(05/05/2014):既然可以使用變數替換,可以將所有插入語句組合到一個變數中,然後就可以在一次登入中批量插入資料了。還可以用以下方式來獲取查詢結果
12345result=`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
相關文章
- Linux中執行Shell指令碼的方式(三種方法)Linux指令碼
- 【shell 指令碼】兩種登入方式指令碼
- Linux shell:執行shell指令碼的幾種方式Linux指令碼
- BASH Shell的指令碼程式設計(轉)指令碼程式設計
- shell 指令碼訪問oracle 寫法 (ZT)指令碼Oracle
- smarty中三種變數的訪問方式變數
- shell和bash指令碼命令學習指令碼
- shell中呼叫shell的三種方式&並行shell並行
- 執行Shell指令碼的方式指令碼
- C#中陣列的三種訪問方式C#陣列
- bash shell指令碼執行方法總結指令碼
- bash shell指令碼接受多個引數指令碼
- C++ 的三種訪問許可權與三種繼承方式C++訪問許可權繼承
- Bash Shell指令碼中的陣列使用例項指令碼陣列
- 執行Shell指令碼的方式(轉)指令碼
- SpringMVC訪問靜態資源的三種方式SpringMVC
- 高階bash/shell指令碼程式設計指南指令碼程式設計
- shell指令碼頭,#!/bin/sh與#!/bin/bash的區別.指令碼
- PostgreSQL-三種關閉方式(二)SQL
- linux安裝postgresql三種方式LinuxSQL
- 執行shell指令碼報錯:-bash: ./test1.sh: /bin/bash^M: ...指令碼
- Shell指令碼應用(三)指令碼
- 使用 Bash shell 指令碼進行功能測試(轉)指令碼
- oracle 索引訪問的幾種方式Oracle索引
- Bash指令碼指令碼
- Bash 指令碼:`(反引號)運算子和 $()的使用方式指令碼
- 在shell指令碼中呼叫另一個指令碼的三種不同方法(fork, exec, source)指令碼
- 跟我一起寫shell補全指令碼(Bash篇)指令碼
- shell 指令碼的除錯問題指令碼除錯
- [20210107]編寫bash shell指令碼遇到的問題.txt指令碼
- 詳解shell中source、sh、bash、./執行指令碼的區別指令碼
- Linux Bash Shell學習(七):shell程式設計基礎——執行Shell指令碼、functionLinux程式設計指令碼Function
- [20231102]除錯bash shell指令碼遇到的問題.txt除錯指令碼
- 如何在 Bash Shell 指令碼中顯示對話方塊指令碼
- 使用shell指令碼檢測資料庫連線訪問情況指令碼資料庫
- Shell指令碼報錯:-bash: ./switch.sh: /bin/bash^M: bad interpreter: No such file or directory指令碼
- 使用python指令碼傳遞引數:(三種方式可收藏)Python指令碼
- 使用Python指令碼在Linux下實現部分Bash Shell的教程Python指令碼Linux