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
我有一个 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