8

sql-modeを使用して Emacs 経由で PostgreSQL DB に接続しようとしています。Emacs コマンドを起動M-x sql-postgresすると、ユーザー、データベース、サーバーの入力を求められますが、パスワードは求められません。空のバッファが開き、何を書いても次のようになります。

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

ただし、 psqlを使用してログインできます。Linux Antergos で GNU Emacs 24.4.1 を実行しています。PostgreSQL は 9.3.5 です。

ありがとう..

4

8 に答える 8

11

他の誰かが見に来た場合に備えて、sql-postgres コマンドが完了した後、send-invisible を呼び出してパスワードを入力することでこれを解決しました。Emacs バージョン 24.5.1。

  1. postgres 接続を開始する
  2. 空白の画面で Mx send-invisible
  3. パスワードをうつ。
  4. 利益。
于 2016-09-02T01:20:37.170 に答える
6

ケビンの答えは、インタラクティブなソリューションを提供します。

それ以外の場合は、非対話型の認証方法 (.pgpassファイルなど) を使用する必要があります。


私の最初の (そして間違った) 提案は、で「パスワード」オプションを有効にすることでしたM-x customize-option RET sql-postgres-login-params RET

変数 (および関連するカスタマイズ ウィジェット) は、sql-*-login-paramsすべてのデータベース タイプで一般化されています。ただし、これらのオプションのすべてがすべてのデータベースに適用できるわけではありません。

該当する場合、パスワードは Emacs によって読み取られ、コマンド ラインで使用されます。psqlただし、コマンドの一部としてパスワードを指定することは許可されていないため、ここで Emacs がこのアプローチを使用する方法はありません。これが、postgres ログイン パラメータのパスワード オプションが無効になっている理由です。

于 2014-11-04T19:18:52.927 に答える
4

接続資格情報を保存する.pgpassファイルを作成することで、これを一時的に解決しました。私はそれに慣れていないので、ログイン時にパスワードを入力する必要がある解決策が欲しい.

于 2014-11-04T08:33:34.190 に答える
0

標準の接続リスト フィールドで環境変数sql-comint-postgresを使用するようにモンキー パッチを適用できます。PGPASSWORD

(defun sql-comint-postgres (product options &optional buf-name)
  "Create comint buffer and connect to Postgres."
  ;; username and password are ignored.  Mark Stosberg suggests to add
  ;; the database at the end.  Jason Beegan suggests using --pset and
  ;; pager=off instead of \\o|cat.  The later was the solution by
  ;; Gregor Zych.  Jason's suggestion is the default value for
  ;; sql-postgres-options.
  (let ((params
         (append
          (if (not (= 0 sql-port))
              (list "-p" (number-to-string sql-port)))
          (if (not (string= "" sql-user))
              (list "-U" sql-user))
          (if (not (string= "" sql-server))
              (list "-h" sql-server))
          options
          (if (not (string= "" sql-database))
              (list sql-database))))
        (process-environment
         (nconc
          (list (format "PGPASSWORD=%s" sql-password))
          process-environment)))
    (message (prin1-to-string process-environment))
    (sql-comint product params buf-name)))
于 2021-10-01T20:27:41.980 に答える