Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在一个postgresql中合并多个表_Postgresql - Fatal编程技术网

在一个postgresql中合并多个表

在一个postgresql中合并多个表,postgresql,Postgresql,我继承了一个具有288个表的特定模式的数据库。这些表都有完全相同的列名。我想把所有这些288个表合并到1中 我的第一次尝试是将表创建为: 但这显然不起作用 因此,我尝试使用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

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

我的第一次尝试是将表创建为:

但这显然不起作用

因此,我尝试使用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如何处理这类事情。

使用此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

动态创建语法时,请使用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;
$$
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;
$$