Estou usando o org-babel para fazer programação alfabética e acho muito conveniente. Eu sou capaz de executar comandos shell em hosts remotos e comandos de banco de dados local com o cliente postgres. Para abrir um arquivo como usuário do postgres, pareceria, por exemplo,
C-x C-f /sshx:user@remotehost|sudo:postgres@remotehost:/tmp/testfile
Para fazer isso no Emacs 24.5.1, eu precisava adicionar:
(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))
Até agora, não consegui entender como se poderia executar um comando postgresql (ou mysql, se você escolher) em um servidor remoto. O servidor de banco de dados não está acessível diretamente pela rede, tenho que ssh no host remoto, su como o usuário do postgres e, em seguida, sou capaz de executar comandos através do cliente psql.
Como alguém poderia usar esse comando:
#+BEGIN_SRC sql :engine postgresql :ExtraParametersIfNeeded
SELECT * from pg_database
#+END_SRC
Em um host remoto? Conheço a opção: dir, mas até agora só consegui usá-la para scripts de shell.
Muito Obrigado!
ssh yourbox -L7590:127.0.0.1:7590
" substituir o "7590
" por qualquer porta em que seu banco de dados esteja. Em seguida, no bloco Org babel, você pode usar o:cmdline
argumento " " do cabeçalho para definir um argumento de linha de comando para definir a porta do banco de dados. A coisa toda pode ficar assim na parte superior do seu arquivo organizacional: "#+PROPERTY: header-args:sql :engine mysql :dbhost 127.0.0.1 :dbuser someone :dbpassword somepassword :database database :cmdline -P7590
". DepoisC-c C-c
disso, você pode usar qualquer bloco SQL no seu buffer assim.