建立数据库会话
用户可以使用兼容PostgreSQL的客户端程序连接到Greenplum数据库,例如 psql。 用户和管理员总是通过master连接到Greenplum数据库,Segment不能接受客户端连接。
为了建立一个到Greenplum数据库Master的连接,您需要了解以下连接信息,并相应地配置客户端程序。
连接参数 | 描述 | 环境变量 |
---|---|---|
应用名称 | 连接到数据库的应用名称,保存在application_name连接参数中。默认值是 psql。 | $PGAPPNAME |
数据库名称 | 您要连接的数据库名称。对于新初始化的系统,首次连接数据库请使用postgres。 | $PGDATABASE |
主机名 | Greenplum数据库的Master的主机名。默认主机是本地主机。 | $PGHOST |
端口 | Greenplum数据库的Master实例所运行的端口号。默认为5432。 | $PGPORT |
用户名 | 所连接的数据库用户(角色)名称。这不需要与您的OS用户名相同。如果不确定数据库用户名是什么,请咨询Greenplum管理员。请注意,每个Greenplum数据库系统都有一个在初始化时自动创建的超级用户帐户。此帐户的名称与初始化Greenplum系统的用户的操作系统名称相同(通常是 gpadmin)。 | $PGUSER |
使用psql连接提供了用于连接到Greenplum数据库的命令示例。
支持的客户端应用程序
用户可以使用多种客户端应用连接到Greenplum数据库:
- Greenplum的安装随附了许多Greenplum数据库客户端应用程序。psql 客户端应用程序提供了一个到Greenplum数据库的交互式命令行接口。
- 使用标准的数据库应用程序接口(例如ODBC和JDBC),用户可以创建自己的客户端应用程序,接口到Greenplum数据库。
- 大部分使用ODBC和JDBC等标准数据库接口的客户端工具,都可以被配置来连接到 Greenplum数据库。
Greenplum数据库客户端应用程序
Greenplum数据库随附有一些客户端工具应用,它们位于用户的Greenplum数据库Master主机安装的 $GPHOME/bin目录中。以下是最常用的客户端工具应用:
名称 | 用法 |
---|---|
createdb | 创建一个新数据库 |
createlang | 定义一种新的过程语言 |
createuser | 定义一个新的数据库角色 |
dropdb | 移除一个数据库 |
droplang | 移除一种过程语言 |
dropuser | 移除一个角色 |
psql | PostgreSQL交互式终端 |
reindexdb | 对一个数据库重建索引 |
vacuumdb | 对一个数据库进行垃圾收集和分析 |
注意: createlang 和 droplang不推荐使用,并且可能在将来的版本中删除。它们在Pivotal Greenplum数据库中不再使用,如果您尝试使用它们安装Greenplum过程语言,它们会显示错误。请使用CREATE EXTENSION or DROP EXTENSION来代替它们。
在使用这些客户端应用时,用户必须通过Greenplum的Master实例连接到一个数据库。 您需要知道目标数据库的名称、Master的主机名和端口号,还有用于连接的数据库用户名。 这些信息可以在命令行上分别用选项-d、-h、 -p和-U来提供。如果找到不属于任何一个选项的参数, 它将被首先解释为数据库名。
所有这些选项都有默认值,如果该选项没有被指定就会使用其默认值。默认主机是本地主机。默认 端口号是5432。默认用户名是用户的操作系统用户名,同时也是默认的数据库名。注意,操作系统的用户名和Greenplum数据库用户名并不需要一样。
如果默认值和实际情况不同,用户可以设置环境变量PGDATABASE、 PGHOST、PGPORT和PGUSER为合适的值, 或者使用一个psql~/.pgpass文件来包含常用的口令。
有关Greenplum数据库环境变量的信息,请参阅《 Greenplum数据库参考指南》。有关psql的信息,请参见《 Greenplum数据库实用程序指南》。
用psql连接
根据使用的默认值或您设置的环境变量,以下示例显示了如何通过psql方式访问数据库 :
$ psql -d gpdatabase -h master_host -p 5432 -U gpadmin
$ psql gpdatabase
$ psql postgres
如果尚未创建用户定义的数据库,则可以通过连接到数据库postgres来访问系统。例如:
$ psql postgres
在连接到一个数据库后,psql提供了一个提示符,提示符由psql 当前连接的数据库名后面加上=> (如果用户是数据库超级用户则会是=#) 构成。例如:
gpdatabase=>
在提示符处,您可以键入SQL命令。为发送到服务器并执行,SQL命令必须以 ;(分号)。例如:
=> SELECT * FROM mytable;
有关使用 psql 客户端应用程序以及SQL命令和语法的信息,请参阅《Greenplum参考指南》。
使用PgBouncer连接池
PgBouncer工具可以管理PostgreSQL和Greenplum数据库连接的连接池。
以下主题描述了如何在Greenplum数据库中设置和使用PgBouncer。有关在PostgreSQL上使用PgBouncer的信息,请参考 PgBouncer网站。
父主题: 访问数据库
概述
数据库连接池是数据库连接的缓存。一旦建立了连接池,连接池就消除了创建新数据库连接的开销,因此客户端的连接速度大大加快,服务器的负载也降低了。
来自PostgreSQL社区的PgBouncer连接池,随附在您的Greenplum数据库安装中。PgBouncer是用于Greenplum和PostgreSQL的轻量级连接池管理器。PgBouncer为每个数据库和用户的组合维护了一个连接池。PgBouncer要么为客户端创建新的数据库连接,要么为相同的用户和数据库重用现有的连接。当客户端断开连接时,PgBouncer将连接返回到池以供重新使用。
PgBouncer有三种池模式来共享连接
- 会话池 –客户端连接时,只要它保持连接状态,便会为其分配一个连接。当客户端断开连接时,连接将放回池中。
- 事务池 –在事务期间将连接分配给客户端。当PgBouncer通知事务已完成时,连接将放回池中。此模式只能与不使用依赖于会话的功能的应用程序一起使用。
- 语句池 –语句池就像事务池一样,但是不允许多语句事务。此模式的目标是为了在客户端上强制执行自动提交模式,且针对PostgreSQL上的PL/Proxy。
可以为PgBouncer设置一种默认的池模式,并且该模式可以被各数据库和用户覆盖。
PgBouncer支持PostgreSQL和Greenplum数据库共享的标准连接接口。Greenplum数据库客户端应用程序(例如psql)连接到运行PgBouncer的主机和端口,而不是Greenplum数据库master的主机和端口。
PgBouncer有一个类psql的管理控制台界面。授权用户可以通过它连接到一个虚拟数据库来监控和管理PgBouncer。您可以通过管理控制台来管理PgBouncer后台进程, 也可以用控制台在运行时更新和重新载入PgBouncer配置,而无需停止和重启PgBouncer进程。
PgBouncer原生支持TLS。
迁移PgBouncer
迁移到新的Greenplum数据库版本时,必须将PgBouncer实例迁移到新版本的Greenplum数据库安装中。
- 如果要迁移到5.8.x或更早版本的Greenplum数据库,可以在不丢弃连接的情况下迁移PgBouncer。采用带-R的选项和配置文件的命令启动新的PgBouncer 进程:
$ pgbouncer -R -d pgbouncer.ini
-R (重启)选项使新进程通过Unix套接字连接到旧进程的控制台,并发出以下命令:
SUSPEND; SHOW FDS; SHUTDOWN;
新进程检测到旧进程已消失时,它将继续使用旧连接进行工作。这是可能的,因为SHOW FDS命令将实际的文件描述符发送到新进程。如果由于任何原因而过渡失败,请杀掉新进程,然后旧进程将恢复。
- 如果要迁移到Greenplum数据库5.9.0或更高版本,则必须在旧版本安装中关闭PgBouncer实例,然后在新安装中重新配置并启动PgBouncer。
- 如果您在旧安装中使用stunnel保护的PgBouncer连接,则必须使用PgBouncer 1.8.1和更高版本的内置TLS功能,在新安装中配置SSL/ TLS。
- 如果在旧安装中使用了LDAP身份验证,则必须使用PgBouncer 1.8.1和更高版本的内置PAM集成功能,在新安装中配置LDAP。您还必须移除或替换auth_file中所有 以ldap://开头的密码串。
配置PgBouncer
您可以通过配置文件配置PgBouncer和它对Greenplum数据库的访问。此配置文件,通常称为pgbouncer.ini, 提供了Greenplum数据库的位置信息。pgbouncer.ini文件也指定PgBouncer的进程、连接池、 授权用户和授权配置。
pgbouncer.ini配置文件示例内容如下:
[databases]
postgres = host=127.0.0.1 port=5432 dbname=postgres
pgb_mydb = host=127.0.0.1 port=5432 dbname=mydb
[pgbouncer]
pool_mode = session
listen_port = 6543
listen_addr = 127.0.0.1
auth_type = md5
auth_file = users.txt
logfile = pgbouncer.log
pidfile = pgbouncer.pid
admin_users = gpadmin
有关PgBouncer配置文件格式及其支持的配置属性列表,请参阅pgbouncer.ini参考页。
当客户端连接到PgBouncer时,连接池从pgbouncer.ini配置文件中查找所请求的数据库(可能是实际数据库的别名)对应的主机名、端口号和数据库名。配置文件还定义了对数据库有效的授权模式。
PgBouncer需要一个授权文件,它是一个包含Greenplum数据库用户和密码列表的文本文件。 文件内容与pgbouncer.ini中配置的auth_type 授权类型密切相关。密码可以是明文或MD5编码的字符串。您还可以配置PgBouncer来查询目标数据库,以获取不在授权文件中的用户的密码信息。
PgBouncer身份验证文件格式
PgBouncer要求有其自己的用户授权文件。您可以在pgbouncer.ini配置文件的auth_file属性中定义文件名。auth_file是一个文本文件,其格式如下:
"username1" "password" ...
"username2" "md5abcdef012342345" ...
uth_file为每个用户占用一行。每行必须至少有两个字段,并且两个字段都用双引号引起来(”)。第一个字段标识Greenplum数据库用户名。第二个字段是明文或MD5编码的密码。PgBouncer忽略该行的其余部分。
(auth_file文件格式与Greenplum数据库所用的授权信息文件pg_auth相似。PgBouncer可以直接使用Greenplum数据库授权文件。)
使用MD5编码的密码,其密码格式为:
"md5" + MD5_encoded(<password><username>)
您可以从pg_shadow视图中获取所有Greenplum数据库用户的MD5编码的密码。
为PgBouncer配置基于HBA的身份验证
PgBouncer支持基于HBA的授权。要为PgBouncer配置基于HBA的授权,请在pgbouncer.ini配置文件中设置auth_type=hba,并在pgbouncer.ini文件中配置参数auth_hba_file,它是HBA格式的文件名。
名称为hba_bouncer.conf的PgBouncer HBA文件的内容如下:
local all bouncer trust
host all bouncer 127.0.0.1/32 trust
相关pgbouncer.ini配置文件中的对应配置部分:
[databases]
p0 = port=15432 host=127.0.0.1 dbname=p0 user=bouncer pool_size=2
p1 = port=15432 host=127.0.0.1 dbname=p1 user=bouncer
...
[pgbouncer]
...
auth_type = hba
auth_file = userlist.txt
auth_hba_file = hba_bouncer.conf
...
有关PgBouncer支持的HBA授权文件格式的信息,请参阅PgBouncer文档中的HBA文件格式讨论。
启动PgBouncer
您可以在Greenplum数据库master主机或其他服务器上运行PgBouncer。如果在单独的服务器上安装PgBouncer,则可以使用PgBouncer管理控制台,通过更新PgBouncer配置文件并重新载入配置,可以轻松地将客户端连接切换到备用master。
请按照以下步骤设置PgBouncer。
- 创建一个PgBouncer配置文件。例如,将以下文本添加到文件pgbouncer.ini中:
[databases] postgres = host=127.0.0.1 port=5432 dbname=postgres pgb_mydb = host=127.0.0.1 port=5432 dbname=mydb [pgbouncer] pool_mode = session listen_port = 6543 listen_addr = 127.0.0.1 auth_type = md5 auth_file = users.txt logfile = pgbouncer.log pidfile = pgbouncer.pid admin_users = gpadmin
该文件列出了数据库及其连接的详细信息。该文件还配置了PgBouncer实例。有关PgBouncer配置文件的格式和内容的信息,请参考pgbouncer.ini参考页面。
- 创建一个授权文件。文件名应该和pgbouncer.ini文件中定义的auth_file 参数名字一样,users.txt。每行包含一个用户名和密码。密码的格式应该匹配PgBouncer 配置文件中定义的auth_type。如果auth_type参数是plain,密码字符串是明文密码,例如:
"gpadmin" "gpadmin1234"
如果auth_type是md5,授权字段必须是MD5编码。MD5编码的密码格式为:
"md5" + MD5_encoded(<password><username>)
- 开始启动 gbouncer:
$ $GPHOME/bin/pgbouncer -d pgbouncer.ini
-d选项将PgBouncer作为后台(守护程序)进程运行。有关pgbouncer的命令语法和选项,请参阅pgbouncer参考页。
- 更新您的客户端应用程序连接到 pgbouncer,以代替直接连接到Greenplum数据库服务器。例如, 连接到上面配置的Greenplum数据库mydb,运行psql 如下:
$ psql -p 6543 -U someuser pgb_mydb
-p选项的值代表您配置的PgBouncer实例的listen_port。
管理PgBouncer
PgBouncer提供一个类psql的管理控制台,可以通过指定PgBouncer端口号和名为pgbouncer的虚拟数据库,来登录到PgBouncer管理控制台。控制台接受类SQL的命令,这些命令可用于监控、重新配置和管理PgBouncer。
有关PgBouncer管理控制台命令的完整文档,请参阅PgBouncer管理控制台命令参考。
请按照以下步骤,开始使用PgBouncer管理控制台。
- 用 psql 登录到 pgbouncer 虚拟数据库:
$ psql -p 6543 -U username pgbouncer
username必须是pgbouncer.ini配置文件中admin_users参数中所列出的值。如果pgbouncer进程运行在用户登录的当前Unix用户的UID下,您还可以用该用户名登录。
- 要查看可用的PgBouncer管理控制台命令,请运行 SHOW help 命令:
pgbouncer=# SHOW help; NOTICE: Console usage DETAIL: SHOW HELP|CONFIG|DATABASES|POOLS|CLIENTS|SERVERS|VERSION SHOW FDS|SOCKETS|ACTIVE_SOCKETS|LISTS|MEM SHOW DNS_HOSTS|DNS_ZONES SHOW STATS|STATS_TOTALS|STATS_AVERAGES SET key = arg RELOAD PAUSE [<db>] RESUME [<db>] DISABLE <db> ENABLE <db> KILL <db> SUSPEND SHUTDOWN
- 如果您对PgBouncer配置文件pgbouncer.ini做了修改, 可以用RELOAD命令重载它:
pgbouncer=# RELOAD;
将PgBouncer客户端映射到Greenplum数据库服务器连接
要将PgBouncer客户端映射到Greenplum数据库服务器连接,请使用PgBouncer管理控制台命令SHOW CLIENTS和SHOW SERVERS:
- 用 ptr 和 link 将本地客户端连接映射到服务器连接。
- 使用客户端连接的 addr 和 port,标识来自客户端的TCP连接。
- 用 local_addr 和 local_port 标识到服务器的TCP连接。
数据库应用程序接口
您可能想要开发自己的客户端应用程序,来与Greenplum数据库交互。PostgreSQL为最常用的数据库应用编程接口(API)提供了若干数据库驱动,这些驱动也能与Greenplum 数据库一起使用。这些驱动可单独下载。每个驱动(PostgreSQL随附的libpq除外)都是一个独立的PostgreSQL开发项目且必须下载、安装和配置,来连接到Greenplum数据库。可用的驱动如下:
API | PostgreSQL驱动 | 下载链接 |
---|---|---|
ODBC | Greenplum DataDirect ODBC驱动程序 | https://network.pivotal.io/products/pivotal-gpdb |
JDBC | Greenplum DataDirect JDBC驱动程序 | https://network.pivotal.io/products/pivotal-gpdb |
Perl DBI | pgperl | https://metacpan.org/release/DBD-Pg |
Python DBI | pygresql | http://www.pygresql.org/ |
libpq C库 | libpq | https://www.postgresql.org/docs/9.4/libpq.html |
使用API访问Greenplum数据库的一般步骤是:
- 从合适来源下载您的编程语言平台和相应的API。例如,您可以从Oracle获得Java开发工具包(JDK)和JDBC API。
- 根据API规范编写您的客户端应用程序。对应用程序进行编程时,请注意Greenplum数据库中的SQL支持,不要包括任何不受支持的SQL语法。
更多信息,请参见《Greenplum数据库参考指南》。
下载适当的驱动并配置与Greenplum数据库Master的连接。
排除连接故障
有许多因素可能会阻止客户端应用程序成功连接到Greenplum数据库。本主题说明了连接问题的一些常见原因以及如何纠正它们。
问题 | 解决方案 |
---|---|
No pg_hba.conf entry for host or user | 要允许Greenplum数据库能够接受远程客户端连接,您必须配置Greenplum数据库Master实例,这样来自于客户端主机和数据库用户的连接才会被允许连接到Greenplum数据库。这可以通过在pg_hba.conf配置文件(位于Master实例的数据目录中)中增加合适的条目就能做到。更多详细信息,请参阅“ 允许连接到Greenplum数据库”。 |
Greenplum Database is not running | 如果Greenplum数据库Master实例关闭,则用户将无法连接。您可以通过在Greenplum的Master主机上运行gpstate工具来 验证Greenplum数据库系统是否正常运行。 |
Network problems
Interconnect timeouts | 如果用户从一个远程客户端连接到Greenplum Master主机,则网络问题可能会阻止连接(例如,DNS主机名解析问题、主机系统已关闭等)。为确保不是引起网络问题的原因,请从远程客户端主机连接到Greenplum主主机。例如: ping hostname 。
如果系统无法解析Greenplum数据库中涉及主机的主机名和IP地址,则查询和连接将失败。对于某些操作,到Greenplum数据库Master的连接会使用localhost而其他连接使用实际的主机名,因此您必须能够解析两者。如果遇到此错误,请首先确保可以通过网络从Master主机连接到Greenplum数据库阵列中的每一台主机。在Master和所有Segment的/etc/hosts文件中,确认有Greenplum数据库阵列所涉及所有主机的正确的主机名和IP地址。IP 127.0.0.1 必须解析为localhost。 |
Too many clients already | 默认情况下,Greenplum数据库被配置为在Master和每个Segment上分别允许最多250和 750个并发用户连接。超出该限制的连接尝试将被拒绝。此限制由Greenplum数据库Master的postgresql.conf配置文件中的max_connections参数控制。如果您为Master更改了此设置,则还必须在Segment上进行适当的更改。 |