2017-06-09 4 views
0

私はN個のスキーマA、B、C、...を持っていますが、このスキーマではXXXという名前のテーブルがあります。すべてのスキーマのすべてのXXXテーブルを表示したいと思います。 問題は、スキーマ名とスキーマの数がDBにないことです。SQLがフォームにネストされています。スキーマからのアクセステーブル

select * 
from (select distinct table_schema 
     from information_schema.tables 
     where 
     table_schema not in ('pg_catalog', 'information_schema') and 
     table_schema not like 'pg_toast%' and 
     table_schema not like 'public').XXX 

ネストされたクエリが機能します。自分のスキーマのリストを取得できます。 .XXXは機能しません。

ありがとうございました。 Diego

+0

動的SQLを使用する必要があります。 –

+0

xxxのテーブル*コンテンツ*だけではなく、スキーマ*名前*が必要な場合: 'table_schema not public ').XXX' - >>' table_schemaが' public 'のようではなく、table_nameが' XXX ' )zzz' – joop

答えて

0

テーブルの継承を使用する可能性がありますが、それがうまくいくかどうかはわかりません。

私は2つのような表がある場合:

CREATE TABLE s1.xxx(id integer PRIMARY KEY, val text NOT NULL); 
INSERT INTO s1.xxx VALUES (1, 'one'); 

CREATE TABLE s2.xxx(id integer PRIMARY KEY, val text NOT NULL); 
INSERT INTO s2.xxx VALUES (1, 'two'); 

を私は新しいテーブルを作成し、新しいテーブルの二つのテーブルの子供を作ることができる:

CREATE TABLE xxx(id integer PRIMARY KEY, val text NOT NULL); 

ALTER TABLE s1.xxx INHERIT xxx; 
ALTER TABLE s2.xxx INHERIT xxx; 

その後、私はちょうどSELECT新しいからをすることができますテーブル:

SELECT * FROM xxx; 

┌────┬─────┐ 
│ id │ val │ 
├────┼─────┤ 
│ 1 │ one │ 
│ 1 │ two │ 
└────┴─────┘ 
(2 rows) 
関連する問題