530*_*529 5 postgresql psql powershell
我有一个简单的脚本,它应该执行一个选择语句并将其输出到 CSV。我的问题是脚本连接到数据库并挂起等待我的 sql 指令(这些指令在脚本上并且应该自动执行)。任何帮助将不胜感激。
Set-Location 'E:\Program Files\PostgreSQL\9.1\bin\';
$env:PGPASSWORD = 'mypwd';
.\psql --% -U postgres -w myDB
.\psql --% -c "copy {'SELECT * FROM myTable';} TO 'C:\Users\e\Desktop\test1.csv' CSV DELIMITER ',';"
Run Code Online (Sandbox Code Playgroud)
Set-Location 'E:\Program Files\PostgreSQL\9.1\bin\';
$env:PGPASSWORD = 'mypwd';
.\psql --% -U postgres -w myDB
.\psql --% -c "copy {'SELECT * FROM myTable';} TO 'C:\Users\e\Desktop\test1.csv' CSV DELIMITER ',';"
Run Code Online (Sandbox Code Playgroud)
你psql
在这里调用了两次。第一个进入交互模式,因为没有提供标准输入,没有提供-f
文件名参数,也没有-c
命令字符串。
所以脚本永远不会进入第二次psql
调用。将参数放在一行。
此外:
WITH (CSV, HEADER)
不CSV DELIMITER ','
{'SELECT * FROM myTable';}
完全是胡说八道。只需使用,COPY mytable TO ...
或者如果您需要子查询,请使用COPY (SELECT * FROM mytable) TO ...
\copy
不COPY
(我假设这会--%
阻止 Powershell 在命令的其余部分查找 Powershell 标志和选项;我以前从未见过)。
我认为你正在寻找更像的东西:
Set-Location 'E:\Program Files\PostgreSQL\9.1\bin\';
$env:PGPASSWORD = 'mypwd';
.\psql --% -U postgres -w myDB -c "\copy (SELECT * FROM myTable) TO 'C:\Users\e\Desktop\test1.csv' WITH (FORMAT CSV, HEADER);"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15067 次 |
最近记录: |