ecpg-sql-connect.md 4.1 KB
Newer Older
李少辉-开发者's avatar
李少辉-开发者 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
## 连接

CONNECT — 建立数据库连接

## 概要

```
CONNECT TO connection_target [ AS connection_name ] [ USER connection_user ]
CONNECT TO DEFAULT
CONNECT connection_user
DATABASE connection_target
```

## 描述

`连接`命令在客户端和 PostgreSQL 服务器之间建立连接。

## 参数

*`连接目标`*

*`连接目标`*以多种形式之一指定连接的目标服务器。

[ *`数据库名称`* ][ `@`*`host`* ] [ `:`*`:`*港口 ]

通过 TCP/IP 连接

`unix:postgresql://`*`主持人`* [ `:`*`:`*港口 ] `/` [ *`数据库名称`* ][ `?`*`connection_option`* ]

通过 Unix 域套接字连接

`tcp:postgresql://`*`主持人`* [ `:`*`:`*港口 ] `/` [ *`数据库名称`* ][ `?`*`connection_option`* ]

通过 TCP/IP 连接

SQL 字符串常量

包含上述形式之一的值

主变量

类型的主变量`字符[]`或者`VARCHAR[]`包含上述形式之一的值

*`连接名称`*

连接的可选标识符,以便可以在其他命令中引用。这可以是 SQL 标识符或主机变量。

*`连接用户`*

数据库连接的用户名。

该参数还可以指定用户名和密码,使用形式之一`*`用户名`*/*`密码`*`,`*`用户名`* 由 * 识别`密码`*`, 要么`*`用户名`* 使用 *`密码`*`.

用户名和密码可以是 SQL 标识符、字符串常量或主机变量。

`默认`

使用 libpq 定义的所有默认连接参数。

## 例子

这里有几个用于指定连接参数的变体:

```
EXEC SQL CONNECT TO "connectdb" AS main;
EXEC SQL CONNECT TO "connectdb" AS second;
EXEC SQL CONNECT TO "unix:postgresql://200.46.204.71/connectdb" AS main USER connectuser;
EXEC SQL CONNECT TO "unix:postgresql://localhost/connectdb" AS main USER connectuser;
EXEC SQL CONNECT TO 'connectdb' AS main;
EXEC SQL CONNECT TO 'unix:postgresql://localhost/connectdb' AS main USER :user;
EXEC SQL CONNECT TO :db AS :id;
EXEC SQL CONNECT TO :db USER connectuser USING :pw;
EXEC SQL CONNECT TO @localhost AS main USER connectdb;
EXEC SQL CONNECT TO REGRESSDB1 as main;
EXEC SQL CONNECT TO AS main USER connectdb;
EXEC SQL CONNECT TO connectdb AS :id;
EXEC SQL CONNECT TO connectdb AS main USER connectuser/connectdb;
EXEC SQL CONNECT TO connectdb AS main;
EXEC SQL CONNECT TO connectdb@localhost AS main;
EXEC SQL CONNECT TO tcp:postgresql://localhost/ USER connectdb;
EXEC SQL CONNECT TO tcp:postgresql://localhost/connectdb USER connectuser IDENTIFIED BY connectpw;
EXEC SQL CONNECT TO tcp:postgresql://localhost:20/connectdb USER connectuser IDENTIFIED BY connectpw;
EXEC SQL CONNECT TO unix:postgresql://localhost/ AS main USER connectdb;
EXEC SQL CONNECT TO unix:postgresql://localhost/connectdb AS main USER connectuser;
EXEC SQL CONNECT TO unix:postgresql://localhost/connectdb USER connectuser IDENTIFIED BY "connectpw";
EXEC SQL CONNECT TO unix:postgresql://localhost/connectdb USER connectuser USING "connectpw";
EXEC SQL CONNECT TO unix:postgresql://localhost/connectdb?connect_timeout=14 USER connectuser;
```

下面是一个示例程序,它说明了使用主机变量来指定连接参数:

```
int
main(void)
{
EXEC SQL BEGIN DECLARE SECTION;
    char *dbname     = "testdb";    /* database name */
    char *user       = "testuser";  /* connection user name */
    char *connection = "tcp:postgresql://localhost:5432/testdb";
                                    /* connection string */
    char ver[256];                  /* buffer to store the version string */
EXEC SQL END DECLARE SECTION;

    ECPGdebug(1, stderr);

    EXEC SQL CONNECT TO :dbname USER :user;
    EXEC SQL SELECT pg_catalog.set_config('search_path', '', false); EXEC SQL COMMIT;
    EXEC SQL SELECT version() INTO :ver;
    EXEC SQL DISCONNECT;

    printf("version: %s\n", ver);

    EXEC SQL CONNECT TO :connection USER :user;
    EXEC SQL SELECT pg_catalog.set_config('search_path', '', false); EXEC SQL COMMIT;
    EXEC SQL SELECT version() INTO :ver;
    EXEC SQL DISCONNECT;

    printf("version: %s\n", ver);

    return 0;
}
```

## 兼容性

`连接`在 SQL 标准中指定,但连接参数的格式是特定于实现的。

## 也可以看看

[断开](ecpg-sql-disconnect.html), [设置连接](ecpg-sql-set-connection.html)