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