Em 23 de março de 2010 11:28, Jose Luis Ramos
<[email protected]> escreveu:
> Gostaria de uma ajuda no seguinte: tenho várias tabelas com o mesmo prefixo:
>
> cdrger=# \dt
> Lista de relações
> Esquema | Nome | Tipo | Dono
> ---------+----------------+--------+----------
> public | cdrger20090227 | tabela | postgres
> public | cdrger20090306 | tabela | postgres
> public | cdrger20090311 | tabela | postgres
> public | cdrger20090319 | tabela | postgres
> public | cdrger20090320 | tabela | postgres
> public | cdrger20090324 | tabela | postgres
> public | cdrger20090325 | tabela | postgres
> public | cdrger20090326 | tabela | postgres
> public | cdrger20090327 | tabela | postgres
> public | cdrger20090328 | tabela | postgres
> public | cdrger20090329 | tabela | postgres
> public | cdrger20090330 | tabela | postgres
> (12 registros)
>
> Preciso fazer uma funçaõ que, para cada tabela do banco com esse prefixo
> (cdrger*), eu leia um registro, grave de alguma forma (por exemplo em uma
> tab temp), pulo x registros, gravo o próximo, pulo mais x registros, e assim
> por diante. O objetivo é gerar uma base menor que a base que estou lendo.
> Depois tenho que exportar essa ou essas tabelas temp geradas e importar em
> uma base de um notebook para ser utilizada pela área comercial da empresa.
> Se alguém puder me ajudar eu agradeço. Conheço Oracle, mas estou começando
> com PostgreSQL esta semana ... Obrigado.
>
Tente uma função do tipo:
CREATE OR REPLACE FUNCTION sua_função(prefixo text) RETURNS void AS $$
DECLARE
tabela text;
novatabela text;
n int;
BEGIN
FOR tabela IN EXECUTE 'SELECT table_name FROM
information_schema.tables WHERE table_name LIKE ' || prefixo || '%'
LOOP
novatabela = 'novoprefixo' || substring(tabela,7);
EXECUTE 'CREATE TABLE ' || novatabela || 'AS SELECT * FROM ' ||
tabela || ' WITH NO DATA';
EXECUTE 'SELECT count(*)/10 FROM ' || tabela INTO n;
FOR i = 1 to n LOOP
EXECUTE 'INSERT INTO ' || novatabela || ' SELECT * FROM ' ||
tabela || ' LIMIT 1 OFFSET ' || (i-1)*10::text;
END LOOP;
END LOOP;
RETURN;
END;
$$ LANGUAGE plpgsql;
Osvaldo
PS.: Não testada
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral