PostgreSQL通过COPY FROM PROGRAM获取磁盘可用空间



从版本 9.3 开始,可以将命令行的输出导入到表中。 我正在使用窗口,我想在(临时(表中导入

wmic logicaldisk get size, freespace, caption
Caption  FreeSpace     Size
C:       7454072832    118087389184
D:       151787872256  484033048576
E:
F:       110551040     625094656
G:       136850108416  481803997184
V:       272621289472  990730260480
X:       272621289472  990730260480
Y:       272621289472  990730260480

我尝试了查询

CREATE TABLE IF NOT EXISTS _disks(row text);
TRUNCATE TABLE _disks;
COPY _disks FROM PROGRAM 'wmic logicaldisk get size, freespace, caption' ESCAPE '\' CSV;
SELECT * FROM _disks;
ERROR: COPY escape must be a single one-byte character

然后我试了

COPY _disks FROM PROGRAM 'wmic logicaldisk get size, freespace, caption' ESCAPE '' CSV;
ERROR: unquoted newline found in data

另一方面

COPY _disks FROM PROGRAM 'wmic logicaldisk get size, freespace, caption';
ERROR: unquoted newline found in data

我尝试了其他不同的解决方案,但我被卡住了。

有什么建议吗?

编辑:

也许这样的事情可以让我接近,但还不够

COPY _disks FROM PROGRAM 'for /f "tokens=*" %F in (''wmic logicaldisk get size^, freespace^, caption'') do @echo %F';

我认为有一种方法可以修改 EOL,并且可能会通过这种模式,但我错过了一些东西......

您必须声明字符串值需要通过在它前面添加E来转义。在您的情况下,如果您只传递'\'它将被解释为两个字符,这在此函数中是不允许的。看看这个:

SELECT E'\', '\';
?column? | ?column? 
----------+----------
        | \
(1 Zeile)

这是一种获取 CSV 文件的方法。有一些方法可以写入数据库,但我认为有很多方法可以导入已经众所周知的 CSV 文件。

Get-CimInstance -ClassName CIM_LogicalDisk |
Select-Object -Property DeviceID,FreeSpace,Size |
ConvertTo-Csv -NoTypeInformation -Delimiter ',' |
Out-File -FilePath 'ld.txt' -Encoding ascii

这可以在 cmd.exe .bat 文件脚本中使用。

powershell -NoLogo -NoProfile -Command ^
"Get-CimInstance -ClassName CIM_LogicalDisk |" ^
"Select-Object -Property DeviceID,FreeSpace,Size |" ^
"ConvertTo-Csv -NoTypeInformation -Delimiter ',' |" ^
"Out-File -FilePath 'ld.txt' -Encoding ascii"

最新更新