运行SQL文件时如何将内容打印到postgres输出控制台?

use*_*ser 1 sql postgresql debugging console

运行SQL文件时如何将内容打印到postgres输出控制台?

我使用以下命令运行SQL文件:

    PGPASSWORD=admin;
    psql --host "localhost" --port 5432 --username "postgres" -d "aula21" < $1
Run Code Online (Sandbox Code Playgroud)

我搜索了很多,然后发现了这个策略:

    DO $$ BEGIN
        RAISE INFO '    ';
        RAISE INFO '    ';
        RAISE INFO '1...';
    END $$;

    SELECT paciente.nome
    FROM paciente
    WHERE paciente.idade =
        ( SELECT MIN( paciente.idade )
          FROM paciente );

    DO $$ BEGIN
        RAISE INFO '      nome       ';
        RAISE INFO '-----------------';
        RAISE INFO 'Maria Aparecida';
        RAISE INFO '    ';
        RAISE INFO '    ';
        RAISE INFO '    ';
        RAISE INFO '2...';
    END $$;

    SELECT consulta.data, consulta.hora
    FROM consulta
    WHERE consulta.valor =
        ( SELECT MAX( consulta.valor )
          FROM consulta );

    DO $$ BEGIN
        RAISE INFO '     Data        hora      valor';
        RAISE INFO '"2002-03-21"; "09:00:00";122.0000';
        RAISE INFO '    ';
        RAISE INFO '    ';
        RAISE INFO '    ';
        RAISE INFO '3...';
    END $$;
Run Code Online (Sandbox Code Playgroud)

生成以下输出:

    INFO:      
    INFO:      
    INFO:  1...
    DO
          nome       
    -----------------
     Maria Aparecida
    (1 row)

    INFO:        nome       
    INFO:  -----------------
    INFO:  Maria Aparecida
    INFO:      
    INFO:      
    INFO:      
    INFO:      
    INFO:      
    INFO:      
    INFO:  2...
    DO
        data    |   hora   
    ------------+----------
     2002-03-21 | 09:00:00
    (1 row)

    INFO:       Data        hora      valor
    INFO:  "2002-03-21"; "09:00:00";122.0000
    INFO:      
    INFO:      
    INFO:      
    INFO:      
    INFO:      
    INFO:      
    INFO:  3...
    DO
Run Code Online (Sandbox Code Playgroud)

但是,有没有更好的办法像下面这样写呢?

    print '    ';
    print '    ';
    print '1...';

    SELECT paciente.nome
    FROM paciente
    WHERE paciente.idade =
        ( SELECT MIN( paciente.idade )
          FROM paciente );

    print '      nome       ';
    print '-----------------';
    print 'Maria Aparecida';
    print '    ';
    print '    ';
    print '    ';
    print '    ';
    print '    ';
    print '    ';
    print '2...';

    SELECT consulta.data, consulta.hora
    FROM consulta
    WHERE consulta.valor =
        ( SELECT MAX( consulta.valor )
          FROM consulta );

    print '     Data        hora      valor';
    print '"2002-03-21"; "09:00:00";122.0000';
    print '    ';
    print '    ';
    print '    ';
    print '    ';
    print '    ';
    print '    ';
    print '3...';
Run Code Online (Sandbox Code Playgroud)

使用以下方法也可以实现这一点:

\echo 'INFO:     '
\echo 'INFO: 1...'
\echo 'INFO:     '

SELECT paciente.nome
FROM paciente
WHERE paciente.idade =
    ( SELECT MIN( paciente.idade )
      FROM paciente )

\echo 'INFO:       nome       '
\echo 'INFO: -----------------'
\echo 'INFO: Maria Aparecida'
\echo 'INFO:     '
\echo 'INFO:     '
\echo 'INFO:     '
\echo 'INFO:     '
\echo 'INFO:     '
\echo 'INFO: 2...'
\echo 'INFO:     '

SELECT consulta.data, consulta.hora
FROM consulta
WHERE consulta.valor =
    ( SELECT MAX( consulta.valor )
      FROM consulta )

\echo 'INFO:      Data        hora      valor'
\echo 'INFO: "2002-03-21" "09:00:00"122.0000'
\echo 'INFO:     '
\echo 'INFO:     '
\echo 'INFO:     '
\echo 'INFO:     '
\echo 'INFO:     '
\echo 'INFO: 3...'
\echo 'INFO:     '
Run Code Online (Sandbox Code Playgroud)

Lau*_*lbe 5

我认为您正在寻找\qechopsql命令,请参阅文档