Update all extensions in all databases

From PostgreSQL wiki
Jump to: navigation, search

It is possible that development cluster might contain a number of databases that are being carried over from one PostgreSQL version to another with pg_upgrade. There might be a chance that some less frequently used databases will have older extension versions installed requiring updating those to make pg_upgrade possible. Here are a couple of scripts for Windows and Linux that can help to update all extensions in all databases in a cluster to current versions.

MS Windows

Copy and paste the following into a PowerShell script adjusting accordingly.

# $env:PGPORT=5430
# Maintenance database to connect to initially
$env:PGDATABASE='postgres'
$env:PGUSER='postgres'

ForEach ($db in & psql -tAc 'select datname from pg_database where datallowconn') {
  Write-Output "**** Working on $db ****"
  $sql = ((& psql -tAc 'select name from pg_available_extensions where default_version != installed_version' $db) -join " update;`nalter extension ")
  if ($sql) {
    $sql = "alter extension $sql update;"
    & psql -tAc "$sql" $db
  }
}