2017-01-18 2 views
-1

У меня есть SQL команды в PosgreSQL:Печать пользовательское сообщение в Postgresql

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

Это просто одна команда, а не процедура. Есть ли способ распечатать некоторую информацию в stdout после выполнения операции над каждой строкой? Если в таблице 1 есть 10 записей, должно быть 10 пользовательских сообщений.

ответ

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; 
+0

почему '|| col_b1'? – Jodooomi

+0

Если вы хотите напечатать значение col_b1 с помощью своего сообщения, вы можете его использовать. –

+0

Если вы не хотите печатать какие-либо значения столбцов, удалите '|| col_b1' –

2

У меня есть SQL команды в PosgreSQL

В общем, две машины (возможно, под управлением Linux) и два процесса затем участвуют, поскольку PostGreSQL имеет конструкцию клиент-сервер. RDBMS работает на одном компьютере (в одном или нескольких процессах) и прослушивает соединения сокетов и обрабатывает запросы на них, поэтому каждая команда SQL имеет свой собственный запрос. client работает на какой-либо другой машине (в общем случае, в некоторых случаях это может быть компьютер) и использует библиотеку libpq или некоторую оболочку над ней. Клиент и сервер взаимодействуют с использованием сокетов TCP/IP, например. некоторые кабели Ethernet.

Есть ли способ, чтобы распечатать информацию на стандартный вывод после операции

Но который стандартный вывод? На сервере (PostGreSQL) или на клиентском компьютере?

(сервер и клиент выше, понимается в смысле PostGreSQL, если вы кодирования веб-приложения, например, в PHP - или в OCaml с Ocsigen - это, вероятно, действует и как сервер HTTP и как клиент PostGreSQL)

Если вы хотите напечатать пользовательское сообщение на клиентском, вам нужно изменить команду SQL, чтобы получить список ответов (поэтому ваша команда SQL может быть сложной SELECT). Затем вы можете добавить printf после каждой строки, полученной с сервера. Прочтите главу на странице asynchronous command processing (в документации libpqклиентской библиотеки), в которой объясняется, как получить каждую строку по одной и обрабатывать ее.

Если вы хотите напечатать специальное сообщение на сервер машине , следует помнить, что стандартный вывод сервера может быть перенаправлен на /dev/null. В этом случае рассмотрите некоторые server programming interface или некоторые SQL extensions.

После того, как вы уже поняли, на какой стороне (client or server, w.r.t. PostGreSQL) вы хотите стандартный вывод сообщение произойдет, вы можете запрограммировать его соответствующим образом.

+0

на серверной машине. – Jodooomi

+0

'может быть перенаправлен' или может не быть. – Jodooomi

+0

Тогда вы противоречивы.Вы выбираете другой ответ как окончательный ответ (и это нормально), но он передает сообщение на клиентской машине, а не «на сервере», как говорится в вашем первом комментарии. –

Смежные вопросы