Thread: \i and \watch

\i and \watch

From
Edwin UY
Date:
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

Re: \i and \watch

From
"David G. Johnston"
Date:
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 20

It 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.

Re: \i and \watch

From
Edwin UY
Date:
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


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 20

It 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.

Re: \i and \watch

From
Tom Lane
Date:
"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