MediaWiki 与 SQLite:页面存储在哪里?

MediaWiki 与 SQLite:页面存储在哪里?

mediawiki-1.20.2页面内容存储在哪里SQLite 3.7.13?我想转储 markdown 代码。我想获取点击“编辑”按钮时显示的所有页面。

maintenance/sqlite.php --backup-to脚本不起作用。

SELECT page_title FROM page;仅查询页面标题。

这些是关系:

 sqlite> .tables
 archive               module_deps           searchindex_segdir  
 category              msg_resource          searchindex_segments
 categorylinks         msg_resource_links    site_identifiers    
 change_tag            objectcache           site_stats          
 external_user         oldimage              sites               
 externallinks         page                  tag_summary         
 filearchive           page_props            templatelinks       
 hitcounter            page_restrictions     text                
 image                 pagelinks             transcache          
 imagelinks            protected_titles      updatelog           
 interwiki             querycache            uploadstash         
 ipblocks              querycache_info       user                
 iwlinks               querycachetwo         user_former_groups  
 job                   recentchanges         user_groups         
 l10n_cache            redirect              user_newtalk        
 langlinks             revision              user_properties     
 log_search            searchindex           valid_tag           
 logging               searchindex_content   watchlist           
 sqlite> 

除了选择之外,我没有运行任何 DDL 或 DML 语句。

答案1

页面的文本存储在桌子text。要到达那里page,你需要经过revision。SQL 查询可能类似于:

SELECT page_title, old_text
FROM page
JOIN revision ON page_latest = rev_id
JOIN text ON rev_text_id = old_id

答案2

要将 Mediawiki 页面导出为纯文本,查询svick 的回答在 1.31 版本之前运行良好。

从那时起,随着多内容修订,结构已经改变,可以在字段中找到页面当前文本的content_addressidcontent桌子

这是我现在使用的,带有 Mediawiki 1.35 和 PostgreSQL 数据库:

SELECT page_title, page_touched, old_text
FROM page
JOIN slots       ON page.page_latest       = slots.slot_revision_id
JOIN "content"   ON slots.slot_content_id  = content.content_id
JOIN pagecontent ON old_id = REGEXP_REPLACE(content.content_address, '^\D*','')::INTEGER
WHERE page_namespace = 0

对于 SQLite 或 MySQL,该表pagecontent名为text,并且该regexp_replace函数可能需要进行调整。

相关内容