私はorg-babelを使って文字通りプログラミングを行っていますが、とても便利だと思います。リモートホストでシェルコマンドを実行でき、postgresクライアントでローカルデータベースコマンドを実行できます。postgresユーザーとしてファイルを開くには、次のようになります。
C-x C-f /sshx:user@remotehost|sudo:postgres@remotehost:/tmp/testfile
Emacs 24.5.1でこれを行うには、以下を追加する必要があります。
(require 'tramp)
(add-to-list 'tramp-default-proxies-alist
'(nil "\\`postgres\\'" "/ssh:%h:"))
(add-to-list 'tramp-default-proxies-alist
'((regexp-quote (system-name)) nil nil))
これまでのところ、リモートサーバーでpostgresql(または選択した場合はmysql)コマンドを実行する方法を理解できていません。データベースサーバーはネットワーク経由で直接アクセスできません。リモートホストにsshし、postgresユーザーとしてsuする必要があります。そうすれば、psqlクライアントを介してコマンドを実行できます。
どのようにこのようなコマンドを使用できますか?
#+BEGIN_SRC sql :engine postgresql :ExtraParametersIfNeeded
SELECT * from pg_database
#+END_SRC
リモートホスト上で?私は:dirスイッチを知っていますが、これまでのところシェルスクリプトにしか使用できません。
どうもありがとう!
ssh yourbox -L7590:127.0.0.1:7590
、「7590
」を「」に置き換えるようなものを実行します。次に、Org babelブロックで、 ":cmdline
"ヘッダー引数を使用してコマンドライン引数を設定し、データベースポートを設定できます。全体は、Orgファイルの先頭に次のように表示される場合があります: "#+PROPERTY: header-args:sql :engine mysql :dbhost 127.0.0.1 :dbuser someone :dbpassword somepassword :database database :cmdline -P7590
"。それを実行した後C-c C-c
、そのようなバッファーでSQLブロックを使用できます。