Générer un script de création de bases de donnée

Bases de données

Lors d'une opération de migration de serveur PostgreSql, il est parfois nécessaire d'automatiser la création de bases de données

La requête ci dessous pourra être exécutée sur le serveur source afin de lister toutes ses bases de données et de créer un script de création de ces bases de données sur le serveur de destination :

SELECT 'CREATE DATABASE '||datname||' WITH OWNER '|| pg_catalog.pg_get_userbyid(datdba) || ' ENCODING = '''|| pg_catalog.pg_encoding_to_char(encoding) ||''' TABLESPACE=' || ts.spcname ||' LC_COLLATE='''||datcollate||''' LC_CTYPE='''|| datctype||''' CONNECTION LIMIT='||datconnlimit||' TEMPLATE = template0;'
FROM pg_database db
JOIN pg_catalog.pg_tablespace ts on db.dattablespace = ts.oid
WHERE datistemplate = FALSE
ORDER BY datname;

Si au préalable on souhaite supprimer les bases de données du serveur de destination il suiffera de préparer une requête de nettoyage depuis le serveur source comme suit :

SELECT 'DROP DATABASE IF EXISTS '||datname||';'
FROM pg_database
WHERE datistemplate = FALSE
ORDER BY datname;
Par Christophe HIRON
15 juillet 2019