在php中为copy export csv使用psql元命令时出现问题


Trouble using psql meta-commands in php for copy export csv

我正试图通过浏览器上的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);"

至少有两个问题让我感到困惑。与数据库的连接可以很好地访问/显示数据库中的数据。我是否需要使用"localhost"以外的东西来导出数据?

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

非常感谢您抽出时间。

问题是system运行一个shell命令(不确定为什么要回显它?),所以它根本不通过$conn。当然,没有一个shell命令叫做'copy

如果你愿意,你可以用类似system("echo ''copy ....' | psql")的东西将'copy ...发送到psql,但你必须小心转义参数等。

由于您的数据库位于localhost上,并且您已经与postgres用户连接,因此您可以使用COPY而不是'copy,并通过$conn发送命令。

这是关于COPY的文档。