如何从PostgreSQL函数中记录信息

时间:2016-03-09 03:18:14

标签: postgresql powershell

所以我有一个PowerShell脚本,它定义了一个日志并调用另一个powershell函数:(下面的例子)

<?php
    session_start();
    $session = $_SESSION['pass'];
    $post = $_POST['pass'];
    $name = $_POST['name'];
    if($post === $session){
        echo "<p>Good request</p><br>";
    }
    else{
        echo "<p>Bad request</p><br>";
    }
?>
<script>
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open('GET', 'myArrays.txt', true);
    xmlhttp.send();
    xmlhttp.onreadystatechange = processRequest;
    function processRequest(e) {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            var response = JSON.parse(xmlhttp.responseText);
            for (var i = 0; i < response.length; i++) {
                document.write(response[i].username + ' ' + response[i].password + '<br>')
            }
        }
    }
</script>

当我调用Start-Transcript -path ".\ExampleLog.txt" .\GetDataFromDatabase.ps1 Stop-Transcript 时,它不会记录脚本打印的任何内容,尽管它出现在PowerShell窗口中。

如果我保存脚本的输出并回显它:

.\GetDataFromDatabase.ps1

它只记录脚本的结果(例如“COPY 102304”),并且没有PostgreSQL函数打印到命令窗口的信息。

如何确保记录postgres函数中引发的信息?

1 个答案:

答案 0 :(得分:1)

正如@DavidBrabant所提到的,GetDataFromDatabase.ps1很可能是将状态输出写入主机控制台。主机输出通常无法捕获,因为它不会转到常规output streams。要解决此问题,您需要以某种方式将主机输出转换为其他流之一。据我所知,实现此目的的唯一方法是在单独的powershell进程中运行脚本。这样子进程的主机输出进入父进程的成功输出流:

Start-Transcript -path ".\ExampleLog.txt"
powershell.exe -File .\GetDataFromDatabase.ps1
Stop-Transcript

请注意这种方法存在副作用。例如,其他流以相同的方式被破坏,即详细,调试和警告输出也转到父进程的成功输出流。只有错误输出才会转到错误输出流。此外,父进程的$*Preference设置不会被子进程继承。

要获得进一步的帮助,您需要显示GetDataFromDatabase.ps1

的内容