以下の文を使用して、データベースへ接続します。
EXEC SQL CONNECT TO target [AS connection-name] [USER user-name];
targetは以下の方法で指定されます。
dbname[@hostname][:port]
tcp:postgresql://hostname[:port][/dbname][?options]
unix:postgresql://hostname[:port][/dbname][?options]
上の形式のいずれかを含むSQL文字列リテラル。
上の形式のいずれかを含む文字変数への参照。
DEFAULT
接続目標をリテラル(つまり、変数を参照しない形)で指定し、その値を引用符で括らなかった場合、 大文字小文字の区別に関して通常のSQLの規則が適用されます。 また、この場合、必要に応じて個々のパラメータを二重引用符で別々に括ることもできます。 実際には、おそらく(単一引用符で括られた)文字列リテラルもしくは変数の参照を使用した方がエラーをより防止することができます。 DEFAULT接続目標は、デフォルトデータベース、デフォルトのユーザ名で接続を初期化します。 この場合は、ユーザ名と接続名を分けて指定することができません。
ユーザ名を指定するには、別の方法もあります。
username
username/password
username IDENTIFIED BY password
username USING password
これまで同様、usernameとpasswordは、SQL識別子、SQL文字列リテラル、文字型変数への参照を取ることができます。
1つのプログラム内で複数の接続を処理する場合には、connection-nameを使用します。 プログラムで1つしか接続を使わない場合は、省略して構いません。 最も最近に開かれた接続が現在の接続になり、SQL文を実行しようとする時にデフォルトでこの接続が使用されます。(本章の後で説明します。)
以下にCONNECT文について、数例を示します。
EXEC SQL CONNECT TO mydb@sql.mydomain.com; EXEC SQL CONNECT TO 'unix:postgresql://sql.mydomain.com/mydb' AS myconnection USER john; EXEC SQL BEGIN DECLARE SECTION; const char *target = "mydb@sql.mydomain.com"; const char *user = "john"; EXEC SQL END DECLARE SECTION; ... EXEC SQL CONNECT TO :target USER :user;
最後の形式では、文字変数参照として上を参照する変数を使用しています。 後の節で、接頭子にコロンを持つ場合のSQL文内でのC変数の使用方法について説明します。
接続目標の書式は標準SQLでは規定されていないことに注意してください。 そのため、移植可能なアプリケーションを開発したいのであれば、上の例の最後の方法を基にして、接続目標文字列をどこかにカプセル化してください。