Message posté par : Léandre Béron
----------------------------------------
Bonjour,
Une extension e-maj qui répondrait à cela existe à priori :
https://github.com/dalibo/emaj
et
https://emaj.readthedocs.io/fr/latest/ (Merci jmarsac)
N'ayant pas testé cette extension, vous pouvez également passer par une deux functions
(peut être existe-t-il une méthode plus simple).
-----------------
Code :
create or replace function create_trigger() returns integer as $$
declare
v_count integer;
v_table record;
begin
v_count := 0;
FOR v_table IN
SELECT n.nspname AS schemaname,
c.relname AS tablename
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace)
WHERE c.relkind IN ('r') AND n.nspname = 'ign'
LOOP
EXECUTE 'ALTER TABLE ' || quote_ident(v_table.schemaname) || '.'
|| quote_ident(v_table.tablename) || ' ADD COLUMN date date';
EXECUTE 'UPDATE ' || quote_ident(v_table.schemaname) ||'.'||
quote_ident(v_table.tablename) || ' SET date = ''15/06/2021'' ';
EXECUTE 'ALTER TABLE ' || quote_ident(v_table.schemaname) || '.' ||
quote_ident(v_table.tablename) || ' ADD COLUMN source varchar(50)';
EXECUTE 'UPDATE ' || quote_ident(v_table.schemaname) || '.' ||
quote_ident(v_table.tablename) || ' SET source = ''ign'' ';
EXECUTE 'ALTER TABLE ' || quote_ident(v_table.schemaname) || '.' ||
quote_ident(v_table.tablename) || ' RENAME TO ign_bdtopo_' ||
quote_ident(v_table.tablename)||'_v1';
v_count := v_count + 1;
END LOOP;
RETURN v_count;
end
$$ language 'plpgsql';
create or replace function move_table() returns integer as $$
declare
v_count integer;
v_table record;
begin
v_count := 0;
FOR v_table IN
SELECT n.nspname AS schemaname,
c.relname AS tablename
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace)
WHERE c.relkind IN ('r') AND n.nspname = 'ign'
LOOP
EXECUTE 'ALTER TABLE ' || quote_ident(v_table.schemaname) || '.' ||
quote_ident(v_table.tablename) || ' SET SCHEMA ign_v2' ;
END LOOP;
RETURN v_count;
end
$$ language 'plpgsql';
select create_trigger();
select move_table();
-----------------
Les noms de table sont ici en minuscule.
Si vous voulez impérativement nommer vos tables avec des majuscules (plutôt déconseillé,
cela évite de mettre des "" dans les requêtes SQL), il vous faudra adapter un
petit peu ce code avec des "".
Ce code fonctionne de mon côté (pg version 9.6)
Cordialement,
Léandre BERON
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=358754#p358754
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net