连接数据库
使用如下语句连接数据库:
EXEC SQL CONNECT TO target [AS connection-name] [USER user-name];
- dbname[@hostname][:port]
- tcp:gaussdb://hostname[:port][/dbname][?options]
- unix:gaussdb://hostname[:port][/dbname][?options]
- 一个包含上述形式之一的SQL字符串
ecpg支持IPv6格式,需要hostname两边添加[]。IPv6格式示例如下:
db1@[::1] db1@[::1]:5432 tcp:gaussdb://[::1]/db1 tcp:gaussdb://[::1]:5432/db1 unix:gaussdb://[::1]/db1 unix:gaussdb://[::1]:5432/db1
目前ecpg支持的IPv6格式如下:
- 简写大写格式
- 简写小写格式
- 非简写大写格式
- 非简写小写格式
IPv6的回环地址为::1或者0:0:0:0:0:0:0:1,因此unix协议在IPv6下只支持这两种格式。
- username/password
- username SQLIDENTIFIED BY password
- username USING password
如上所述,参数username以及password可以是一个SQL标识符、一个SQL字符串或一个对字符变量的引用。
connection_name表示连接名,如果一个程序只使用一个连接,则可以省略它。最近打开的连接成为当前连接。
#include <stdlib.h> EXEC SQL CONNECT TO mydb@sql.mydomain.com; EXEC SQL CONNECT TO unix:gaussdb://sql.mydomain.com/mydb AS myconnection USER username; EXEC SQL BEGIN DECLARE SECTION; /* 此处target、user、passwd应从环境变量或配置文件读取,环境变量需用户自己按需配置;非环境变量情况下可直接赋值字符串 */ const char *target = getenv("EXAMPLE_TARGET_ENV"); const char *user = getenv("EXAMPLE_USERNAME_ENV"); const char *passwd = getenv("EXAMPLE_PASSWD_ENV"); EXEC SQL END DECLARE SECTION; ... EXEC SQL CONNECT TO :target USER :user USING :passwd; /* 或者 EXEC SQL CONNECT TO :target USER :user/:passwd; */
完整使用示例,请参见CONNECT中的“连接语法使用示例”。
- 若连接语句中指定了ip-port,则必须指定username/password,该规则由GaussDB Kernel内核通信认证所决定。若不指定ip-port,则通过本地$PGPORT(UDS协议)进行通信。
- 若客户连接时使用SSL安全协议,则需要使用tcp:gaussdb://hostname[:port][/dbname][?options]连接格式,在options选项中配置sslmode=disable\require。