Publié le: 2018-12-04

Generate table & sequence owner queries

Lors d’une restauration de base de données, parfois il se peut que vous ayez besoin de changer le propriétaire d’une table ou d’une séquence pour un autre user, par exemple si vous prenez une base de production pour la mettre sur votre intégration pour vos développeurs (anonymisées, bien sûr ;) ).

Plutôt que de devoir faire fastidieusement un ALTER TABLE table par table, voici 2 requêtes SQL qui vont vous permettre de générer les SQL pour changer rapidement le owner de toutes les tables et séquences:

select 'alter table ' || relname || ' owner to mynewowner;' from pg_class join pg_namespace on pg_class.relnamespace = pg_namespace.oid where pg_namespace.nspname = 'public' and relkind='r';
select 'alter sequence ' || relname || ' owner to mynewowner;' from pg_class join pg_namespace on pg_class.relnamespace = pg_namespace.oid where pg_namespace.nspname = 'public' and relkind='S';

Résultat pour les tables

                           ?column?
-----------------------------------------------------------------
 alter table batch_job_execution owner to mynewowner;
 alter table purchase owner to mynewowner;
 alter table serviceprice owner to mynewowner;
 alter table account owner to mynewowner;
 alter table product owner to mynewowner;

Résultat pour les séquences:

                           ?column?
----------------------------------------------------------------
 alter sequence batch_job_seq owner to mynewowner;
 alter sequence batch_step_execution_seq owner to mynewowner;
 alter sequence cgufile_id_seq owner to mynewowner;

Vous n’avez plus qu’à recopier ce résultat directement ou à l’intégrer dans un script shell qui va le jouer automatiquement pour vous.