方法 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つがポイントかなと思いました。
- psql クライアントと PostgreSQL サーバを区別する
- psql クライアントと
psql
コマンドを区別する
psql クライアントは PostgreSQL サーバを操作するための対話端末 interactive terminal です。psql クライアンはそれ1つでアプリとして動作します。
psql クライアントは、自分のパソコンのなかで動いている PostgreSQL サーバだけではなく、ネットワーク上にいるほかのパソコンで動いている PostgreSQL サーバも操作できます。これは psql
コマンドでホスト名やポート番号を指定できることからもわかります。
そして psql クライアントは psql
コマンドで起動することができます。psql はクライアントです。データベースが動いているサーバとは違うものです。ややこしいのですがサーバとクライアントを区別すると良いような気がします。
以下のリンクの中で "PostgreSQL Client Applications" の一覧の中に psql
コマンドがあるのがわかります。つまり psql はクライアントということです。
自分は サーバとクライアントが別物であると言う意識が希薄になっていました。これは 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.