2016-03-22 22 views
1

LinuxマシンからローカルPCにcsvファイルをエクスポートしようとしています。PHPでpsqlメタコマンドを使用して copy export csv

私は良い研究をしましたが、探しているものが見つかりませんでした(多分存在しないかもしれません)。

私のスクリプトはphp経由でデータベースに接続し、データベースからのデータを表示するだけでデータをエクスポートしない他のPHPスクリプトと同様にlocalhostを使用します。ここで

は私の無益な試みです:

$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);" 

2つの問題は私が混乱していることを、少なくとも、があります。 dbへの接続は、dbからのデータのアクセス/表示に適しています。データをエクスポートするために「localhost」以外のものを使用する必要がありますか?

第2に、\ copyコマンドの実行に問題があります。私は何らかの形でデータをエクスポートするためにpsqlメタコマンドを実行する必要があります、そして、私は実際にPHPを介してそれを行う方法を知らない。

ありがとう、ありがとうございます。

答えて

1

systemはシェルコマンドを実行しています(なぜそれをエコーし​​ているのかわからないため)、$connをまったく通過しません。もちろん、\copyというシェルコマンドはありません。あなたがsystem("echo '\copy ....' | psql")ようなものでpsql\copy ...を送ることができますが、localhost上にあるデータベースのでなど

パラメータを脱出して注意する必要がありますしたいとあなたはすでにと接続している場合

postgresユーザーの場合は、\copyの代わりにCOPYを使用し、$connでコマンドを送信できます。

ここにはCOPYに関するドキュメントがあります。

+0

ありがとうございました!私はどこかに行っていると思う。ここでは私が持っているものは次のとおりです:system( "echo '\ copy(lat、lon、ltg_dataからの時間をdesc desc limit 1000で選択)' export.csv 'CSV HEADER' | psql"); ブラウザで実行されているように見えますが、データをどこにでも置くことはできません。助言がありますか?私はこれ以上エスケープする必要はないと思います。ありがとう! – user1610717

+0

私は 'export.csv'の代わりに完全なパスを与えて、どこを見ているかを知ることができます! –

+0

私はそれを与えました... 'C:' \ export.csv '。私は "\"をエスケープした。私は他の何かを脱出する必要があると思いますか?ファイルをどこにも見つけられません。 実行時に何をしようとしているのかわかる方法はありますか?おそらくそれはシステムを使うことの欠点です。私は運がない普通のCOPYコマンドを試しました。 もう一度お手数をおかけします。 – user1610717

関連する問題