Thread: \i and \watch
Hi,
Is there no way to use \watch to let it run the last script that I just run?
When do I do as below:
select 1 ;
\i x.sql
\watch 20
It runs select 1 instead.
At the moment, a workaround is I run the content of x.sql itself and then run watch.
Please advise. Thanks.
Regards,
Ed
On Wednesday, November 6, 2024, Edwin UY <edwin.uy@gmail.com> wrote:
Is there no way to use \watch to let it run the last script that I just run?When do I do as below:select 1 ;\i x.sql\watch 20It runs select 1 instead.
Watch is documented to act on either a non-empty query buffer or the last sent command. I would expect that whatever the final SQL command present in x.sql is would be the command that gets watched. If indeed the preceding select 1 command is watched there would seem to be an undocumented interaction going on.
In any case, no, you cannot watch a meta-command. You’d have to resort to shell scripting the repeated execution of the psql program itself.
David J.
Thanks for the explanation.
Yeah, here's what's happening. So, yeah, we'll check on having to script it instead.
###
=> select now() ;
now
-------------------------------
2024-11-07 07:46:23.876888+00
(1 row)
=> \! cat x.sql
select version() ;
=> \i x.sql
version
--------------------------------------------------------------------------------------------------------------
PostgreSQL 14.12 on aarch64-unknown-linux-gnu, compiled by aarch64-unknown-linux-gnu-gcc (GCC) 9.5.0, 64-bit
(1 row)
=> \watch 5
Thu 07 Nov 2024 20:47:05 NZDT (every 5s)
now
-------------------------------
2024-11-07 07:47:05.411747+00
(1 row)
Thu 07 Nov 2024 20:47:10 NZDT (every 5s)
now
-------------------------------
2024-11-07 07:47:10.418915+00
(1 row)
^C
now
-------------------------------
2024-11-07 07:46:23.876888+00
(1 row)
=> \! cat x.sql
select version() ;
=> \i x.sql
version
--------------------------------------------------------------------------------------------------------------
PostgreSQL 14.12 on aarch64-unknown-linux-gnu, compiled by aarch64-unknown-linux-gnu-gcc (GCC) 9.5.0, 64-bit
(1 row)
=> \watch 5
Thu 07 Nov 2024 20:47:05 NZDT (every 5s)
now
-------------------------------
2024-11-07 07:47:05.411747+00
(1 row)
Thu 07 Nov 2024 20:47:10 NZDT (every 5s)
now
-------------------------------
2024-11-07 07:47:10.418915+00
(1 row)
^C
On Thu, Nov 7, 2024 at 6:26 PM David G. Johnston <david.g.johnston@gmail.com> wrote:
On Wednesday, November 6, 2024, Edwin UY <edwin.uy@gmail.com> wrote:Is there no way to use \watch to let it run the last script that I just run?When do I do as below:select 1 ;\i x.sql\watch 20It runs select 1 instead.Watch is documented to act on either a non-empty query buffer or the last sent command. I would expect that whatever the final SQL command present in x.sql is would be the command that gets watched. If indeed the preceding select 1 command is watched there would seem to be an undocumented interaction going on.In any case, no, you cannot watch a meta-command. You’d have to resort to shell scripting the repeated execution of the psql program itself.David J.
"David G. Johnston" <david.g.johnston@gmail.com> writes: > Watch is documented to act on either a non-empty query buffer or the last > sent command. I would expect that whatever the final SQL command present > in x.sql is would be the command that gets watched. If indeed the > preceding select 1 command is watched there would seem to be an > undocumented interaction going on. It looks like there's a separate query_buf for each recursive level of MainLoop(), that is, each level of \i. So maybe the docs need improvement here. (I think the actual behavior is probably fine.) regards, tom lane