Emacs, sql-режим, Postgresql и ввод пароля

Я пытаюсь подключиться к БД PostgreSQL через Emacs с помощью sql-mode. Я запускаю Emacs, command M-x sql-postgres и он запрашивает пользователя, База данных и сервер, но не для пароля. Откроется пустой буфер и что бы я ни написал, Я получаю:

the Password for user james:
psql: FATAL:  password authentication failed for user "james"

Я могу войти с помощью psql в, хотя. Я запускаю GNU Emacs 24.4.1 в Linux Antergos, PostgreSQL - 9.3.5.

спасибо..

6 ответов


Кевин обеспечивает интерактивное решение.

в противном случае вы должны использовать неинтерактивный способ аутентификации (например,).


мое первоначальное (и неправильное) предложение состояло в том, чтобы включить опцию "пароль" в M-x customize-option RET sql-postgres-login-params RET.

на sql-*-login-params переменные (и связанные виджеты настройки) обобщаются по всем типам баз данных; но не все эти параметры применяются ко всем базам данных.

если применимо, пароли считываются Emacs, а затем используются в командной строке. psql не позволяет вводить пароль как часть команды, однако, поэтому Emacs не может использовать этот подход здесь. Вот почему опция пароля отключена для параметров входа postgres.


в случае, если кто-то еще ищет, я решил это, вызвав send-invisible и введя свой пароль после завершения команды sql-postgres. Версия для Emacs 24.5.1.

  1. инициировать подключение postgres
  2. на пустом экране M-x отправить-невидимый
  3. введите пароль.
  4. прибыль.

Я решил это временно, создав .pgpass файл, в котором я сохранил свои учетные данные подключения. Мне это не нравится, и я хотел бы получить решение, которое требует ввода пароля при входе в систему.


У меня тоже есть эта проблема. Если вы перейдете в пустой буфер и нажмете enter, получите ли вы там запрос пароля? Я делаю, и при вводе пароля режим работает просто отлично.


работает для меня задание PGPASSWORD переменные среды, например,(setenv "PGPASSWORD" "whatever your password is")


вот это более простое решение, используя тот факт, что вы можете передать пароль в строке подключения. Например:

(setq sql-connection-alist
      '((my-db (sql-product 'postgres)
               (sql-database "postgresql://user:pass@host/database"))))

затем отключите все параметры входа postgres, кроме базы данных.


в качестве бонуса вот моя конфигурация для использования Unix password manager pass которые я рекомендую:

(defun my-pass (key)
  (string-trim-right
   (shell-command-to-string (concat "pass " key))))

(setq sql-connection-alist
      '((db (sql-product 'postgres)
            (sql-database (concat "postgresql://user:"
                                  (my-pass "db/user")
                                  "@host/database")))))