Неполный вывод в os / exec при выполнении команд psql - PullRequest
0 голосов
/ 25 января 2019

В настоящее время я использую os/exec для последовательного запуска многих psql команд.

Моя проблема в том, что если во время выполнения скрипта произошла ошибка, вывод не показывает ее.

Пример: При выполнении командного файла из командной строки вывод будет таким:

SET
CREATE FUNCTION
psql:update-14.3.7.1/dml/----------------xxxxxxxx.sql:33: ERROR:  null value in column "tipoxxxxxxxx" violates not-null constraint
DETALHE:  Failing row contains (9, 0, null, null, null, null, AAAAAAAAA_BBBBBBBBBB_CCCCC_BANANA, null, null, null).
CONTEXTO:  SQL statement "insert INTO ----------------xxxxxxxx
        (id,versao,tipoxxxxxxxx,carrotdeapplefinal,carrotdetttttttt,ativa,funcionalidade,driver,alterar_na_xxxxxxxx)
        values
        (nextval('sq_----------------xxxxxxxx'),0,tipoaaaaaaaaa,carrotapple,carrottttttttt,alterarNaxxxxxxxx)"
PL/pgSQL function createorupdateaaaaaaaaa() line 22 at SQL statement
DROP FUNCTION

И, выполнив точно такой же файл из кода Go, получим:

SET
CREATE FUNCTION
DROP FUNCTION

Код My Go для запуска команд (и отображения выходных данных):

    cmd := exec.Command(comando, argList...)
    var out bytes.Buffer
    var stderr bytes.Buffer
    cmd.Stdout = &out
    cmd.Stderr = &stderr
    err := cmd.Run()
    cmdS := out.String()
    fmt.Println("cmdS", cmdS)
    if err != nil {
        fmt.Println("XYZ")
        fmt.Println(fmt.Sprint(err) + ": " + stderr.String())
    }

Как изменить мой код для отображения других строк вывода?

1 Ответ

0 голосов
/ 25 января 2019

Программы могут использовать stderr и stdout по своему выбору.Наличие ошибки выполнения не имеет отношения к тому, было ли что-то записано в stderr или нет.

Всегда проверяйте оба потока при поиске всех выходных данных из программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...