2017-07-19 22 views
0

私は288個のテーブルを持つ特定のスキーマを持つデータベースを継承しています。これらのテーブルはすべてと同じ列名の正確にです。私はCREATE TABLE ASにした11つのpostgresqlに複数のテーブルをマージする

私の最初の試みで、これらすべての288個のテーブルをマージしたい:

CREATE TABLE bigTable AS SELECT X.* FROM (SELECT tablename FROM pg_tables WHERE tablename LIKE '%xxx') AS X 

しかし、これは明らかに動作しません。

だから私はplpgsqlがスクリプトを使用してみました:

DO $$ 
DECLARE 
    r RECORD; 
BEGIN 
    FOR r in (SELECT tablename FROM pg_tables WHERE tablename LIKE '%iti') LOOP 
    INSERT INTO xxx(gid, shape_len, geom) 
    SELECT * FROM r; 
    END LOOP; 
END; 
$$; 

しかし、それはrが何であるかを知らないことを私に伝えます。

私はこの種のものをどのように処理するかについて何か不足していると思います。

答えて

0

に挿入、文字列データに付属のSQLを実行Executeコマンドを使用します。 私は今、例の値を持つ3つのテーブルを作成し、このステートメントを使用して塗りつぶした4番目のテーブルを作成しました。

DO $$ 
DECLARE 
    tbl_name text; 
BEGIN 
    FOR tbl_name IN  (SELECT tablename FROM pg_tables WHERE tablename LIKE 'table%') LOOP 
    execute 'INSERT INTO table4 select * FROM '||tbl_name; 
    END LOOP; 

END; 
$$ 
0

使用このシェルスクリプトは、すべてのテーブルを取得し、動的に構文を作成している場合は、新しいテーブル

#!/bin/bash 

psql **DATABASE_NAME** -c "select tablename from pg_tables where 
schemaname='public'" | sed 1,2d | head -n -2 > hello.out 

while read line; 
do 
psql **DATABASE_NAME** -c "insert into **TABLE_NAME** (select * from $line)" 
done < hello.out 
関連する問題