Skip to content
Back to skills

2722 Postgres Upgrade Process 60a48da6

ASecurity

This guide explains how to upgrade PostgreSQL from version 17 to 18 in ContextForge Helm chart with automated backup and restore to MinIO.

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 11, 2026
devopsgobashsqlkubernetesdatabasedocumentation

Works with

  • mcp

Security analysis

A100/100

Scanned October 11, 2026

npx -y skills add tools-only/X-Skills --skill 2722-postgres-upgrade-process_60a48da6 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 2722 Postgres Upgrade Process 60a48da6?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 2722 Postgres Upgrade Process 60a48da6
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-2722-postgres-upgrade-process-60a48da6/badge)](https://www.skillsdirectory.com/skills/tools-only-2722-postgres-upgrade-process-60a48da6)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
# PostgreSQL 17 to 18 Upgrade Guide

This guide explains how to upgrade PostgreSQL from version 17 to 18 in ContextForge Helm chart with automated backup and restore to MinIO.

## Prerequisites

Before proceeding with the upgrade, ensure:

- You have a running installation with PostgreSQL 17
- You have `kubectl` and `helm` access to your cluster
- You have sufficient disk space for backup operations
- You can accept brief downtime during the upgrade process

## Upgrade Process

The upgrade process occurs in stages and requires two separate Helm operations:

### Stage 1: Enable MinIO for Backup Storage

First, you need to ensure MinIO is deployed and running to store the database backup:

```bash
# Update your my-values.yaml to enable MinIO
helm upgrade --install mcp-stack ./charts/mcp-stack \
  --namespace mcp \
  --create-namespace \
  -f my-values.yaml \
  --wait --timeout 30m
```

Or directly set MinIO to enabled:

```bash
helm upgrade --install mcp-stack ./charts/mcp-stack \
  --namespace mcp \
  --create-namespace \
  -f my-values.yaml \
  --set minio.enabled=true \
  --wait --timeout 30m
```

### Stage 2: Perform the PostgreSQL Upgrade with Backup

Once MinIO is running, proceed with the actual PostgreSQL upgrade:

1. **Update your values file** to configure the upgrade:

```yaml
# In your my-values.yaml
postgres:
  upgrade:
    enabled: true              # Enable the PostgreSQL upgrade process
    targetVersion: "18"        # Target PostgreSQL version (18)
    backupCompleted: false     # Set to false to initiate backup process
```

2. **Run the upgrade command**:

```bash
helm upgrade --install mcp-stack ./charts/mcp-stack \
  --namespace mcp \
  -f my-values.yaml \
  --wait --timeout 30m
```

This will:

- Run a pre-upgrade hook to backup PostgreSQL 17 data to MinIO
- Upgrade the PostgreSQL deployment to version 18
- Restore data from the backup during PostgreSQL 18 initialization

### Stage 3: Verify the Upgrade

After the upgrade completes, verify that everything is working:

```bash
# Check that all pods are running
kubectl get pods -n mcp

# Check PostgreSQL logs
kubectl logs -n mcp deployment/mcp-stack-postgres

# Verify the PostgreSQL version
kubectl exec -n mcp deployment/mcp-stack-postgres -- psql -U admin -c "SELECT version();"
```

## Rollback Process

If something goes wrong and you need to rollback:

1. Set `postgres.upgrade.enabled: false` and `postgres.upgrade.targetVersion: "17"` in your values file
2. Run `helm upgrade` with the changes
3. The deployment will revert to PostgreSQL 17

## Troubleshooting

### Backup Job Fails
If the backup job fails, check the logs:
```bash
kubectl logs -n mcp -l app.kubernetes.io/component=postgres-backup
```

### PostgreSQL Pod Stuck in CrashLoopBackOff
This usually indicates the data directory compatibility issue. Make sure:

- MinIO is accessible and running
- The backup file exists in MinIO
- The PVC has compatible ownership/perms

### MinIO Not Starting
Ensure your storage class settings match existing PVCs:
```bash
kubectl describe pvc -n mcp
```

## Configuration Reference

### Upgrade Parameters

| Parameter | Description | Default |
|-----------|-------------|---------|
| `postgres.upgrade.enabled` | Enable the PostgreSQL upgrade process | `false` |
| `postgres.upgrade.targetVersion` | Target PostgreSQL version (currently supports "18") | `"18"` |
| `postgres.upgrade.backupCompleted` | Internal flag - set to false to trigger backup | `false` |
| `minio.enabled` | Enable MinIO for backup storage | `true` (recommended for upgrades) |

### Storage Configuration

When upgrading with existing PVCs, make sure to maintain the same storage class:

```yaml
postgres:
  persistence:
    storageClassName: "same-as-existing-pvc"  # Match existing PVC
    size: "same-as-existing-pvc"              # Match existing PVC
```

## Important Notes

- **Backup Required**: The upgrade process automatically creates a backup before upgrading
- **Data Safety**: Data is preserved during the upgrade process via the backup/restore mechanism
- **Downtime**: Expect brief downtime during the upgrade as PostgreSQL restarts
- **PVC Compatibility**: The PVC will be reused but the data will be migrated through the backup/restore process
- **MinIO Required**: MinIO must be enabled and operational for the upgrade to work

## Cleanup After Successful Upgrade

Once you've verified the upgrade was successful:

1. Optionally set `postgres.upgrade.backupCompleted: true` to prevent the backup job from running in future upgrades
2. Clean up old backup files from MinIO if needed
3. Update your documentation to reflect the new PostgreSQL version

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…