我正在编写一个powershell脚本,用于向文件输出查询。连接到数据库后,我得到一个权限被拒绝的错误,我无法绕过。这是一个生产数据库,所以我无法修改现有的表模式,只是尝试将内容写入文件。我也尝试使用postgres(root)帐户运行下面的脚本,但没有运气。 任何帮助将不胜感激。
$DBConnectionString = "Driver={PostgreSQL Unicode(x64)};Server=localhost;Port=5432;Database=PRPC;Uid=id;Pwd=pwd";
$DBCommandText = "copy (select * from table) to
'C:\Users\myUser\Desktop\output.txt' with csv;";
$DBConn = New-Object System.Data.Odbc.OdbcConnection;
$DBConn.ConnectionString = $DBConnectionString;
$DBConn.Open();
$DBCmd = $DBConn.CreateCommand();
$DBCmd.CommandText = $DBCommandText;
$DBCmd.ExecuteReader();
$DBConn.Close();
答案 0 :(得分:0)
这取决于PostgreSQL版本及其安装方式。
默认情况下, 9.1及更早版本作为postgres
操作系统用户安装在Windows上。 9.2和更新版本以NETWORK SERVICE
运行。在这两种情况下,您都可以更改默认值,例如在域帐户下运行。
PostgreSQL的COPY
命令将文件I / O作为PostgreSQL服务器在下运行的用户帐户。因此该用户必须具有对目标的写入权限。通常一个用户无法写入另一个用户的主目录,因此您收到错误。
要允许此工作,您需要创建一个目录,然后在“安全性属性”选项卡中更改其权限,以便用户PostgreSQL运行,因为它有权写入它。您可能还需要更改其包含目录的权限,以便PostgreSQL可以读取它;我不是100%肯定Windows权限模型中的细节,因为我主要使用unix系统。