我需要从PostgreSQL数据库的多个表中提取SQL文件.这就是我到目前为止想出来的:

pg_dump -t 'thr_*' -s dbName -U userName > /home/anik/psqlTest/db_dump.sql

但是,如您所见,所有以前缀thr开头的表都被导出到单个统一文件(db_dump.sql).我总共有近90个表可以从中提取SQL,因此必须将数据存储到单独的文件中.

我该怎么做呢?提前谢谢您.

推荐答案

如果您乐于硬编码表列表,但只希望每个表都位于不同的文件中,则可以使用shell脚本循环多次运行pg_dump命令,每次循环时都替换表名:

for table in table1 table2 table3 etc;
do pg_dump -t $table -U userName dbName > /home/anik/psqlTest/db_dump_dir/$table.sql;
done;

EDIT:可以扩展此方法,通过psql运行查询并将结果反馈到循环中,而不是硬编码的列表,从而动态获取表列表:

for table in $(psql -U userName -d dbName -t -c "Select table_name From information_schema.tables Where table_type='BASE TABLE' and table_name like 'thr_%'");
do pg_dump -t $table -U userName dbName > /home/anik/psqlTest/db_dump_dir/$table.sql;
done;

在这里,psql -t -c "SQL"运行SQL并输出结果,没有页眉或页脚;因为只 Select 了一列,所以在$(command)捕获的输出的每一行上都会有一个表名,并且您的shell将一次循环遍历它们.

Database相关问答推荐

如果我想支持我的工作负载,我需要多少个 node ?

如何在没有sqlmock的情况下模拟db ping

使用 golan 查询 mongodb 中的集合并返回 id 作为字符串

任何必要的可空外键示例?

mysql数据库自动分区

用于存储人与聊天消息的数据库设计

SQL Server 中的Is Identity列属性是什么意思?

免费的 SQL 比较工具

如何连接到 MDF 数据库文件?

数据库供应商如何实现事务?

如何在 VS 2012 的 SQL Server 数据库项目中存储静态数据

当您达到 SQL Server Express 4GB / 10GB 限制时会发生什么?

PHP + SQL Server - 如何设置连接字符集?

Oracle在哪些情况下会自动创建索引?

数据库 - 设计 Events事件表

谁有维基数据库?

mysql 无法从存储引擎读取自增值

如何将 DECIMAL 插入 MySQL 数据库

如何在android中使用合同类?

如何删除除了postgres中的少数数据库之外的所有数据库