[Postgresql] : changer des tables de schéma

Print Friendly, PDF & Email

Les imports de bases se passent plus ou moins comme l’on veut. Par exemple, si on restaure des datas dans une base différente ou si on créé la base morceau par morceau (structure, user…), vous pouvez vous retrouver avec les tables de votre applis situées dans le schéma “public”. Pas forcément ce que l’on recherche. Bien souvent on créé un schéma spécifique pour chaque application.

Comment réaffecter toutes les tables du schéma “public” dans un autre schéma ?

Pas très compliqué, pour une table :

ALTER TABLE public.nommatable SET SCHEMA monschema;


Pour une seule table pas de problème. Mais pour toutes les tables ?

DO
$$
DECLARE
	row record;
BEGIN
	FOR row IN SELECT tablename FROM pg_tables WHERE schemaname = 'public' -- and other conditions, if needed
	LOOP
		EXECUTE 'ALTER TABLE public.' || quote_ident(row.tablename) || ' SET SCHEMA monschema;';
	END LOOP;
END;
$$;
animal big elephant endangered

Photo by Anthony on Pexels.com

Cette fonction/procédure permet donc de lister toutes les tables puis de lancer une boucle sur celle-ci en faisant le ALTER TABLE SET SCHEMA.

Découvrez  [Postgresql] : Appliquer un GRANT à toutes les séquences d'une base