Quisiera saber si se puede realizar la busqueda de un patron determinado, en todas las tablas de una misma basde de datos en un solo paso.
Por ejemplo:
Suponiendo que en mi base de datos tengo varias tablas.
Buscar la expresion "River Campeon" en cada una de las columnas de cada tabla de la misma base de datos en un solo paso.
Se puede hacer en un solo paso?
Muchas gracias.-
Saludos.-
Como realizar en un solo paso
Mar, 08/06/2010 - 04:44 — joyasanprueba con esto
1.- crea la tabla
CREATE TABLE xxx.aprueba(n_ide int4 NOT NULL, n_tab varchar(20), n_col varchar(20), PRIMARY KEY (n_ide)) ;
2.- crea la sig. funcion
CREATE OR REPLACE FUNCTION xxx.aapp()RETURNS void AS
$BODY$
declare
al0a03_r record;
al0a03_s record;
select_s text ;
buscar_r text ;
ll_row int4 ;
begin
buscar_r='Boca Campeon' ;
ll_row=0;
Delete from xxx.aprueba;
for al0a03_r in
SELECT x_tab.schemaname || '.' || x_tab.tablename as xtable,
x_tab.schemaname || '.' || x_tab.tablename || '.' || x_col.column_name as xcolum
FROM pg_tables as x_tab, information_schema.COLUMNS as x_col
WHERE x_tab.schemaname=x_col.table_schema and
x_tab.tablename =x_col.table_name and
x_tab.schemaname not in ('information_schema','pg_catalog','public') and
substring(x_tab.tablename,1,5) <> 'pbcat' and
x_col.data_type in ('"char"','character','character varying','name','text')
Order by x_tab.schemaname, x_tab.tablename
loop
select_s ='select * ' ||
' from ' || al0a03_r.xtable ||
' where ' || al0a03_r.xcolum || ' = ' || quote_literal(buscar_r) ;
For al0a03_s in EXECUTE select_s
loop
ll_row=ll_row + 1;
Insert into xxx.aprueba (n_ide, n_tab, n_col)
values (ll_row,al0a03_r.xtable,al0a03_r.xcolum);
end loop;
end loop;
end
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION xxx.aapp() OWNER TO postgres;
a ver como va?
Sumale Full Text Seach
Vie, 09/07/2010 - 14:30 — AnónimoDependiendo algunos factores podrías agregar algunas cosas:
- crear un indice funcional con (col::tsvector) sobre las columnas de texto grandes y al momento de la consulta usar:
'river & campeon'::tsquery @@ (col::tsvector)
- O, si tienes buenas estadísticas y posees 8.4 puedes buscar directamente en pg_stats si la columna no es grande. El defecto de este, es que solo te dirá si existe entre los valores más frecuentes, pero no te devolverá las tuplas de la tabla. Es útil para cuando quieres saber si un dato está entre los más usados.
Enviar nuevo comentario