MageSentinel

WooCommerce HPOS: moving orders to their own tables safely

High-Performance Order Storage (HPOS) stores WooCommerce orders in dedicated tables instead of WordPress posts. It is faster and has been the default for new stores since WooCommerce 8.2 — but any plugin that reads or writes orders the old way can break when you switch.

All posts2 min read

Rows of storage drawers

What changes

Orders move from `wp_posts` and `wp_postmeta` to dedicated order tables. Plugins that use WooCommerce’s CRUD functions keep working; plugins that query posts directly do not see new orders, or write data that nothing reads.

WooCommerce shows incompatible plugins under WooCommerce → Settings → Advanced → Features. The HPOS documentation explains the modes.

Migrate with sync on

Enable compatibility mode first, so orders are written to both storages and kept in sync. Let the sync finish, then switch the authoritative storage to HPOS while keeping sync on for a while — you can switch back if something is wrong.

Test on staging first, like any change on the order path — the routine in updating WooCommerce plugins safely applies here too.

What to check

After switching, place orders with each payment method and confirm they appear correctly in the admin, in emails, in your ERP or fulfilment integration, and in reports. Confirm payment confirmations still update order status.

A checkout check with real order placement enabled confirms the order was created with the right total — the part of the flow HPOS actually touches.

How to check whether HPOS is on

Go to WooCommerce → Settings → Advanced → Features. Under Order data storage, “High-performance order storage” selected means HPOS is the authoritative storage; “WordPress posts storage” means it is not. The compatibility mode checkbox shows whether both storages are kept in sync.

With WP-CLI, `wp wc hpos status` reports the same, and `wp wc hpos count_unmigrated` shows how many orders still need syncing.

Rolling back

While compatibility mode is on, switching back is a setting: choose WordPress posts storage again and WooCommerce keeps reading orders from the posts tables. Without sync, orders created after the switch exist only in the HPOS tables, so turn sync back on and let it finish before switching.

Can WooCommerce run on PostgreSQL?

No. HPOS changes which tables hold orders, not the database engine: the new tables live in the same MySQL or MariaDB database as the rest of WordPress, and WordPress core supports only MySQL and MariaDB. There is no supported way to move WooCommerce orders to PostgreSQL; reporting copies are usually done by exporting or replicating to a separate warehouse.

Check your own store now with the free WooCommerce checkout checker: it walks the checkout in a real browser and shows the step where it stops.

Common questions

What is HPOS in WooCommerce?

High-Performance Order Storage: orders are stored in dedicated order tables instead of WordPress posts and post meta. It is the default for new stores since WooCommerce 8.2.

How do I know if a plugin is HPOS compatible?

WooCommerce lists plugins that have not declared compatibility under WooCommerce → Settings → Advanced → Features, and blocks switching while one is active unless you override it.

Can I switch back from HPOS?

Yes, as long as compatibility mode kept both storages in sync. Turn sync on, let it finish, then select WordPress posts storage again.

Does HPOS move WooCommerce to PostgreSQL?

No. The order tables stay in the same MySQL or MariaDB database; WordPress does not support PostgreSQL.