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