Seleccione (recupere) todos los loggings de múltiples esquemas usando Postgres

Tengo una database PostgreSQL con algunos esquemas, como a continuación:

My_Database |-> Schemas |-> AccountA |-> AccountB |-> AccountC |-> AccountD |-> AccountE . . . |-> AccountZ 

Todos los esquemas tienen una tabla llamada product que tiene una columna llamada title . Me gustaría saber si es posible ejecutar una instrucción select para recuperar todos los loggings de todos los esquemas con un cierto condicional.

La única forma que encontré hasta ahora es ejecutar una count de consulta por count, como a continuación.

 SET search_path TO AccountA; SELECT title FROM product WHERE title ILIKE '%test%'; 

Los esquemas se crean dinámicamente , por lo que no sé sus nombres o cuántos de ellos existen.

Con inheritance como @Denis mencionado , esto sería muy simple. Funciona para Postgres 8.4, también. Asegúrate de considerar las limitaciones .

Básicamente, supongo que tendrías una tabla maestra en un esquema maestro:

 CREATE TABLE master.product (title text); 

Y todas las demás tablas en varios esquemas henetworkingan de él, posiblemente agregando más columnas locales:

 CREATE TABLE a.product (product_id serial PRIMARY KEY, col2 text) INHERITS (master.product); CREATE TABLE b.product (product_id serial PRIMARY KEY, col2 text, col3 text) INHERITS (master.product); 

etc.

Las tablas no tienen que compartir el mismo nombre o esquema.
Luego puede consultar todas las tablas en un solo golpe:

 SELECT title, tableoid::regclass::text AS source FROM master.product WHERE title ILIKE '%test%'; 

tableoid::regclass::text ?
Esa es una forma práctica de decir la fuente de cada fila. Detalles:

  • Descubra qué esquema se basa en los valores de tabla

SQL Fiddle.

Básicamente quieres un sindicato todo:

 SELECT title FROM AccountA.product WHERE title ILIKE '%test%' UNION ALL SELECT title FROM AccountB.product WHERE title ILIKE '%test%' UNION ALL ...; 

Puede hacerlo automáticamente utilizando SQL dynamic y el catálogo para localizar todos los esquemas de AccountXYZ que tienen una tabla de productos.

De forma alternativa, cree un esquema AllAccounts con tablas similares a las de los esquemas individuales y use la inheritance de tablas.

Sin embargo, tenga en count que ninguno de ellos le dirá de qué esquema provienen los datos. En el primer caso, esto es bastante fácil de agregar; no tanto en el último a less que agregue una columna adicional.