2016-03-22 11 views
1

Bir linux makinesinden bir csv dosyasını bir tarayıcıdaki bir PHP betiği aracılığıyla yerel bir PC'ye vermeyi deniyorum. copy dışa aktarma csv için pspl meta komutlarını kullanarak sorun gidermek

Biraz araştırma yaptım, ama aradığım şeyi bulamıyorum (belki de yoktur).

Scriptim veritabanına php ile bağlanıyor ve veritabanından veri görüntüleyen ancak verileri vermeyen diğer php betikleri gibi localhost kullanıyor.

İşte benim nafile çabadır:

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

Ben yaklaşık karıştı en azından iki sorunları vardır. Db bağlantısı, db'den veriye erişmek/görüntülemek için iyi çalışır. Verileri dışa aktarmak için "localhost" dışında bir şey kullanmam gerekiyor mu?

İkincisi, \ copy komutunu çalıştırmak sorunludur. Verileri vermek için bir psql meta-komutu çalıştırmam gerekiyor ve bunu php ile nasıl yapacağımı bilmiyorum.

Zaman ayırdığınız için çok teşekkürler.

cevap

1

Sorun şu ki, system bir kabuk komutunu çalıştırıyor (neden yankılanıyorsunuz emin değil misiniz?), Bu yüzden $conn'dan geçmiyor. Ve tabii ki \copy olarak adlandırılan bir kabuk komutu yoktur. Eğer system("echo '\copy ....' | psql") gibi bir şey ile psql bir \copy ... gönderebilir, ancak localhost üzerindedir Veritabanınıza yana vb

parametrelerini kaçan dikkatli olmak gerekir istiyorum ve zaten bağlıyorsanız

postgres kullanıcısı, \copy yerine COPY'u kullanabilir ve $conn aracılığıyla komutu gönderebilirsiniz.

COPY ile ilgili dökümanlar.

+0

Çok teşekkürler! Sanırım bir yerlere gidiyorum. İşte sahip olduğum şey: sistem ("echo" \ copy (Zaman dilimi, lon, ltg_data zamanından başlayarak zaman sınırı 1000'e kadar)) 'export.csv' CSV HEADER '| psql "); Tarayıcıda çalışır gibi görünüyor, ancak bulabileceğim herhangi bir yere veri yatırmıyor. Baska öneri? Daha fazla kaçan parametreye ihtiyacım olduğunu düşünmüyorum. Teşekkürler! – user1610717

+0

Sadece 'export.csv' yerine tam bir yol verdim, böylece nereye bakacağınızı biliyorsunuz! –

+0

Verdim ... 'C:' \ export.csv '. "\" Den kaçtım. Başka bir şeyden kaçmam gerektiğini mi düşünüyorsun? Dosyayı hiçbir yerde bulamadım. Yürütüldüğünde ne yapmaya çalıştığını anlamanın bir yolu var mı? Belki de bu sistemi kullanmanın bir dezavantajıdır. Şanssız düzenli COPY komutunu denedim. Her türlü yardım için tekrar teşekkürler. – user1610717

İlgili konular