Добавление метки времени в Postgres Результат выполнения PSQL через Powershell Start-Transcript

Я искал foruns и сеть, и я не нашел ситуации, которая соответствует моей проблеме.

Мне нужно «принять действие», основанное на подробном выводе команды PSQL (postgres line comand), из исполнения Powershell.

Лучшее, что я мог найти (с большой благодарностью людям из обмена стеками), - это зарегистрировать подробные данные с помощью Start-Transcript, а затем прочитать журнал и предпринять действия. Дело в том, что мне все еще нужно проверить, есть ли способ предпринять действие «во время» выполнения или, по крайней мере, «измерить время» каждого подробного вывода.

К сожалению, я не могу правильно изменить функции pgsql, все, что у меня есть, - это подробный вывод и «уведомления», которые уже реализованы.

Я попробовал решение «timestamp filter», предложенное в разделе « Как добавить временные метки к отдельным строкам PowerShell и вывода? », Но по какой-то причине он не генерирует временную метку так, как мне нужно.

Я сделал именно этот пример, так как вы можете увидеть мои очень простые команды powershell:

filter timestamp {"$(Get-Date -Format o): $_"}
cmd /c $DBCmd -f c:dimycmd.sql "postgresql://myuser:mypass@myhost/mydb" | timestamp

Результаты проверки журнала сгенерированного сценария Start-Transcript, а также непосредственно в командной строке, следующие:

2018-07-30T16:30:32.6632687-03:00:              ?column?
2018-07-30T16:30:32.6632687-03:00: -----------------------------------
2018-07-30T16:30:32.6632687-03:00:  TIME2018-07-30 16:26:09.683957-03
2018-07-30T16:30:32.6632687-03:00: (1 row)
2018-07-30T16:30:32.6789028-03:00:
psql:c:/di/LOCK01.sql:2: NOTICE:  [LOG][Delete] [ADT_SPD_EFD_NFC_NECF_RDIA_ANALIT_ITEM]
psql:c:/di/LOCK01.sql:2: NOTICE:  [LOG][Delete] [ADT_SPD_EFD_NFC_NECF_NF]
psql:c:/di/LOCK01.sql:2: NOTICE:  [LOG][Delete] [ADT_SPD_EFD_NFC_NECF_RDIA_ANALIT]
psql:c:/di/LOCK01.sql:2: NOTICE:  [LOG][Delete] [ADT_SPD_EFD_NF_ITEM]
psql:c:/di/LOCK01.sql:2: NOTICE:  [LOG][Delete] [ADT_SPD_EFD_CFE_EQP_SAT]
psql:c:/di/LOCK01.sql:2: NOTICE:  [LOG][Delete] [ADT_SPD_EFD_NFC_ECF_CFE_CPL]
psql:c:/di/LOCK01.sql:2: NOTICE:  [LOG][Delete] [ADT_SPD_EFD_CFE]
psql:c:/di/LOCK01.sql:2: NOTICE:  [LOG][Delete] [ADT_SPD_EFD_NFC_NECF_NF_ITEM]
psql:c:/di/LOCK01.sql:2: NOTICE:  [LOG][Delete] [ADT_SPD_EFD_NF_CPL]
2018-07-30T16:30:37.2569238-03:00:  fn_adt_myfunction
2018-07-30T16:30:37.2588785-03:00: -----------------------------------------
2018-07-30T16:30:37.2598554-03:00:                                        1
2018-07-30T16:30:37.2608365-03:00: (1 row)
2018-07-30T16:30:37.2618073-03:00:

Commad mycmd.sql - это выполнение функции pgsql:

SELECT adt_objprog.fn_myfunction(myparams);

Функция myfunction имеет простые Deletes, как показано:

v_cmd := 'DELETE FROM ADT_TDL.ADT_SPD_EFD_EGA_CV115_CDIA_ANALIT'||v_partionname||' WHERE COD_INT_ADT = '||v_cod_int_adt||' AND COD_INT_EFD IN (SELECT COD_INT_EFD FROM WORKDL_ADT.ADT_SPD_EFD_CHAVE_REMOCAO_1427_1);';
raise notice '[LOG][Delete] [ADT_SPD_EFD_EGA_CV115_CDIA_ANALIT]';
execute(v_cmd);
v_cmd := 'DELETE FROM ADT_TDL.ADT_SPD_EFD_EGA_CV115_CDIA'||v_partionname||' WHERE COD_INT_ADT = '||v_cod_int_adt||' AND COD_INT_EFD IN (SELECT COD_INT_EFD FROM WORKDL_ADT.ADT_SPD_EFD_CHAVE_REMOCAO_1427_1);';
raise notice '[LOG][Delete] [ADT_SPD_EFD_EGA_CV115_CDIA]';
execute(v_cmd);

Я действительно не понимаю, почему метка времени не создается для сообщений «уведомления», как вы можете видеть в примере.

Кто-нибудь знает, почему это происходит, и если есть способ (каким-либо образом) сделать это?

Заранее большое спасибо,

С наилучшими пожеланиями,

Луиш

ps: Я изменил Title на лучшую (я думаю) и незначительные исправления.

postgresql,powershell,timestamp,output,psql,

1

Ответов: 0

