~/blog/tableau-background-tasks-extracts-failed-fix-2026
zsh
ANALYTICS

Tableau Background Tasks for Extracts Failed: We Fixed the PostgreSQL Driver Error in 10 Minutes

Engineering Team 2026-03-10

If you’ve landed here, your Tableau Background Tasks for Extracts are probably showing a string of failed refresh jobs, and you’re staring at this error:

“The drivers required to connect to the data source are not installed.”

Meanwhile, your users are seeing:

“An unexpected error occurred. Would you like to reset the view?”

How You’ll Typically Discover This Error

This error doesn’t always surface immediately. Here’s where Tableau Server admins first notice it:

Site Status > Background Tasks for Extracts

This is the most common discovery path. You open Site Status > Background Tasks for Extracts in the Tableau Server admin panel and see a string of failed extract refresh jobs. The error detail shows ConnectivityException with the “drivers required to connect to the data source are not installed” message. Scheduled extracts that were running fine — hourly, daily, weekly — suddenly all fail at once. If you’re seeing Tableau extract refresh failed across multiple PostgreSQL data sources simultaneously, this driver issue is almost certainly the cause.

Workbook and Dashboard Views

End users opening workbooks and dashboards connected to PostgreSQL data sources see the generic Tableau error: “An unexpected error occurred. Would you like to reset the view?” This gives no indication of the root cause — which is why checking Background Tasks for Extracts is the faster diagnostic path.

VizQL Server Logs

The tabprotosrv_vizqlserver_*.txt logs contain the full ConnectivityException with dse-type: NoDriver. This is the definitive confirmation, but most admins find the issue through the Background Tasks UI first.

Data Source Connection Tests

Attempting to edit or test a PostgreSQL data source connection from the Tableau Server web UI fails immediately with the driver error. Live connections and extract refreshes are both affected — any PostgreSQL connectivity requires the JDBC driver.

This guide walks through the exact root cause and fix — based on a real production incident we resolved on a Tableau Server 2025.3 deployment running on Linux.

The Error in Full

In the VizQL server logs (tabprotosrv_vizqlserver_*.txt), you’ll see something like:

{
  "sev": "warn",
  "k": "excp",
  "v": {
    "class": "postgres",
    "dse-type": "NoDriver",
    "excp-msg": "The drivers required to connect to the data source are not installed.",
    "excp-type": "ConnectivityException",
    "is-local-configuration-error": true
  }
}

Key fields to note:

  • class: postgres — the connector type is PostgreSQL
  • dse-type: NoDriver — no driver found
  • is-local-configuration-error: true — the problem is on the Tableau Server node itself

Tableau error code: 0xD9B681CB

What’s Actually Happening

Tableau Server’s VizQL process (tabprotosrv) uses the JDBC driver to connect to PostgreSQL data sources on Linux — not ODBC, despite what some log fields suggest (odbc-native-protocol is misleading here).

Tableau expects PostgreSQL JDBC drivers to live in a specific directory:

/opt/tableau/tableau_driver/jdbc/

If this directory doesn’t exist or is empty, Tableau cannot connect to any PostgreSQL data source and throws the NoDriver error. Every scheduled extract refresh will fail, and Background Tasks for Extracts will show a wall of red. This commonly happens after:

  • A fresh Tableau Server installation where the driver step was skipped
  • A VM snapshot restore where the driver directory wasn’t part of the image
  • A server migration or rebuild
  • An OS-level cleanup that removed custom directories

Understanding the Tableau driver requirements for your specific connector is critical before any deployment or migration.

Environment

ComponentVersion
Tableau Server2025.3.3 (also applies to 2021.1 through 2025.x)
OSLinux (RHEL, CentOS, Amazon Linux, Ubuntu)
ConnectorPostgreSQL (class: postgres)

The Fix

Step 1 — Confirm the Directory Is Missing

ls /opt/tableau/tableau_driver/jdbc/
# Expected: No such file or directory

Step 2 — Create the Directory

sudo mkdir -p /opt/tableau/tableau_driver/jdbc

Step 3 — Copy the JDBC Driver

Tableau ships the PostgreSQL JDBC jar inside its own package directory. No external download needed:

sudo cp /opt/tableau/tableau_server/packages/vizql.20253.26.0206.0336/postgresql-42.7.8.jar \
    /opt/tableau/tableau_driver/jdbc/

Replace 20253.26.0206.0336 with your actual Tableau version string. Find it with:

tsm version

If that path doesn’t exist, find the jar:

find /opt/tableau/tableau_server/packages/ -name "postgresql-*.jar" | head -5

Pick any one — they’re all the same version bundled across packages.

Step 4 — Verify

ls -la /opt/tableau/tableau_driver/jdbc/
# Should show: postgresql-42.7.8.jar

Step 5 — Restart Tableau Server

tsm restart

