SORU
4 EKİM 2009, Pazar


Kaydet CSV dosyası için PostgreSQL/PostgreSQL çıkış PL

PL/CSV dosyası için PostgreSQL veritabanı PostgreSQL çıkış kaydetmek için en kolay yolu nedir?

PgAdmin III PostgreSQL 8.4 ve sorgular çalıştırmak nerede NUMARASINI eklenti kullanıyorum.

CEVAP
4 EKİM 2009, Pazar


Eğer bir şeyi yeniden kullanım veya otomatikleştirme kolay istiyorsanız, Postgresql COPY komut yerleşik kullanabilirsiniz. örneğin

Copy (Select * From foo) To '/tmp/test.csv' With CSV;

Bu yaklaşım tamamen uzak sunucu üzerinde çalışır- yerel bilgisayara yazabilirsiniz. Aynı zamanda bir İsim olarak çalıştırılması gerekiyor "" (normalde denilen İsim o makinenin yerel dosya sistemi ile kötü şeyler yapıyor. duramıyorum çünkü"") root root

Aslında the SECURITY DEFINER option to CREATE FUNCTION hangi bir işlevi yapmak için kullanabilirsiniz, çünkü bir süper kullanıcı (farklı bir tür güvenlik riski olur otomatik) olarak birbirine bağlı oldukları anlamına gelmezsüper olsan da yine de çalışır.

Önemli bir parçası olan işlevi vardır gerçekleştirmek için ek kontroller, sadece by-pass güvenlik - yazma işlevi olan ihracat kesin verilere ihtiyaç vardır, ya da sen-ebil yazmak bir şey olabilir, kabul çeşitli seçenekler sürece onlar yerine bir katı beyaz. İki şeyi kontrol etmeniz gerekir:

  1. Hangidosyalarıkullanıcı okumak için izin verilmesi/disk üzerine yazmak gerekir? Bu belirli bir dizin olabilir, örneğin, dosya adı öneki veya uygun bir uzantısı olabilir.
  2. Hangitablokullanıcı okuyabilir/veritabanı yazmak gerekir? Bu normalde veritabanında GRANTs tarafından tanımlanan olurdu, ama işlevi şimdi süper çalışıyor, normalde "yasak" tamamen erişilebilir olacak. dışarı olacağını çok tablolar Muhtemelen birisi fonksiyonu çağırmak ve sonunda satır eklemek izin vermek istemiyorum “users” tablosu...

(Veya ithalat) dosyaları ve tablolar ihracat fonksiyonlar bazı örnekler de dahil olmak üzere a blog post expanding on this approach katı şartlarını yerine yazdım.


Diğer yaklaşımistemci tarafında dosya işlemeYani uygulama veya komut dosyası. PostgreSQL sunucusu için kopyalamak dosya ne bilmesine gerek yok, sadece verileri ortaya döküyor ve istemci bir yere koyar.

Bunun için temel sözdizimi COPY TO STDOUT komut ve pgAdmin gibi grafik araçları iyi bir iletişim içinde paket.

psql komut satırı istemcisi"meta-komuta" denir . bir özelliği var ^strong>\copy""COPY, ancak istemci içinde çalıştırmak . gerçek gibi aynı seçenekleri alır ,

\copy (Select * From foo) To '/tmp/test.csv' With CSV

Meta-yeni satır komutları, SQL komutları aksine sonlandırılır çünkü ; sonlandırıcı olduğunu unutmayın.

the docs:

Numarasını talimat \kopyanın KOPYASI ile karıştırmayın. \kopyasını STDOUT STDİN veya kopyadan KOPYA çağırır, ve sonra bir dosya numarasını müşteri için erişilebilir/depolar verileri getirir. Böylece, dosya erişim ve erişim hakları \kopyasını kullanıldığında sunucu yerine istemci bağlıdır.

Uygulama programlama diliolabilirayrıca destek için baskı ya da çekici veri, ama genel olarak kullan COPY FROM STDIN/TO STDOUT içinde standart bir SQL deyimi, bir yol yoktur çünkü bağlantı giriş/çıkış akışı. PHP PostgreSQL handler (değilPDO) çok temel pg_copy_from ve büyük veri setleri için verimli olmayan bir PHP dizi/kopya olan pg_copy_to fonksiyonları içerir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • happyjpy

    happyjpy

    22 AĞUSTOS 2009
  • RiverCityGraphix

    RiverCityGra

    6 Ocak 2012
  • The Amazing Atheist

    The Amazing

    20 Kasım 2006