Добавление метки времени в Postgres Результат выполнения PSQL через Powershell Start-Transcript

Я искал foruns и сеть, и я не нашел ситуации, которая соответствует моей проблеме.

Мне нужно «принять действие», основанное на подробном выводе команды PSQL (postgres line comand), из исполнения Powershell.

Лучшее, что я мог найти (с большой благодарностью людям из обмена стеками), - это зарегистрировать подробные данные с помощью Start-Transcript, а затем прочитать журнал и предпринять действия. Дело в том, что мне все еще нужно проверить, есть ли способ предпринять действие «во время» выполнения или, по крайней мере, «измерить время» каждого подробного вывода.

К сожалению, я не могу правильно изменить функции pgsql, все, что у меня есть, - это подробный вывод и «уведомления», которые уже реализованы.

Я попробовал решение «timestamp filter», предложенное в разделе « Как добавить временные метки к отдельным строкам PowerShell и вывода? », Но по какой-то причине он не генерирует временную метку так, как мне нужно.

Я сделал именно этот пример, так как вы можете увидеть мои очень простые команды powershell:

filter timestamp {"$(Get-Date -Format o): $_"}
cmd /c $DBCmd -f c:dimycmd.sql "postgresql://myuser:mypass@myhost/mydb" | timestamp

Результаты проверки журнала сгенерированного сценария Start-Transcript, а также непосредственно в командной строке, следующие:

2018-07-30T16:30:32.6632687-03:00:              ?column?
2018-07-30T16:30:32.6632687-03:00: -----------------------------------
2018-07-30T16:30:32.6632687-03:00:  TIME2018-07-30 16:26:09.683957-03
2018-07-30T16:30:32.6632687-03:00: (1 row)
2018-07-30T16:30:32.6789028-03:00:
psql:c:/di/LOCK01.sql:2: NOTICE:  [LOG][Delete] [ADT_SPD_EFD_NFC_NECF_RDIA_ANALIT_ITEM]
psql:c:/di/LOCK01.sql:2: NOTICE:  [LOG][Delete] [ADT_SPD_EFD_NFC_NECF_NF]
psql:c:/di/LOCK01.sql:2: NOTICE:  [LOG][Delete] [ADT_SPD_EFD_NFC_NECF_RDIA_ANALIT]
psql:c:/di/LOCK01.sql:2: NOTICE:  [LOG][Delete] [ADT_SPD_EFD_NF_ITEM]
psql:c:/di/LOCK01.sql:2: NOTICE:  [LOG][Delete] [ADT_SPD_EFD_CFE_EQP_SAT]
psql:c:/di/LOCK01.sql:2: NOTICE:  [LOG][Delete] [ADT_SPD_EFD_NFC_ECF_CFE_CPL]
psql:c:/di/LOCK01.sql:2: NOTICE:  [LOG][Delete] [ADT_SPD_EFD_CFE]
psql:c:/di/LOCK01.sql:2: NOTICE:  [LOG][Delete] [ADT_SPD_EFD_NFC_NECF_NF_ITEM]
psql:c:/di/LOCK01.sql:2: NOTICE:  [LOG][Delete] [ADT_SPD_EFD_NF_CPL]
2018-07-30T16:30:37.2569238-03:00:  fn_adt_myfunction
2018-07-30T16:30:37.2588785-03:00: -----------------------------------------
2018-07-30T16:30:37.2598554-03:00:                                        1
2018-07-30T16:30:37.2608365-03:00: (1 row)
2018-07-30T16:30:37.2618073-03:00:

Commad mycmd.sql - это выполнение функции pgsql:

SELECT adt_objprog.fn_myfunction(myparams);

Функция myfunction имеет простые Deletes, как показано:

v_cmd := 'DELETE FROM ADT_TDL.ADT_SPD_EFD_EGA_CV115_CDIA_ANALIT'||v_partionname||' WHERE COD_INT_ADT = '||v_cod_int_adt||' AND COD_INT_EFD IN (SELECT COD_INT_EFD FROM WORKDL_ADT.ADT_SPD_EFD_CHAVE_REMOCAO_1427_1);';
raise notice '[LOG][Delete] [ADT_SPD_EFD_EGA_CV115_CDIA_ANALIT]';
execute(v_cmd);
v_cmd := 'DELETE FROM ADT_TDL.ADT_SPD_EFD_EGA_CV115_CDIA'||v_partionname||' WHERE COD_INT_ADT = '||v_cod_int_adt||' AND COD_INT_EFD IN (SELECT COD_INT_EFD FROM WORKDL_ADT.ADT_SPD_EFD_CHAVE_REMOCAO_1427_1);';
raise notice '[LOG][Delete] [ADT_SPD_EFD_EGA_CV115_CDIA]';
execute(v_cmd);

Я действительно не понимаю, почему метка времени не создается для сообщений «уведомления», как вы можете видеть в примере.

Кто-нибудь знает, почему это происходит, и если есть способ (каким-либо образом) сделать это?

Заранее большое спасибо,

С наилучшими пожеланиями,

Луиш

ps: Я изменил Title на лучшую (я думаю) и незначительные исправления.

01PostgreSQL, PowerShell, метка времени, выход, PSQL,
Похожие вопросы