昨天bbs论坛里有网友提到一个有关参数调用问题,这个问题应该很多人遇到过,这里记录下。
网友提的问题
PostgreSQL数据库中,
/i 1.sql
表示执行这个SQL脚本,如何将变量传递给 1.sql 脚本?
备注:这位网友想在 psql 调用 sql 脚本时传递参数到 sql 文件中,这个需求很普通,因为在 shell 脚本执行某些维护工作时非常有用。这时可以使用 psql 的 -v 参数,如下:
测试环境准备
1 |
[pg93@redhatB ~]$ psql francs francs |
带变量的 sql 脚本
1 |
[pg93@redhatB tf]$ cat 1.sql |
测试:psql客户端传递变量
psql 客户端使用 -v 选项传递变更,同时使用 -f 选项执行脚本,如下:
1 |
[pg93@redhatB tf]$ psql francs francs -v v_id=1 -f 1.sql |
备注:满足需求。这里通过 -f 直接调用 sql 文件,也可以通过 -c 命令调用 sql 文件,如下:
psql 客户端使用 -v 选项传递变更,同时使用 -c 选项执行脚本,如下:
1 |
[pg93@redhatB tf]$ psql francs francs -v v_id=1 -c 'i 1.sql' |
备注:结果一样,个人建议使用前面的方法。另外,如果是比较复杂的逻辑,建议写在 function 中。
参考
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/database/237974.html