PostgreSQL for WordPress (PG4WP) gives you the possibility to install and use WordPress with a PostgreSQL database as a backend. It works by replacing calls to MySQL specific functions with generic calls that maps them to another database functions and rewriting SQL queries on the fly when needed.
Currently, support is focused on PostgreSQL, but other databases can be added quite easily by providing the appropriate ‘driver’. MySQL driver is enclosed, which just does “nothing”. If you need/wish support for another database, please feel free to contact the author, writing a driver is not really hard if you know a bit about SQL and the database you want support for.
If you want to use this plugin, you should be aware of the following : – WordPress with PG4WP is expected to be slower than the original WordPress with MySQL because PG4WP does much SQL rewriting for any page view – Some WordPress plugins should work ‘out of the box’ but many plugins won’t because they would need specific code in PG4WP
You shouldn’t expect any plugin specific code to be integrated into PG4WP except for plugins shipped with WordPress itself (such as Akismet). PG4WP 2.0 will have a mechanism to add plugin support.
You have to install PG4WP before configuring your WordPress installation for things to work properly.
This is because the database needs to be up and running before any plugin can be loaded.
Place your WordPress files in the right place on your web server.
Unzip the files from PG4WP and put the
pg4wpdirectory in your
You can modify this file to configure the database driver you wish to use Currently you can set ‘DB_DRIVER’ to ‘pgsql’ or ‘mysql’
You can also activate DEBUG and/or ERROR logs
Point your Web Browser to your WordPress installation and go through the traditional WordPress installation routine.
I have an error adding a new category
You should try to run
SELECT setval('wp_terms_seq', (SELECT MAX(term_id) FROM wp_terms)+1); to correct the sequence number for the
Note : you should replace wp_ with the appropriate table prefix if you changed it in your WordPress installation
Does plugin `put any plugin name here` work with PG4WP ?
There is no simple answer to this question. Plugins not doing any database calls will certainly work.
Database-intensive plugins may work, but most of them would require specific code in PG4WP to work.
You should backup your setup (at least database) and try to install the plugin to see if it works or not. Whether it worked or not, you should tell me the result of your test, so that I can create some kind of listing of working/not working plugins.
Contributors & Developers
“PostgreSQL for WordPress (PG4WP)” is open source software. The following people have contributed to this plugin.
Interested in development?
- Integrated changes pointed in http://vitoriodelage.wordpress.com/2014/06/06/add-missing-wpsql_errno-in-pg4wp-plugin/ to correct problems with WP 3.9.1
- Some cleanup in old code that is not needed anymore
- Enhanced wordpress-importer compatibility
- Optimizations in wpsql_insert_id()
- Added support for PostgreSQL 9.1+ (doesn’t break compatibility with older versions)
- Added support for specifying port in the server host (eg ‘localhost:3128’) (Patch from convict)
- Added a handle for converting CAST(… AS CHAR) to CAST(… AS TEXT) (Problem pointed out by Aart Jan)
- Added a filter to remove ‘IF NOT EXISTS’ for ‘CREATE TABLE’ queries
- Enhancements for WPMU support
- Corrected SQL_CALC_FOUND_ROWS handling, was broken by the latest code reorganisation
- Corrected ‘ON DUPLICATE KEY …’ handling (was not working at all)
- Modified SQL_CALC_FOUND_ROWS handling for correct paging
- Some conversion handling for WPMU to install correctly (WPMU not working yet though)
- Improved installation/upgrade handling code (better detection of indexes, ADD COLUMN support, …)
- Error logging is disabled in the distribution
- Added a handle for correct counting of users and roles
- Added MONTH and YEAR to the ‘INTERVAL…’ handling code
- Removed all ZdMultilang support hacks
- Disabled all ZdMultilang support hacks
- Fixed regressions that caused some WordPress features to not work properly
- Rewrote database connection handling so WordPress installation can tell you when your username and password are wrong
- Support for using an empty password for database connection Note : this requires setting ‘PG4WP_INSECURE’ to true in
db.phpfor PG4WP to accept this
- Some code optimizations
- Somewhat improved WordPress plugins compatibility
- Added ‘PG4WP_INSECURE’ parameter for future use
- Split ‘db.php’ to be just some kind of loader for PG4WP to ease upgrading
- Improved Akismet compatibility
- Upgrading works with minor errors (PostgreSQL complains about already existing relations) Tested successfully : 2.9.2 to 3.0.6 – 2.9.2 to 3.1.4 – 2.9.2 to 3.2.1
- Support for WordPress up to 3.2.1 (Installing WP 2.9.2, 3.0.6, 3.1.4 and 3.2.1 works smoothly)
- Implemented a generic “INTERVAL xx DAY|HOUR|MINUTE|SECOND” handler
- Backticks and capital text containing ‘ID’ now work
- Improved db.php to remove notices and possible fatal errors
- Improved dates functions handling
- PG4WP now appears in WordPress control panel and can be enabled/disabled but this has no real effect
- Added a correct plugin header into db.php to have correct informations shown in WordPress plugin Directory
- This release is identical to 1.1.0rc4, just has error logging deactivated in the distribution
- Corrected a typo in permalinks handling
- Reordered the date_funcs array (Thanks to Boris HUISGEN for reporting the problem and submitting a patch)
- Moved the hack about WP using meta_value = integer (instead of text) out of the SELECT handler
- Boris HUISGEN submitted a patch for permalinks to work properly
- Hack for WP using meta_value = integer (instead of text)
- Moved parts required only when installing/upgrading from driver_pgsql.php to a separate file The file is loaded only when needed so that memory footprint should be a bit smaller
- Added UNIX_TIMESTAMP support
- Added DATE_SUB support for Akismet 2.2.7
- Added DAYOFMONTH support (Thanks to Pete Deffendol for noticing the problem)
- Upgrading from WP 2.8.6 to WP 2.9.1 works with a minor error Upgrading should remove an index on table “wp_options” that may not exist, throwing an error
- Installing WP 2.9.1 works smoothly
- Generic hack to avoid duplicate index names
- REGEXP gets replaced with ‘~’
- Added a hack to handle “ON DUPLICATE KEY”
- Moved handling field names with CAPITALS near the end
- Added support for “INTERVAL 15 DAY” found in Akismet 2.2.7
- Updated support for plugin zdMultilang 1.2.5
- Got rid of some remaining hardcoded table prefix
- Added the possibility to log only errors
- Reorganisation of directory structure
- Updated installation procedure
- Changed the fake server version to 4.1.3
- Added support for Unix socket connections (just leave the “host” field empty when installing)
- Initial stable release.
- Code optimisation and reorganisation.
wp-db.phpwhen loading it, so no maintenance is needed anymore It also reduces the size of the archive 🙂
- Debug logs are now written in the
- Renamed the driver files
- MySQL’s DESCRIBE emulation ( for WordPress upgrade process )
- MySQL’s SHOW INDEX emulation ( for WordPress upgrade process )
- ALTER TABLE support ( for WordPress upgrade process )
- Added INDEX creation support when installing
- Cleaned type conversion Array
- Some code optimizations and cleanup
- One debug log file for each query type
- Tested successfully with WP 2.7.1 (Installs with no error + Upgrade to 2.8 OK with non blocking errors)
- Tested successfully with WP 2.6.5 (Installs with no error + Upgrade to 2.8 OK with non blocking errors)
- Tested successfully with WP 2.5.1 (Installs with no error + Upgrade to 2.8 OK)
- Ignore errors about non existing table “wp_options” while installing WordPress when debugging is on
- SQL_CALC_FOUND_ROWS emulation, to have correct posts paging
- Introduced support for the ZdMultiLang plugin
- Comments deletion now works again
- Most specific global variables renamed to have ‘pg4wp’ in their name
- Case insensitivity of MySQL ‘LIKE’ restored
- Importing WordPress eXtended RSS tested and seems to work