Estoy usando org-babel para hacer programación literaria y me parece muy conveniente. Puedo ejecutar comandos de shell en hosts remotos y comandos de bases de datos locales con el cliente postgres. Para abrir un archivo como usuario de postgres, se vería, por ejemplo, como
C-x C-f /sshx:user@remotehost|sudo:postgres@remotehost:/tmp/testfile
Para hacerlo en Emacs 24.5.1, necesitaba agregar:
(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))
Hasta ahora, no he podido entender cómo se podría ejecutar un comando postgresql (o mysql si así lo desea) en un servidor remoto. No se puede acceder al servidor de la base de datos directamente a través de la red, tengo que ingresar ssh en el host remoto, su como usuario de postgres y luego puedo ejecutar comandos a través del cliente psql.
¿Cómo podría uno usar tal comando?
#+BEGIN_SRC sql :engine postgresql :ExtraParametersIfNeeded
SELECT * from pg_database
#+END_SRC
En un host remoto? Conozco el interruptor: dir, pero hasta ahora solo he podido usarlo para scripts de shell.
¡Muchas gracias!
ssh yourbox -L7590:127.0.0.1:7590
" reemplazar el "7590
" con cualquier puerto en el que esté tu base de datos. Luego, en su bloque Org babel, puede usar el ":cmdline
" argumento de encabezado para establecer un argumento de línea de comando para establecer el puerto de la base de datos. Todo esto podría verse más o menos así en la parte superior de su archivo Org: "#+PROPERTY: header-args:sql :engine mysql :dbhost 127.0.0.1 :dbuser someone :dbpassword somepassword :database database :cmdline -P7590
". Después deC-c C-c
eso, puede usar cualquier bloque SQL en su búfer así.