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; $$;
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.