我在Posgresql中有一个sql命令:
insert into table1(a, b, c)
select (d, e, f) from table2;
它只是一个命令,而不是一个程序。 有没有办法在执行每行操作后将某些信息打印到stdout? 如果table1中有10条记录,则应该有10条自定义消息。
答案 0 :(得分:3)
也许这种方法可以帮到你。这将返回您的自定义消息。
INSERT into table1(col_a1, col_a2, col_a3)
SELECT (col_b1, col_b2, col_b3) FROM table2 RETURNING 'My Message ' || col_b1 || ' ' || col_b2;
答案 1 :(得分:2)
我在Posgresql中有一个sql命令
通常,由于PostGreSQL具有客户端 - 服务器设计,因此涉及两台计算机(可能正在运行Linux)和两个进程。 RDBMS在一台机器上运行(在一个或多个进程中)并侦听套接字连接并处理它们的请求,因此每个SQL命令都有自己的请求。 client正在某些其他计算机上运行(通常;在某些情况下,它可能是相同的计算机)并使用libpq
库或上面的某个包装器。客户端和服务器使用例如TCP / IP套接字进行通信。一些以太网线。
有没有办法在操作后将一些信息打印到stdout
但哪个 stdout ?在(PostGreSQL)服务器机器或客户机上?
(上面的服务器和客户端意味着PostGreSQL意义;如果您正在编写Web应用程序,例如在PHP中 - 或在带有Ocsigen的Ocaml中编码 - ,它可能同时充当HTTP服务器和作为PostGreSQL客户端)
如果要在客户端上打印自定义消息,则应修改SQL命令以获取答案列表(因此您的SQL命令可能是复杂的SELECT
)。然后,您可以在从服务器收到的每一行之后添加printf
。阅读 asynchronous command processing (在libpq
客户端库的文档中)一章,其中介绍了如何逐行获取每一行并进行处理。< / p>
如果要在服务器计算机上打印自定义消息,请注意服务器的 stdout 可能会重定向到/dev/null
。在这种情况下,请考虑一些server programming interface或一些SQL extensions。
一旦您了解了哪一方(client or server, wrt PostGreSQL ),您希望 stdout 消息发生,您可以对其进行适当的编程。