如何将变量从postgresql脚本传递到外部脚本

如何将变量从postgresql脚本传递到外部脚本,postgresql,psql,Postgresql,Psql,如何以正确的方式将变量作为postgresql脚本传递到外部脚本?如果我使用\echo'.'.,而不是\echo`.''.和\,那么变量插值似乎可以很好地工作。下面是代码行示例: ——设置变量 \将DB_模式设置为GT1 \设置GEO_VAR_EPSG'32632' \将GEO_VAR_TMAX设置为“250” --:DBNAME是一个本地psql变量 --通过echo“…”打印 \echo'CALL mk exp position.pl':DBNAME:GEO\u VAR\u TMAX:GEO

如何以正确的方式将变量作为postgresql脚本传递到外部脚本?如果我使用
\echo'.'.
,而不是
\echo`.''.
\,那么变量插值似乎可以很好地工作。下面是代码行示例:

——设置变量
\将DB_模式设置为GT1
\设置GEO_VAR_EPSG'32632'
\将GEO_VAR_TMAX设置为“250”
--:DBNAME是一个本地psql变量
--通过echo“…”打印
\echo'CALL mk exp position.pl':DBNAME:GEO\u VAR\u TMAX:GEO\u VAR\u EPSG:DB\u SCHEMA.exp\u position:DB\u SCHEMA.exp\u transact
--尝试通过\echo`…调用一些外部内容`
\echo`./mk-exp-position.pl:DBNAME:GEO\u VAR\u TMAX:GEO\u VAR\u EPSG:DB\u SCHEMA.exp\u位置:DB\u SCHEMA.exp\u横断面`
--尝试通过\!…调用外部脚本。。。
\! ./mk-exp-position.pl:DBNAME:GEO\u VAR\u TMAX:GEO\u VAR\u EPSG:DB\u SCHEMA.exp\u位置:DB\u SCHEMA.exp\u横断面
将参数从命令行读取到某些变量并打印它们的perl scriptlet:

#/usr/bin/perl-w
使用警告;
严格使用;
使用DBI;
#检查参数计数,提供帮助和模具
如果($#ARGV<4){
die“用法:$0 DB_NAME MAX_DIST EPSG SRC_TAB DST_TAB\n”
}
#读取将命令行参数数组分配给某些变量
我的($DB_NAME、$MAX_DIST、$EPSG、$TAB_IN、$TAB_OUT)=@ARGV;
#将变量打印到标准输出
打印“#FILL.TABLE$TAB_OUT FROM$TAB_IN IN$DB_NAME PARAM MAX_DIST=$MAX_DIST EPSG=$EPSG\n”;
结果\echo“CALL…”:

CALL mk-exp-position.pl daisi_2017_06_06 250 32632 GT1.exp_position GT1.exp_transect
结果\echo``或\!…:

#FILL.TABLE :DB_SCHEMA.exp_transect FROM :DB_SCHEMA.exp_position IN :DBNAME PARAM MAX_DIST=:GEO_VAR_CMAX EPSG=:GEO_VAR_EPSG

关于

嗯\echo不是为调用外部程序而设计的。你有点孤立无援了。@FuzzChef\!不太管用。嗯,总的来说,我对psql工具作为一种带有变量和“壳出机制”的“壳”的角色理解有些纠结。有些操作有点像\echo“数据会话日期:”`DATE-u“+%Y-%m-%d%H:%m:%S%Z`。但是用\set或shell out中的设置声明的“变量”的插值不是。那么选择什么呢?用另一个接口(DBI)对psql代码进行完整封装是否更好?好吧,psql并不是一个真正用于执行涉及外部程序的任务的全服务工具。它主要是数据库的CLI——它是命令shell,而不是编程shell。真的,你最好使用一个带有数据库驱动程序的程序,然后调用数据库代码。嗯\echo不是为调用外部程序而设计的。你有点孤立无援了。@FuzzChef\!不太管用。嗯,总的来说,我对psql工具作为一种带有变量和“壳出机制”的“壳”的角色理解有些纠结。有些操作有点像\echo“数据会话日期:”`DATE-u“+%Y-%m-%d%H:%m:%S%Z`。但是用\set或shell out中的设置声明的“变量”的插值不是。那么选择什么呢?用另一个接口(DBI)对psql代码进行完整封装是否更好?好吧,psql并不是一个真正用于执行涉及外部程序的任务的全服务工具。它主要是数据库的CLI——它是命令shell,而不是编程shell。事实上,使用带有数据库驱动程序的程序,并拥有调用数据库代码,会让您感觉更好。