32.4 Gerrit的数据库访问
之所以要对数据库访问多说几句,是因为在Web界面往往无法配置对Gerrit的一些设置,需要直接修改数据库,而大部分用户在安装Gerrit时都会选用内置的H2数据库,可能大部分用户并不了解如何操作H2数据库。
实际上无论选择何种数据库,Gerrit都提供了两种数据库操作的命令行接口。第一种方法是在服务器端调用gerrit.war包中的命令入口,另外一种方法是远程SSH调用接口。
对于第一种方法,需要在服务器端执行,而且如果使用的是H2内置数据库还需要先将Gerrit服务停止。先以安装用户的身份进入Gerrit部署目录下,再执行命令调用gerrit.war包,如下:
$java-jar bin/gerrit.war gsql
Welcome to Gerrit Code Review 2.1.5.1
(H2 1.2.134(2010-04-23))
Type '\h' for help.Type '\r' to clear the buffer.
gerrit>
当出现"gerrit>"提示符时,就可以输入SQL语句操作数据库了。
第一种方式需要登录到服务器上,而且操作H2数据库时还要预先停止服务,显然很不方便。但是这种方法也有存在的必要,就是不需要认证,尤其是在管理员账号尚未建立之前就可以查看和更改数据库。
当在Gerrit上注册了第一个账号时,即拥有了管理员账号,正确为该账号配置公钥之后,就可以访问Gerrit提供的SSH登录服务。Gerrit的SSH协议提供访问数据库的第二种方法。下面的命令就是用管理员公钥登录Gerrit的SSH服务器,操作数据库。虽然演示用的是本机地址(localhost),但是操作远程服务器也是可以的,只要拥有管理员权限。
$ssh-p 29418 localhost gerrit gsql
Welcome to Gerrit Code Review 2.1.5.1
(H2 1.2.134(2010-04-23))
Type '\h' for help.Type '\r' to clear the buffer.
gerrit>
运行命令gerrit gsql连接Gerrit的SSH服务。当连接上数据库管理接口后,便出现“gerrit>”提示符,在该提示符下可以输入SQL命令。下面的示例中,使用的数据库的后端为H2内置数据库。
可以输入show tables命令显示数据库列表。
gerrit>show tables;
TABLE_NAME|TABLE_SCHEMA
——————————————+——————-
ACCOUNTS|PUBLIC
ACCOUNT_AGREEMENTS|PUBLIC
ACCOUNT_DIFF_PREFERENCES|PUBLIC
ACCOUNT_EXTERNAL_IDS|PUBLIC
ACCOUNT_GROUPS|PUBLIC
ACCOUNT_GROUP_AGREEMENTS|PUBLIC
ACCOUNT_GROUP_MEMBERS|PUBLIC
ACCOUNT_GROUP_MEMBERS_AUDIT|PUBLIC
ACCOUNT_GROUP_NAMES|PUBLIC
ACCOUNT_PATCH_REVIEWS|PUBLIC
ACCOUNT_PROJECT_WATCHES|PUBLIC
ACCOUNT_SSH_KEYS|PUBLIC
APPROVAL_CATEGORIES|PUBLIC
APPROVAL_CATEGORY_VALUES|PUBLIC
CHANGES|PUBLIC
CHANGE_MESSAGES|PUBLIC
CONTRIBUTOR_AGREEMENTS|PUBLIC
PATCH_COMMENTS|PUBLIC
PATCH_SETS|PUBLIC
PATCH_SET_ANCESTORS|PUBLIC
PATCH_SET_APPROVALS|PUBLIC
PROJECTS|PUBLIC
REF_RIGHTS|PUBLIC
SCHEMA_VERSION|PUBLIC
STARRED_CHANGES|PUBLIC
SYSTEM_CONFIG|PUBLIC
TRACKING_IDS|PUBLIC
(27 rows;65 ms)
输入show columns命令显示数据库的表结构。
gerrit>show columns from system_config;
FIELD|TYPE|NULL|KEY|DEFAULT
—————————————-+———————+———+——-+————
REGISTER_EMAIL_PRIVATE_KEY|VARCHAR(36)|NO||''
SITE_PATH|VARCHAR(255)|YES||NULL
ADMIN_GROUP_ID|INTEGER(10)|NO||0
ANONYMOUS_GROUP_ID|INTEGER(10)|NO||0
REGISTERED_GROUP_ID|INTEGER(10)|NO||0
WILD_PROJECT_NAME|VARCHAR(255)|NO||''
BATCH_USERS_GROUP_ID|INTEGER(10)|NO||0
SINGLETON|VARCHAR(1)|NO|PRI|''
(8 rows;52 ms)
关于H2数据库更多的SQL语法,请参考:http://www.h2database.com/html/grammar.html。下面开始介绍Gerrit的使用。