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的使用。