数据库表名前缀(以及进程间共享表)

有些网络主机限制了客户只能拥有一个数据库,因此需要不能重复的表名。即使在这种情况下,管理员仍可以使用Drupal,甚至可以安多个Drupal,因为Drupal提供了表名前缀(table prefix)功能。

为了使用这项功能,你必须首先编辑脚本database/database.x,以创建带有你的前缀字串的数据库表。如果你要安装附加模块,你也需要修改数据库脚本里的INSERT和REPLACE语句来加上前缀(译注:Drupal 4.7模块自带的Install文件无需修改)。例如,改变以下格式的所有语句从:

CREATE TABLE access
INSERT INTO system VALUES 
('modules/filter.module','filter','module','',1,0,0);

变成

CREATE TABLE dr1_access
INSERT INTO dr1_system VALUES 
('modules/filter.module','filter','module','',1,0,0);

然后使用dr1_(举例)作为$db_prefix的值,写入到
sites/example.com/settings.php文件中。

你也可以使用脚本来自动完成这项工作,你可以同时更新多个站点,使用(bash shell)的命令行:

for F in '' prefix1 prefix2; do \
   for S in 'find ./modules --name \*mysql'; do \
      scripts/dbprefix.sh $F < $S | grep -v DROP |\
          mysql -h DBHOST -u DBUSER -pPASSWD DATABASE; \
      done;
   done

注意:不是所有数据库脚本都是以mysql结尾的,这里只是一个例子; '' 表示前缀为空的情况。

这里还有一个PHP脚本,用于为/drupal/sites/*下的所有站点创建所有数据库表,可以在DRUPAL-4-6下工作,访问数据库表创建脚本问题以获取更多信息。

如果你想在多个站点间共享用户,你需要按照下面的格式设置$db_prefix变量:

<?php
$db_prefix
= array(
 
'default' => 'thissite_',   
 
'authmap' => 'shared_',
 
'profile_fields' => 'shared_',
 
'profile_values' => 'shared_',
 
'role' => 'shared_',
 
'sequences' => 'shared_',
 
'sessions' => 'shared_',
 
'users' => 'shared_',
 
'users_roles' => 'shared_',
 
'users_uid_seq' => 'shared_', // 用于pgsql
);
?>

请访问共享表以及数据库间共享表一节获取更多信息。