-  データベースの接続
  
 
データベースに接続するには、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)
 
 |