因为工作中需要对Confluence Wiki的页面做统计,而它本身又没有提供这方便的功能。所以研究了下它的数据库中的几个表,记录如下:
表content存放了页面的基本信息。
列CONTENTID为主键id。格式为整型,不会自动生成,需要手动指定,且此页的子页面的id必须大于它的id。
列CONTENTTYPE为页面的类型,普通页面都为"PAGE"。
列TITLE为页面的标题。
列VERSION为页面的版本,对于新增的页面都为"1"。
列CREATOR为页面的创建者。
列CREATIONDATE为页面创建时的日期时间。
列LASTMODIFIER为最后一次修改的用户。
列LASTMODDATE为最后一次修改的时间。
列VERSIONCOMMENT/PREVVER为版本控制相关的内容,可以设为null。
列CONTENT_STATUS统一设为current。
列SPACEID为页面所在空间的空间id号,和表spaces中的列SPACEID对应。
列PARENTID为父页面的id,如果为第一级则设为null。
列MESSAGEID/PAGEID/PARENTCOMMENTID/USERNAME与普通页面无关,可都设为null。
表bodycontent存放了页面的具体内容。
列BODYCONTENTID为表的主键id。
列BODY为页面的具体内容。(使用wiki标记存储)
列CONTENTID同表content中的列CONTENTID对应。
表confancestors存放了页面之间的树形关系
列DESCENDENTID为页面的id,同content.CONTENTID相对应。
列ANCESTORID为当前级别上此页面的父页面的id
列ANCESTORPOSITION为当前级别
比如空间的home页id为65539,其下有1个页面id为10000,此页面下又有一个页面id为10001,那此表里应该有如下记录:
10000,65539,0
10001,65539,0
10001,10000,1
几个可能有用的sql:
查询所有非底层页面的页面
select * as contentid from CONFANCESTORS
查询某个页面下所有底层页面的个数
select count(DESCENDENTID) from confancestors where confancestors.ANCESTORID=某id and DESCENDENTID not in (select ANCESTORID as contentid from CONFANCESTORS)