如何从shell脚本向.sql文件传递参数

时间:2014-03-13 09:51:00

标签: sql bash shell

嗨,如果有人可以帮助我,我有一个.sh脚本执行4个.sql脚本,每个脚本都针对一个模式执行。目前架构名称是硬编码的,但我想让它可配置。

鉴于以下内容,我将如何将shell脚本中的参数传递给.files?

在我的shell脚本中完成对.sql的调用,如下所示

ECHO “DELETING SCHEME….”
psql -f $SCRIPT_DIR/delete_data.sql my_db postgres
ECHO “DATABASE SCHEMA DELETED..”

delete_data.sql

drop schema my_schema cascade;
create schema my_schema;

2 个答案:

答案 0 :(得分:1)

您可以使用占位符替换my_schema部分,例如%SCHEMA%

drop schema %SCHEMA% cascade;
create schema %SCHEMA%;

然后我们使用sed运行替换,并将结果传递到psql(从stdin读取相当于从文件读取):

sed "s/%SCHEMA%/$schemaName/" $SCRIPT_DIR/delete_data.sql | psql powa_aim_db postgres

答案 1 :(得分:1)

您可以使用SQL的heredoc执行此操作:

my_schema="$1"
ECHO “DELETING SCHEME….”
psql <<SQL
drop schema $my_schema cascade
create schema $my_schema
SQL
ECHO “DATABASE SCHEMA DELETED..”

然后使用模式名称作为第一个参数调用脚本:

$ ./my_script my_schema_name