- データベースの接続
データベースに接続するには、CONNECT文を使用します。CONNECTを実行せずに SELECTなどのSQLを実行した場合は、自動的に"CONNECT TO DEFAULT"が発行されます。
DEFAULTは、"Unixログイン名" をデータベース名およびデータベースユーザ名として使用します。
CONNECT TO dbname[@server[:port]] | DEFAULT [AS connect_name]
[USER user_name [[{IDENTIFIED BY | USING | /}] password]];
dbname..........データベース名
server..........サーバ名 (例えば、db.xxx.co.jp)
port............PostgreSQLのポート番号(指定がなければ 5432)
connect_name....コネクション名(指定がなければdbnameと同じになる)
user_name.......データベースユーザ名(指定がなければUnixユーザ名になる)
password........パスワード
使用例)
connect to postgres@db1.jp as db1 user postgres xxxxxxxx;
connect to postgres@db2.jp as db2 user postgres IDENITIFIED BY xxxxxxxx;
connect to postgres@db3.jp as db3 user postgres USING xxxxxxxx;
connect to postgres@db4.jp as db4 user postgres/xxxxxxxx;
・password を指定しない場合は、password: プロンプトが表示されパスワード入力待ち状態になります。
・パスワードを設定していないユーザは、"CONNECT TO データベース名 USER ユーザ名 NULL"のようにパスワードに"NULL"を指定することができます。
(パスワードが設定されていない場合の例)
connect to postgres_db user xxx;
password: ................. リターンだけを入力する
connect to postgres_db user xxx NULL;
... この場合、password: プロンプトは表示されない。
|
・Unixのログインユーザ名と同じ名前のユーザ名の場合は、"user"以降を省略することができます。
・コネクション名を指定しない場合はデータベースがコネクション名として使用されます。
例)
connect to postgres3 user admin; ..............コネクション名は postgres3 になる
|
・同じデータベースに対して違う接続名で接続することができます
例)
connect to postgres_db as db1;
connect to postgres_db as db2;
|
データベースの切断
disconnect によって、コネクションを切断することができます。disconnect all; で全てのコネクションを切断することができます。
DISCONNECT connect_name|CURRENT|DEFAULT|ALL;
connect_name.....コネクション名
CURRENT..........カレントのコネクション
DEFAULT..........CONNECT TO DEFAULT で接続したコネクション
ALL..............全てのコネクション
例)
disconnect db4; ...............................コネクションdb4を切断する
disconenct all; ...............................全てのコネクションを切断する
対話型環境では Pgbashを終了した時点で、シェルスクリプトではシェルスクリプトが終了した時点で、自動的に全てのコネクションは切断されます。従いまして、disconnect は実行しなくてもかまいません。
現在(カレント)の接続(コネクション)の切り替え
複数のデータベースに接続した場合、set connection 文を使用して「現在(カレント)の接続名」を切り替えることができます。以後、そのデータベース接続に対してSQLが実行されることになります。
SET CONNECTION connect_name|DEFAULT;
connect_name.....コネクション名
DEFAULT..........CONNECT TO DEFAULT で接続したコネクション
例)
connect to postgres1 as db1;
connect to postgres2 as db2;
connect to postgres1 as db3;..............db3 がカレントの接続名になる
set connection db1;...................... db1をカレントの接続名に変更
exec_sql -d db2 "select * from test2".... 一時的にdb2へ接続
exec_sql "select * from test1".... カレントのdb1の接続を使用
exec_sql -d db3 "select * from test2".... 一時的にdb3へ接続
select * from test; ..................... カレントのdb1の接続を使用
disconnect all;
また、exec_sql の -d オプションによって、一時的にデータベース接続を切り替えることができます。
データベースの接続状態の表示
対話型環境では、?dbc 、シェルスクリプトでは "exec_sql -m" を指定します。
例えば次のように3つの接続がある場合は次のように表示されます。
connect to default;
connect to postgres@www2.psn.ne.jp:5432 as db1;
connect to admin@xxx.psn.ne.jp as db2 user admin;
?dbc(もしくは exec_sql -mL)
# List of database connection (C: current database is '*')
+---+--------------+-----------+------------------------------+
| C | connect_name | user_name | target_name |
+---+--------------+-----------+------------------------------+
| | _DEFAULT_ | postgres | postgres:5432 |
| | db1 | postgres | postgres@www.psn.ne.jp:5432 |
| * | db2 | admin | admin@xxx.psn.ne.jp:5432 |
+---+--------------+-----------+------------------------------+
(3 rows)
|