psql \i 带参数的元命令

psql \i metacommand with arguments

我有一个 sql 脚本,我 运行 用于对长 运行ning 进程进行手动状态检查。我的服务器目前是 postgres 10。该脚本包含几十个查询。但是,每个查询都需要当前进程的 id(不是 linux pid,而是 db 中的一列)。

所以,就像

SELECT * FROM table1 WHERE id = 'xxx';
SELECT * FROM table2 WHERE id = 'xxx';
... and so forth

我有一个 sql 脚本,我不断使用最新的 ID 更新,运行 使用

db# \i my-script.sql

如果我可以将变量传递到脚本中,那就太好了。例如,脚本可能是

SELECT * FROM table1 WHERE id = '';
SELECT * FROM table2 WHERE id = '';

我可以运行

db# \i my-script.sql 'xxx'

并且它会正确地用该值替换 sql 脚本中的所有 </code>。多个参数的奖励积分(例如 <code> 等)。

OTOH,我可以写一个 bash 脚本包装 psql 命令行,但我需要放到 shell 来执行它 - 如果我已经在psql,我就在那里

有什么建议吗?

谢谢!

使用 psql 个变量。

在脚本中,写

\prompt 'Please enter id:' myid
SELECT * FROM table1 WHERE id = :'myid';

如果您不需要交互式提示,请省略 \prompt 并在调用脚本中设置变量:

\set myid 1234