Tôi đang sử dụng org-babel để lập trình xả rác và tôi thấy nó rất thuận tiện. Tôi có thể thực thi các lệnh shell trên các máy chủ từ xa và các lệnh cơ sở dữ liệu cục bộ với máy khách postgres. Để mở một tệp như người dùng postgres, nó sẽ tìm ví dụ như
C-x C-f /sshx:user@remotehost|sudo:postgres@remotehost:/tmp/testfile
Để làm như vậy trên Emacs 24.5.1, tôi cần thêm:
(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))
Cho đến nay, tôi đã không hiểu làm thế nào người ta có thể thực thi lệnh postgresql (hoặc mysql nếu bạn chọn) trên một máy chủ từ xa. Máy chủ cơ sở dữ liệu không thể truy cập trực tiếp qua mạng, tôi phải ssh vào máy chủ từ xa, với tư cách là người dùng postgres và sau đó tôi có thể thực thi các lệnh thông qua máy khách psql.
Làm thế nào người ta có thể sử dụng một lệnh như vậy:
#+BEGIN_SRC sql :engine postgresql :ExtraParametersIfNeeded
SELECT * from pg_database
#+END_SRC
Trên một máy chủ từ xa? Tôi biết: chuyển đổi dir, nhưng cho đến nay chỉ có thể sử dụng nó cho shell script.
Cảm ơn nhiều!
ssh yourbox -L7590:127.0.0.1:7590
" thay thế "7590
" bằng bất kỳ cổng nào mà cơ sở dữ liệu của bạn được bật. Sau đó, trong khối babg Org của bạn, bạn có thể sử dụng:cmdline
đối số tiêu đề "" để đặt đối số dòng lệnh để đặt cổng cơ sở dữ liệu. Toàn bộ mọi thứ có thể trông giống như thế này ở đầu tệp Org của bạn: "#+PROPERTY: header-args:sql :engine mysql :dbhost 127.0.0.1 :dbuser someone :dbpassword somepassword :database database :cmdline -P7590
". SauC-c C-c
đó, bạn có thể sử dụng bất kỳ khối SQL nào trong bộ đệm của mình như thế.