在Postgresql中打印自定义消息

时间:2017-01-18 06:25:20

标签: postgresql

我在Posgresql中有一个sql命令:

insert into table1(a, b, c)
select (d, e, f) from table2;

它只是一个命令,而不是一个程序。 有没有办法在执行每行操作后将某些信息打印到stdout? 如果table1中有10条记录,则应该有10条自定义消息。

2 个答案:

答案 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 消息发生,您可以对其进行适当的编程。