Я искал 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,
Я искал 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,