---
id: overview
title: ToolJet PostgreSQL 13 to 16 Upgrade Script Guide
---
This guide covers the safe upgrade of ToolJet's in-built PostgreSQL from version 13 to version 16 using the automated upgrade script. This script is specifically designed for **Docker deployments with in-built PostgreSQL** as described in the [ToolJet Docker setup documentation](/docs/setup/docker).
:::caution
This script is **ONLY** for ToolJet Docker deployments using the in-built PostgreSQL container (postgres:13). **Do NOT use this script if you're using external PostgreSQL** or cloud databases.
:::
## When to Use This Script
### Use This Script If
- You're running ToolJet with Docker Compose
- Your setup uses the **in-built PostgreSQL container** (postgres:13)
- Your `docker-compose.yml` contains `image: postgres:13`
- You want to upgrade to PostgreSQL 16 for better performance and feature
### Do Not Use This Script If
- You're using external PostgreSQL (AWS RDS, Google Cloud SQL, etc.)
- You're using ToolJet Cloud
- Your setup uses AMI, ECS, or Kubernetes deployments
- You're already running PostgreSQL 16
## Prerequisites and Safety Measures
### Critical Safety Requirements
1. **Complete System Backup**
```bash
# Create a full backup of your ToolJet directory
cp -r /path/to/your/tooljet-directory /path/to/backup/tooljet-backup-$(date +%Y%m%d)
# Backup your .env file separately
cp .env .env.backup.$(date +%Y%m%d)
# Backup docker-compose.yml
cp docker-compose.yml docker-compose.yml.backup.$(date +%Y%m%d)
```
1. **VM-Level Backup (If Running in Virtual Machine)**
:::important
**HIGHLY RECOMMENDED: Take a VM snapshot/backup before proceeding**
:::
If your ToolJet Docker setup is deployed in a VM (AWS EC2, Google Compute Engine, Azure VM, VMware, etc.):
- **For cloud VMs**: Use your cloud provider's snapshot feature (AWS EBS snapshots, GCP disk snapshots, Azure VM snapshots, etc.)
- **For local VMs**: Use your hypervisor's snapshot feature (VMware vSphere, VirtualBox, Hyper-V, etc.)
**Benefits of VM-level backup:**
- **Complete system restore** capability in case of catastrophic failure
- **Instant rollback** to exact pre-upgrade state
- **Operating system and all dependencies** preserved
- **Network and security configurations** maintained
2. **Test on Staging First**
**CRITICAL RECOMMENDATION**: Before upgrading production, test the upgrade process on a staging/development environment:
**Staging Environment Setup:**
1. **Create a copy of your production environment**:
- **Option 1**: Clone your VM using your cloud provider's or hypervisor's snapshot/cloning feature
- **Option 2**: Copy your ToolJet directory (including the `postgres_data` folder) to a separate test server with production data
2. **Run the upgrade script on staging**:
```bash
cd /path/to/staging-tooljet
./upgrade_postgres_13_to_16.sh
```
3. **Verify staging upgrade success**:
- Test all ToolJet functionality
- Verify all workspaces work correctly
- Check performance and stability
- Document any issues encountered
4. **Apply lessons learned to production**:
- Note any specific configurations needed
- Estimate actual downtime required
- Prepare for any edge cases discovered
**Staging Benefits:**
- **Risk-free testing** of the upgrade process
- **Accurate time estimation** for production upgrade
- **Issue identification** before production impact
- **Team confidence** in the upgrade process
2. **System Requirements**
- **Free disk space**: At least 2x your current `postgres_data` folder size
- **Memory**: Minimum 4GB available RAM during upgrade
- **Time window**: Plan for 30-60 minutes of downtime
- **Docker**: Docker and Docker Compose must be running
- **Permissions**: User must have sudo/admin rights
3. **Pre-Flight Checklist**
- [ ] ToolJet is currently working normally
- [ ] All users have been notified of planned downtime
- [ ] Recent application backup has been tested
- [ ] No critical operations are running
- [ ] Docker containers are healthy: `docker-compose ps`
- [ ] Sufficient disk space available: `df -h`
### Environment Validation
#### Required Files Check
```bash
# Verify you're in the correct directory
ls -la
# Should show: docker-compose.yml, .env, postgres_data/
# Check current PostgreSQL version
docker-compose exec postgres psql -U postgres -c "SELECT version();"
# Should show: PostgreSQL 13.x
```
#### Container Status Check
```bash
# All containers should be running
docker-compose ps
# Check PostgreSQL container specifically
docker-compose logs postgres | tail -10
```
## Script Features and Capabilities
### Safety Features
- **Comprehensive backups**: Database dumps, volume copies, and configuration files
- **Atomic operations**: All-or-nothing upgrade approach
- **Rollback capability**: Automatic cleanup on failure with restore instructions
- **Data preservation**: Zero data loss design with multiple backup layers
- **Role management**: Automatic detection and recreation of workspace roles
### Technical Capabilities
- **Cross-platform**: Works on macOS and Linux
- **Progress tracking**: 11-step process with detailed logging
- **Error handling**: Comprehensive error detection and recovery
- **Role fixing**: Standalone mode to fix role issues post-upgrade
- **Verification**: Multi-layer verification of upgrade success
## Performance Benefits of PostgreSQL 16
After upgrading, you should experience:
- 20-30% better query performance
- Improved memory management
- Better connection handling
- Enhanced security features
- More efficient indexing