514ばんの日誌

2018-02-23

PostgreSQLのpsqlのWin版

PostgreSQLのクライアントソフトであるpsql
Windows版もちゃんとある
ただ、個別配布じゃなく(たぶん)、PostgreSQLのサーバー込みで一括配布されている
自環境では、VM上のFreeBSD環境にて、PostgreSQLサーバを稼働させており
わざわざWin上でもサーバを動かす必要がないけれど
とりあえず一式、ZIPとかのアーカイブを落としてきて、そこからpsql.exeを取り出して使ってる
「c:\usr\local\bin」に「psql.exe」を置いて、とりあえず実行してみる
(置き場所は任意だが、ここにPATHを通してあるので)
そうすると起動に必要なdllが見つからないと言われると思う
そのファイルもアーカイブ内にあるので、探してきて
psql.exeと同フォルダ、もしくはPATHが通ってるフォルダに入れる
(ウチはNTEmacs入れてるのでdll類はc:\usr\local\libにまとめてある)
dllが揃っていれば、localhostにpgsqlサーバを探しにいって見つからんと言われるはず
(サーバ入れてないから見つからんのは当たり前)
psql --help
これでコマンドラインのオプションが確認できる
仮に別環境で稼働してるpgsqlサーバが以下だとすると
pgsqlサーバのホスト:192.168.1.2(ホスト名で名前引きできるならホスト名でもいい)
データベースのユーザー名:hogehoge
データベース名:database
(デフォルトのポートは5432なので、LAN内で通るようにしておく)
psql -h 192.168.1.2 -U hogehoge -d database
これで繋がる
普通にSQL文書いてEnterすれば返ってくる
さらにNTEmacsを使っていれば、「M-x sql-postgres」でpsqlをバッファ上に起動してくれる
以下、.emacs例
(ただしpsqlのプロンプトがうまく出てくれない。BSD機では出てるのでやり方はあるはず)
(require 'sql)
(setq sql-postgres-login-params
'((user :default "hogehoge") ; ユーザー名
(database :default "database") ; データベース名
(server :default "192.168.1.2") ; サーバホスト名 or IP
(port :default 5432))) ; ポート番号
(add-hook 'sql-interactive-mode-hook
(lambda ()
(interactive)
(setq sql-input-ring-file-name "~/.psql_history") ; 入力履歴ファイル
(set-buffer-process-coding-system 'utf-8-unix 'utf-8-unix) ; 文字コードの扱い
(setq show-trailing-whitespace nil)
))
; 以下は2つはとりあえず書いてある
(eval-after-load "sql"
'(progn
(load-library "sql-indent")
(load-library "sql-complete")
(load-library "sql-transform")))
(setq auto-mode-alist (cons '("\\.sql$" . sql-mode) auto-mode-alist))
(sql-set-product 'postgres)
「M-x sql-postgres」を実行すると
ログイン接続を聞いてくるから、defaut値のままでよければEnter
(デフォルトは上の設定を使う)
あとは、psqlを介してやりとりできる
バッファ内をコピーして、別のバッファに貼り付けたりできるので便利
(特にpgsqlサーバが別マシンにあると、いちいちweb介したりせずに済むので)
選択した箇所のSQL文をsqlバッファに送るとかもあるけど
sqlバッファ内に貼り付けて送信で済ませてるので使ってない