This takes 3–5 minutes. Once Tableau Server is back up, verify the fix by checking Site Status > Background Tasks for Extracts — previously failed extract refreshes should now complete successfully. Trigger a manual extract refresh on one of your PostgreSQL data sources to confirm before waiting for the next scheduled run.

What About the ODBC Driver?

You might be tempted to install postgresql-odbc via dnf or apt after seeing ODBC-related strings in the logs. We went down that path too during this incident.

While it’s true that tabprotosrv references ODBC internals, Tableau Server on Linux uses JDBC for PostgreSQL — not ODBC. Installing psqlodbc and registering it in /etc/odbcinst.ini will not resolve this error.

The fix is purely the JDBC jar in /opt/tableau/tableau_driver/jdbc/.

This is documented in the Tableau Linux driver installation guide, but it’s easy to miss during initial setup — especially when the error message points toward ODBC.

Why Does This Happen on Snapshot Restores?

If your Tableau Server was restored from a VM snapshot (for example, after an infrastructure outage), the /opt/tableau/tableau_driver/ directory may not have existed at snapshot time — especially if it was created after the initial server image was built. The first sign is usually Background Tasks for Extracts showing every scheduled refresh as failed.

This is a common pattern we see across data infrastructure incidents: configuration that works on the original server but isn’t captured in the provisioning pipeline. The same problem occurs with custom certificates, license files, and environment-specific configurations.

Preventing This in Infrastructure as Code

The long-term fix is to ensure the JDBC driver directory and its contents are part of your provisioning pipeline. Here’s how to handle it with common IaC tools.

Ansible

- name: Ensure Tableau JDBC driver directory exists
  file:
    path: /opt/tableau/tableau_driver/jdbc
    state: directory
    mode: '0755'

- name: Copy PostgreSQL JDBC driver
  copy:
    src: files/postgresql-42.7.8.jar
    dest: /opt/tableau/tableau_driver/jdbc/postgresql-42.7.8.jar
    mode: '0644'

Terraform + User Data

resource "aws_instance" "tableau_server" {
  # Works with any cloud provider's compute resource
  # Replace with azurerm_linux_virtual_machine, google_compute_instance, etc.

  user_data = <<-EOF
    #!/bin/bash
    mkdir -p /opt/tableau/tableau_driver/jdbc
    cp /opt/tableau/tableau_server/packages/vizql.*/postgresql-*.jar \
       /opt/tableau/tableau_driver/jdbc/ 2>/dev/null || true
  EOF
}

Packer (Machine Image Build)

provisioner "shell" {
  inline = [
    "sudo mkdir -p /opt/tableau/tableau_driver/jdbc",
    "sudo cp /opt/tableau/tableau_server/packages/vizql.*/postgresql-*.jar /opt/tableau/tableau_driver/jdbc/"
  ]
}

Adding this to your infrastructure automation pipeline ensures the driver survives any rebuild, restore, or migration scenario.

Quick Troubleshooting Checklist

If you’re still seeing failed extract refreshes in Background Tasks for Extracts after following the steps above:

  • Confirm the jar file exists: ls /opt/tableau/tableau_driver/jdbc/postgresql-*.jar
  • Check file permissions: the tableau user must be able to read the jar
  • Verify Tableau restarted fully: tsm status -v — all processes should show “running”
  • Run a manual extract refresh and check Background Tasks for Extracts for a successful status
  • Check you’re looking at the right connector: the log must show class: postgres, not class: mysql or another type
  • If using a different database, check the Tableau driver page for the correct JDBC jar

Other Connectors That Hit the Same Error

This same NoDriver / ConnectivityException pattern applies to other database connectors on Tableau Server Linux. The fix is always the same: place the correct JDBC jar in /opt/tableau/tableau_driver/jdbc/.

ConnectorJDBC Jar Needed
PostgreSQLpostgresql-42.x.x.jar
MySQLmysql-connector-j-8.x.x.jar
Amazon Redshiftredshift-jdbc42-2.x.x.jar
Snowflakesnowflake-jdbc-3.x.x.jar
DatabricksDatabricksJDBC42.jar

Check the Tableau driver download page for the latest versions.


Expert Tableau and Data Infrastructure Support

This incident was diagnosed and resolved as part of our production support engagement. A missing JDBC jar is a 10-minute fix — but finding it in the logs without experience can waste hours.

Our team provides Tableau professional services and data analytics consulting to help you:

  • Deploy and maintain Tableau Server with production-grade infrastructure on any cloud or on-premises
  • Automate Tableau provisioning with Terraform, Ansible, and CI/CD pipelines
  • Monitor Tableau health with observability stacks that catch driver, licensing, and performance issues before users report them

We specialise in data platform infrastructure across the UK and Gulf region.

Get expert Tableau infrastructure support →

Continue exploring these related topics

$ suggest --service

Need expert help?

Book a free 30-minute consultation to discuss your infrastructure and DevOps challenges.

Get started
Chat with real humans
Chat on WhatsApp