麻烦在php中使用psql元命令\ copy export csv

时间:2016-03-22 16:17:41

标签: php postgresql

我试图通过浏览器上的PHP脚本将csv文件从linux机器导出到本地PC。

我做了很多研究,但我无法找到我想要的东西(也许它不存在)。

我的脚本通过php连接到数据库并使用localhost,就像我的其他php脚本一样,它只显示数据库中的数据但不会导出数据。

这是我徒劳的尝试:

$user = 'postgres';
$password = 'XXXXX';
$db = 'ltg';
$host = 'localhost';
$conn=pg_connect('dbname ='.$db.' user = '.$user.' password = '.$password.' host = '.$host) or die ("Could not connect: ");

//query for copying/exporting to csv
echo "system(\copy (select lat, lon from ltg_data order by time desc limit 1000) To '~/Downloads/export.csv' CSV HEADER);"

至少有两个问题让我感到困惑。与db的连接适用于从db访问/显示数据。我是否需要使用" localhost"以外的其他内容?导出数据?

其次,运行\ copy命令是有问题的。我不知何故需要运行一个psql元命令来导出数据,我真的不知道如何通过php做到这一点。

非常感谢你的时间。

1 个答案:

答案 0 :(得分:1)

问题是system运行一个shell命令(不确定为什么你会回复它?),所以它根本不会通过$conn。当然,没有名为\copy的shell命令。

如果您愿意,可以使用\copy ...之类的内容向psql发送system("echo '\copy ....' | psql"),但是您必须小心逃避参数等。

由于您的数据库已在localhost,并且您已与postgres用户建立了联系,因此您可以使用COPY代替\copy,并发送通过$conn命令。

以下是有关COPY的文档。