Azure PostgreSQL 13 to 16 Upgrade
This comprehensive guide covers upgrading your Azure Database for PostgreSQL Flexible Server from version 13 to 16 and configuring SSL connections for ToolJet across different Azure deployment methods: Azure Kubernetes Service (AKS) and Azure Container Instances.
Pre Requisites
- Existing ToolJet deployment with PostgreSQL 13 on Azure Database for PostgreSQL Flexible Server
- Azure Database for PostgreSQL Flexible Server 13 instance
- Administrative access to your deployment environment
- Backup of your existing database
- Azure CLI (
az
) installed and configured - Appropriate Azure RBAC permissions for PostgreSQL operations
Critical Safety Measures and Testing Strategy
NOTE: Before upgrading your production database, follow this comprehensive safety and testing approach:
Phase 1: Production Database Point-in-Time Restore Testing
-
Create Production Database Point-in-Time Restore
- Using Azure Portal
- Using Azure CLI
- Navigate to Azure Database for PostgreSQL Flexible Server in the Azure Portal
- Select your production PostgreSQL 13 instance
- Click Restore in the toolbar
- Select Point-in-time restore
- Configure restore settings:
- Server name:
production-pg13-test-restore
- Restore point: Choose a recent timestamp (within the last 7 days)
- Location: Same as production (or different for isolation)
- Compute + storage: Same as production (or smaller for testing)
- Networking: Same VNet configuration as production
- Server name:
- Click Review + create
- Click Create
- Wait for restoration completion (10-30 minutes depending on database size)
# Create a point-in-time restore of your production database for testing
az postgres flexible-server restore \
--resource-group your-resource-group \
--name production-pg13-test-restore \
--source-server your-production-server \
--restore-time "2024-12-01T10:00:00Z" \
--location eastus
# Monitor restore progress
az postgres flexible-server show \
--resource-group your-resource-group \
--name production-pg13-test-restore \
--query "state" -
Enable Required Extensions (For New Database Instances)
noteIf you're creating a new database instance for testing instead of using a point-in-time restore, you'll need to enable the required extensions that ToolJet depends on.
- Using Azure Portal
- Using Azure CLI
- Navigate to your test database instance:
- Go to Azure Database for PostgreSQL Flexible Server → Servers
- Select your database instance
- Enable Extensions:
- Go to Settings → Server parameters
- Search for azure.extensions
- In the Value field, add the following extensions (comma-separated):
citext,pg_cron,pgcrypto,uuid-ossp
- Click Save
- Wait for the server to restart (this may take a few minutes)
# Enable required extensions for ToolJet
az postgres flexible-server parameter set \
--resource-group your-resource-group \
--server-name production-pg13-test-restore \
--name azure.extensions \
--value "citext,pg_cron,pgcrypto,uuid-ossp" -
Verify Extensions (after server restart):
# Connect to database and verify extensions are available
psql "postgresql://username:password@production-pg13-test-restore.postgres.database.azure.com:5432/database?sslmode=require" -c "SELECT name FROM pg_available_extensions WHERE name IN ('citext', 'pg_cron', 'pgcrypto', 'uuid-ossp') ORDER BY name;"
Point-in-time restores automatically inherit the extensions configuration from the source server, so this step is typically only needed for new database instances.
-
Upgrade Test Database to PostgreSQL 16
- Using Azure Portal
- Using Azure CLI
- Navigate to your test restore instance:
- Go to Azure Database for PostgreSQL Flexible Server → Servers
- Select your test restore:
production-pg13-test-restore
- Verify server is ready:
- Ensure server status shows Available
- Check that there are no ongoing operations
- Start the upgrade process:
- In the Overview section, look for the Upgrade option
- Click Upgrade
- Alternatively, go to Settings → Server parameters and look for upgrade options
- Choose database version:
- Current version will show: PostgreSQL 13
- Target version: Select PostgreSQL 16
- Review the upgrade notes:
- ⚠️ The major version upgrade action is irreversible
- Server name remains unchanged after upgrade
- Minor version will be the most recent supported
- Confirm upgrade:
- Review all settings and warnings
- Click Upgrade to begin the process
- Monitor upgrade progress:
- Wait for upgrade completion (15-45 minutes depending on database size)
- Server status will show Updating during upgrade
- Verify PostgreSQL version shows 16.x in server details once complete
# Upgrade the test restore to PostgreSQL 16
az postgres flexible-server upgrade \
--resource-group your-resource-group \
--name production-pg13-test-restore \
--version 16
# Monitor upgrade progress
az postgres flexible-server show \
--resource-group your-resource-group \
--name production-pg13-test-restore \
--query "{name:name,state:state,version:version}"
Phase 2: Staging Environment Testing
Before upgrading your production database, you MUST thoroughly test the upgrade process and application functionality in a staging environment using the restored and upgraded test database.
-
Deploy Staging ToolJet Instance
- Set up staging environment using your preferred deployment method:
- Azure Kubernetes Service (AKS): Follow AKS deployment section below
- Azure Container Instances: Follow Azure Container deployment section below
- Configure staging to use the upgraded test database:
- Update your configuration files (.env, ConfigMaps, deployment templates, etc.)
- Use the test database connection details:
production-pg13-test-restore.postgres.database.azure.com
- Configure SSL requirements as detailed in your deployment method section
- Set up staging environment using your preferred deployment method:
-
Comprehensive Staging Testing
Test all critical functionality:- Application Startup:
# Verify ToolJet starts successfully (adjust command based on deployment method)
# AKS: kubectl logs deployment/tooljet -n tooljet | grep "TOOLJET APPLICATION STARTED SUCCESSFULLY"
# ACI: az container logs --resource-group rg --name tooljet | grep "TOOLJET APPLICATION STARTED SUCCESSFULLY" - Database Connectivity Testing:
# Test connection to upgraded database
psql "postgresql://username:password@production-pg13-test-restore.postgres.database.azure.com:5432/database?sslmode=require" -c "SELECT version();"
# Should show: PostgreSQL 16.x - Feature Testing Checklist:
- User login and authentication
- Workspace creation and access
- Application building and editing
- Data source connections
- Query execution and data display
- User management and permissions
- Application deployment and sharing
- API functionality
- File uploads and downloads
- Email notifications (if configured)
- Performance Testing:
- Monitor response times for common operations
- Check query performance improvements
- Verify memory usage is stable
- Test with realistic data volumes
- SSL Connection Validation:
- Verify no SSL connection errors in logs
- Test that
PGSSLMODE=require
works correctly - Confirm secure connections are established
- Application Startup:
Phase 3: Production Upgrade Planning
-
Document Findings and Plan Production Upgrade
- Create test results document:
PostgreSQL 16 Upgrade Test Results - Azure
=========================================
Test Environment:
- Database: production-pg13-test-restore (PITR from production)
- ToolJet Version: [version]
- Deployment Method: [AKS/Azure Container Instances]
- Test Date: [date]
- Azure Region: [region]
Functionality Test Results:
- User Authentication: ✅ Working
- Workspace Access: ✅ Working
- Application Building: ✅ Working
- Data Sources: ✅ Working
- SSL Connectivity: ✅ Working with PGSSLMODE=require
- [Add all test results...]
Performance Observations:
- Query Response Time: [improvement/same/degradation]
- Application Load Time: [timing]
- Memory Usage: [stable/issues]
- CPU Usage: [stable/issues]
Issues Found: [None / List any issues]
Recommended Production Upgrade: ✅ Proceed / ❌ Needs fixes - Plan production maintenance window:
# Based on staging test results, plan for:
# - Database upgrade time: ~15-45 minutes (depending on size)
# - Application configuration updates: ~5-10 minutes
# - SSL connection verification: ~5 minutes
# - Testing and verification: ~10-15 minutes
# Total estimated downtime: 35-75 minutes
- Create test results document:
Phase 4: Production Upgrade Execution
-
Communicate and Execute Production Upgrade
- User Communication Requirements:
- Inform all users about the planned maintenance window
- Provide alternate contact methods during downtime
- Set status page updates if available
- Execute production upgrade following the exact same steps as tested in staging
- User Communication Requirements:
Additional Safety Measures
Rollback Strategy
The major version upgrade action is irreversible according to Azure documentation.
Preparation for rollback (MUST be done before upgrade):
- Create a Point-in-Time Restore backup before upgrade:
- Keep original PostgreSQL 13 server available (don't delete immediately)
- Ensure recent backups are available for restoration
- Document exact restore point timestamp
If issues are discovered during production upgrade:
- Restore to new server from backup
# Restore from backup to a new server
az postgres flexible-server restore \
--resource-group your-resource-group \
--name emergency-restore-server \
--source-server your-production-server \
--restore-time "2024-12-01T10:00:00Z"
# Update ToolJet configuration to point to emergency restore server - Use pre-upgrade Point-in-Time Restore
- If you created a PITR backup before upgrade, restore from that point
- Update ToolJet application configuration to use the restored server
- Resume operations on PostgreSQL 13 until issues are resolved
Post-Upgrade Monitoring
- Azure Portal Monitoring:
- Go to Azure Database for PostgreSQL Flexible Server → Your database
- Click on Monitoring tab
- Watch these metrics:
- CPU percentage
- Memory percentage
- Active connections
- Read/Write IOPS
- Network In/Out
- Application Monitoring (adjust commands based on deployment method):
# Check application logs
# AKS: kubectl logs deployment/tooljet -n tooljet --tail=50
# ACI: az container logs --resource-group rg --name tooljet --tail 50
# Verify database version
psql "postgresql://user:[email protected]:5432/db?sslmode=require" -c "SELECT version();"
Cleanup After Successful Upgrade
After 1-2 weeks of stable operation:
- Delete test restore server:
# Delete the test restore instance
az postgres flexible-server delete \
--resource-group your-resource-group \
--name production-pg13-test-restore - Review backup retention settings: Ensure automated backups are configured appropriately