在一个postgresql中合并多个表

时间:2017-07-19 09:15:24

标签: postgresql

我继承了一个具有288个表的特定模式的数据库。这些表的所有完全都是相同的列名。我想在1中合并所有这288个表。

我的第一次尝试是CREATE TABLE AS

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是什么。

我想我错过了关于pg如何处理这类事情的事情。

2 个答案:

答案 0 :(得分:0)

使用此shell脚本获取所有表并插入新表

#!/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

答案 1 :(得分:0)

当您动态创建语法时,请使用Execute命令执行随字符串数据提供的SQL。 我刚刚制作了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;
$$
相关问题