LoginSignup
34
26

psql による PostgreSQL サーバへのログイン・接続方法

Last updated at Posted at 2020-03-26

方法 1. プロンプト

-U, -d は省略して書けます。

psql
# パスワード

psql ユーザ名 データベース名
# パスワード

psql -U ユーザ名 -d データベース名
# パスワード

psql -h ホスト -p ポート ユーザ名 データベース名
# パスワード

psql -h ホスト -p ポート -U ユーザ名 -d データベース名
# パスワード


# 省略した場合
# ユーザ名:      ログインしている OS のユーザ名
# データベース名: ログインしている OS のユーザ名
# ホスト:        localhost, 127.0.0.1
# ポート:        5432

◯ ログアウト・切断方法

バックスラッシュ \q

\q

◯ パスワードを打つのが面倒な場合

環境変数 PGPASSWORD を使った、つぎのような書き方があるそうです。

PGPASSWORD=パスワード psql -U ユーザ名 データベース名

◯ パスワードを忘れた場合

pg_hba.conf を開き peer または md5 から trust に書き換えます。パスワードが無効になります。詳細はリンク先をご確認ください。

方法 2. 環境変数

export PGUSER=ユーザ名
export PGPASSWORD=パスワード
export PGHOST=ホスト
export PGPORT=ポート
export PGDATABASE=データベース名

方法 3. パスワードファイル

◯ ファイルの書式

コロン : で区切ります。

ホスト:ポート:データベース名:ユーザ名:パスワード

◯ ファイルの場所

1. Windows の場合
  %APPDATA%\postgresql\pgpass.conf

2. それ以外 OS の場合
  ~/.pgfile

3. あるいは環境変数 PGPASSFILE でファイルパスを指定できます。

まとめ

PostgreSQL サーバへのログイン、接続する際にホスト名等を指定する方法は以下の4通りがあります。

項目 ホスト名 ポート番号 データベース名 ユーザ名 パスワード
デフォルト値 127.0.0.1 5432 OS のユーザ名 OS のユーザ名 -
プロンプト -h, --host -p, --port -d, --dbname -U, --username -
環境変数 PGHOST PGPORT PGDATABASE PGUSER PGPASSWORD
パスワードファイル 1 2 3 4 5

値が指定されなかった場合、デフォルトの値が適用されます。プロンプト、パスワードファイル、環境変数でそれぞれ別の値を指定した場合、どの値が優先されるのかは調べてないので分かりません。

psql ってなんだ?

以下の2つがポイントかなと思いました。

  1. psql クライアントと PostgreSQL サーバを区別する
  2. psql クライアントと psql コマンドを区別する

psql クライアントは PostgreSQL サーバを操作するための対話端末 interactive terminal です。psql クライアンはそれ1つでアプリとして動作します。

psql - PostgreSQL interactive terminal

psql クライアントは、自分のパソコンのなかで動いている PostgreSQL サーバだけではなく、ネットワーク上にいるほかのパソコンで動いている PostgreSQL サーバも操作できます。これは psql コマンドでホスト名やポート番号を指定できることからもわかります。

そして psql クライアントは psql コマンドで起動することができます。psql はクライアントです。データベースが動いているサーバとは違うものです。ややこしいのですがサーバとクライアントを区別すると良いような気がします。

以下のリンクの中で "PostgreSQL Client Applications" の一覧の中に psql コマンドがあるのがわかります。つまり psql はクライアントということです。

PostgreSQL Client Applications - PostgreSQL: Documentation

自分は サーバとクライアントが別物であると言う意識が希薄になっていました。これは psql コマンドが、なにも指定しないとフォールバックされて自動的にローカル 127.0.0.1 のサーバに接続されるからです。

Python での PostgreSQL 接続方法

もはや psql 関係ないですが...

◯ psycopg2 の書式

import psycopg2

connection = psycopg2.connect(
    user="postgres",
    password="secret",
    host="localhost",
    dbname="postgres"
)

◯ SQLAlchemy の書式

from sqlalchemy import create_engine

# dialect[+driver]://user:password@host/dbname[?key=value..]
URL = "postgresql+psycopg2://ユーザ名:パスワード@ホスト名/データベース名"
engine = create_engine(URL)

URL は RFC1738 に定められた書式だそうです(PEP 249 で定められてはいない、Python に限定して言えば SQLAlchemy の中だけで使われていそうな気配を感じます)。

The string form of the URL is dialect[+driver]://user:password@host/dbname[?key=value..], where dialect is a database name such as mysql, oracle, postgresql, etc., and driver the name of a DBAPI, such as psycopg2, pyodbc, cx_oracle, etc. Alternatively, the URL can be an instance of URL.

34
26
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
26