Subject: \i and \watch

From: Edwin UY <[email-masked]>
Date: Thu, 7 Nov 2024 18:09:55 +1300

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

---

From: "David G. Johnston" <[email-masked]>
Date: Wed, 6 Nov 2024 22:26:53 -0700

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

---

From: Edwin UY <[email-masked]>
Date: Thu, 7 Nov 2024 20:49:56 +1300

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

---

From: Tom Lane <[email-masked]>
Date: Thu, 07 Nov 2024 08:43:02 -0500

> 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