Skip to content
Impulse SoftwareDOCS
Get modules

ImpulseDB Postgres

Troubleshooting

Common issues, what causes them, and where to look first. The audit log under Diagnostics → Activity is the catch-all for anything else.

Blank page or “cannot load Zend Extension”

Section titled “Blank page or “cannot load Zend Extension””
Install

Missing or too-old ionCube Loader. The distributed module is encoded and needs ionCube Loader 13 or later; without it it fatals silently. Check php -m | grep -i ionCube with the PHP binary your WHMCS uses — if empty, install the loader for your PHP version. Plesk and cPanel both offer it for their PHP builds.

Install

ImpulseCore isn’t installed or active, or is too old. ImpulseDB Postgres depends on ImpulseCore 1.61.13+. Install or update impulsecore, activate it under System Settings → Addon Modules, then re-activate ImpulseDB Postgres.

“Invalid CSRF token” on a form submission

Section titled ““Invalid CSRF token” on a form submission”
Install

Hard-refresh the browser tab to flush cached JS, then retry. The addon auto-injects a CSRF token into every form on page load — if you submit from a stale tab the token may have expired.

Provision

The module’s tasks (provision, usage, alert_detection, pg_upgrade) run on ImpulseCore’s cron runner. Run Diagnostics → Health Checks → Cron Jobs, then open ImpulseCore → Operations → Cron: Automation & Setup shows whether the runner is ticking and the crontab line to install (modules/addons/impulsecore/cron/runner.php, every 5 minutes). Verify the PHP binary path and WHMCS path in that line, and that the user running cron can read the WHMCS configuration. Without the line, tasks run only when WHMCS’s own cron fires.

Provision

Open the server’s row menu on the Infrastructure tab and choose 📜 View Log. The module reads /var/log/pg-bootstrap.log from the server through its Admin Proxy. Most failures land in:

  • DNS API token missing permissions — the Let’s Encrypt DNS-01 challenge fails. For Cloudflare the token needs Zone:DNS:Edit and Zone:Zone:Read.
  • Hostname doesn’t resolve yet — provider DNS hasn’t propagated. On shared servers, when the DNS-01 challenge isn’t available or fails, the setup waits up to 5 minutes for the hostname to resolve and tries an HTTP challenge before falling back to a self-signed certificate. Dedicated servers fall back to the self-signed certificate after one DNS-01 attempt.

Once the cause is fixed, 🔒 Reissue TLS on the row requests a certificate through the Admin Proxy.

Provision

The server didn’t finish within the provisioning timeout (default 10 min, configurable under Settings → General & Access → Provision Timeout). For a shared server, ↻ Retry destroys the failed VPS and creates a fresh one with the same config; 💥 Destroy server (available once no databases are on it) abandons the VPS and cleans up DNS.

In-flight dedicated servers on the Infrastructure tab

Section titled “In-flight dedicated servers on the Infrastructure tab”
Provision

A dedicated server that’s still being set up for a new order is listed under Dedicated Servers with a provisioning status — its full record is only created once setup completes. Releases before 1.10.0 didn’t list these; if you don’t see them, upgrade.

Provision

Each server renews its Let’s Encrypt certificate itself, with the DNS API token it received when it was set up. If that token is revoked, rotated, or loses its permissions (Zone:DNS:Edit / Zone:Zone:Read on Cloudflare), every server set up with it starts failing renewals 30 days before expiry. Updating the token under Settings → DNS & TLS only affects servers set up afterwards: Apply/Rebuild doesn’t send the token, and 🔒 Reissue TLS sends the current token only to a server that has no Let’s Encrypt certificate yet. A server that already has a certificate keeps the token it was set up with — the module has no action that replaces it — so rotate DNS tokens with care, and contact support if a server’s renewals are failing.

Customer can’t connect to their database

Section titled “Customer can’t connect to their database”
Runtime

Check, in order:

  • The customer is using the hostname and port shown on their service’s Connect & Access tab — their database hostname (by default pg-<service_id>.<your zone>, from Settings → Versions & Hostnames → Customer Hostname Template), port 5432 on dedicated plans, or the shared server’s PgBouncer port (6432 by default) on shared plans.
  • Their database name and username (by default impulse_<service_id> for both).
  • Their password — if forgotten, the customer can reset it from the client area.
  • The IP allowlist. A dedicated server only accepts connections from IPs on the customer’s allowlist. A shared server accepts TLS connections with a password from anywhere until the customer adds allowlist entries, then only from those IPs. Connections must use TLS.
Runtime

The snapshot freshness sweep raised an error-level alert because security_collect hasn’t refreshed a host’s snapshot in more than 3 days. Either the daily Core cron isn’t running, or the Collector errored on every recent attempt — the row shows the verbatim error. The most common cause is the server’s Admin Proxy not answering; check it with 📶 Test Admin Proxy on the server row.

Customer

Customers promote a replica from the Availability tab of a dedicated service, after typing PROMOTE — only if Settings → Replicas → Allow customers to promote a replica to primary is on (it’s off by default). Promotion runs through the Admin Proxy on both servers: it switches the old primary to read-only, promotes the replica, and points the primary hostname’s DNS records at the replica. Failures usually mean: the replica is far behind (the Availability tab shows its replication lag), one of the two Admin Proxies didn’t answer, or the DNS provider rejected the record update (check Settings → DNS & TLS). If the promotion step fails, the old primary is switched back to read-write. Diagnostics → Activity has the timeline.

Open a ticket at support.impulsesoftware.com or email [email protected], and include the report from Diagnostics → Help → Diagnostic Export → Generate Diagnostic Report — version info, system details, a settings summary with API keys masked, and recent audit log entries.

Contact support Back to docs