【问题标题】:How to print things to the postgres output console when running a SQL file? [duplicate]运行 SQL 文件时如何将内容打印到 postgres 输出控制台? [复制]
【发布时间】:2016-10-19 18:58:13
【问题描述】:

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

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

    PGPASSWORD=admin;
    psql --host "localhost" --port 5432 --username "postgres" -d "aula21" < $1

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

    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 $$;

生成以下输出:

    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

但是有没有更好的方法来写成下面这样?

    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...';

这一点也可以通过以下方式实现:

\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:     '

【问题讨论】:

  • 不是真的 - 执行 SQL 时用户友好的输出恐怕不是一个经常出现的用例。编写和执行它的人通常都知道它:) 我可以问你为什么需要它吗?

标签: sql postgresql debugging console


【解决方案1】:

我认为您正在寻找\qecho psql 命令,请参阅the documentation

【讨论】:

  • \qecho 可以很好地打印到标准输出
猜你喜欢
  • 2021-06-05
  • 2022-12-04
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 2020-04-24
  • 1970-01-01
  • 2016-11-28
  • 1970-01-01
相关资源
最近更新 更多