跳至主要内容

SQL Shell (psql) 基本使用

  • 作業環境: windows
  • 已設定 ~\PostgreSQL\x.x.x\bin 於環境變數(才能找到 psql.exe)
  • 方法1: 使用 cmd 直接下 psql 指令。
    • 可直接在 command line 指令中給予 username/port/host 等參數
  • 方法2: 使用 SQL Shell(psql) 下令。
    • 須先進行登入後才可動作

psql cmd 下 login 方式

  • wondows 下記得先加入 postgreSQL/bin 到環境變數。
    psql -U postgres -d cable -p 5432 -h 192.168.x.xxx

psql# select * from totem_user;

SQL Shell (psql) 下 login 方式

    Database [postgres]: totem
Port [5432]: 5432
Username [postgres]: totem
psql (9.5.25,伺服器 9.5.18)
輸入 "help" 顯示說明。

totem=# select * from totem_user;
....
註:
A: q 可以跳出查詢結果檢視
B: Ctrl+C 結束

直接於 SQL Shell (psql) 執行 sql 檔

通常 DevOps 下,為了方便 DBA 處理與權責分離。
這邊習慣提供 DBA 包好的 sql 檔或 stored procedure 方便執行。
也避免出錯時分不清 DBA 手動程序失誤或是 sql 本身問題。

psql -f

  • psql -f 可用來指向 local 端準備好的 *.sql 檔
  • -U : role
  • -d : database
  • -f : sql 檔
  • -p : port
  • -h : hostname
psql -U postgres -d totem -f export_all_user.sql

SQL Shell(psql) 進入後, \i 指令

  • SQL Shell(psql) \i 可用來指向 local 端準備好的 *.sql 檔
  • 注意事項:
    • 即使是在 windows 下,路徑也是使用 斜線 非反斜線。
    • 路徑應使用 single quote 包覆。
totem=# \i '這邊是 local 所在的位置, 不是登入目標遠端機器的位置'

totem=# \i 'D:/tmp/export_all_user.sql'

注意事項
1: single quote
2. 資料夾使用的是 [斜線] / (windows 中用的是反斜線)

Linux Shell Script 中提供密碼方式

執行 psql 時,通常需要提供密碼,psql 預設由 stdin 讀取密碼。
但在 shell script 中無法輸入密碼,解套方式透過 .pgpass 檔案提供密碼。

  • 在 psql 命令後加上 '--no-password'
  • home directory 下新增 .pgpass 檔案,內容為各 DB 連線的密碼
    • 格式為:
host:port:database:user:password
  • 再將 .pgpass 的權限改成 600