Ich benutze org-babel, um Wurfprogrammierung zu machen, und ich finde es sehr praktisch. Ich kann Shell-Befehle auf Remote-Hosts und lokale Datenbankbefehle mit dem Postgres-Client ausführen. Um eine Datei als Postgres-Benutzer zu öffnen, würde sie beispielsweise so aussehen
C-x C-f /sshx:user@remotehost|sudo:postgres@remotehost:/tmp/testfile
Um dies auf Emacs 24.5.1 zu tun, musste ich hinzufügen:
(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))
Bisher habe ich nicht verstanden, wie man einen postgresql-Befehl (oder mysql, wenn Sie dies wünschen) auf einem Remote-Server ausführen kann. Auf den Datenbankserver kann nicht direkt über das Netzwerk zugegriffen werden. Ich muss ssh in den Remote-Host, su als Postgres-Benutzer, und dann kann ich Befehle über den psql-Client ausführen.
Wie könnte man einen solchen Befehl verwenden:
#+BEGIN_SRC sql :engine postgresql :ExtraParametersIfNeeded
SELECT * from pg_database
#+END_SRC
Auf einem Remote-Host? Ich kenne den Schalter: dir, konnte ihn aber bisher nur für Shell-Skripte verwenden.
Danke vielmals!
ssh yourbox -L7590:127.0.0.1:7590
" Ersetzen des "7590
" durch einen beliebigen Port Ihrer Datenbank ähnelt. Anschließend können Sie in Ihrem Org-Babel-Block das:cmdline
Header-Argument " " verwenden, um ein Befehlszeilenargument zum Festlegen des Datenbankports festzulegen. Das Ganze könnte oben in Ihrer Org-Datei ungefähr so aussehen: "#+PROPERTY: header-args:sql :engine mysql :dbhost 127.0.0.1 :dbuser someone :dbpassword somepassword :database database :cmdline -P7590
". DanachC-c C-c
können Sie einen beliebigen SQL-Block in Ihrem Puffer verwenden.