我有一个Shell脚本,该脚本可迭代一个文件夹并在给定数据库上执行该文件夹中的所有sql脚本。以下是我传递给该脚本的参数
database.sh -h hostname -p port -U user -d database -P password
我想修改此脚本以支持更新多个架构。该文件夹中存在的所有脚本都应在所有架构上运行。我可以使用查询
获取所有架构SELECT nspname
FROM pg_catalog.pg_namespace
WHERE nspname !~ '^pg_'
AND nspname not in ('information_schema','public');
如何使用Shell脚本实现这一目标,或者你们可以建议其他方法。
答案 0 :(得分:0)
生成具有以下内容的架构列表:
$ cat gls.sql
\pset tuples_only on
SELECT nspname
FROM pg_catalog.pg_namespace
WHERE nspname !~ '^pg_'
AND nspname not in ('information_schema','public');
使用2个SQL脚本运行脚本:第一个更改search_path
,并由在单个模式下工作的主SQL脚本调用:
$ cat test.sql
\i set_current_schema.sql
show search_path;
select * from t;
全局shell脚本:
psql -f gls.sql -q -o ls.txt
for s in $(cat ls.txt)
do
echo "set search_path='"$s"';" > set_current_schema.sql
psql -e -f test.sql
done