我一向不喜欢mysql,这事在blog上说过很多次了。所以在我部署的几个wordpress实例中,有部分是使用postgresql数据库的。
用pgsql代替mysql的最大好处是资源可以节约很多。mysql即使只用MyISAM引擎,占用的内存也比标准配置的pgsql大得多——在跑同样的WP应用情况下。更不用说pgsql提供的功能比mysql的InnoDB还多——虽然在WP中用不到。
但是因为WP在代码中是直接使用mysql的,要实现数据库的更换,需要一个插件:PG4WP。不过它的最新版本也已经是两年前的1.3.0了,相当OUT,但是没办法,没有别的选择。
这个插件的实现原理是:动态替换wp-db.php的内容,把其中的mysql API替换为pgsql API(实际上是替换为一套中间API,然后可以通过配置选择使用mysql或是pgsql),最后通过eval运行这个替换后的wp-db.php。
eval……这个……的确比较简单粗暴一点,但是直接有效,性能也基本没有影响(pgsql对mysql的性能优势足以弥补PHP的这点性能损失)。
但是昨天更新到最新的WordPress 3.9以后,发现网站打不开了,看了一下日志,有这样的错误:
2014/05/04 22:16:22 [error] .... FastCGI sent in stderr: "PHP message: PHP Warning: Missing argument 3