2012-04-09 14 views
8

'daki KOPYALAMA işlevi PostgreSQL veritabanında bir CSV dosyasını içe aktarmak için PostgreSQL'deki COPY işlevini kullanmak istiyorum.PostgreSQL

documentation dosya adında dosya adı belirtildiğinde, CSV dosyasının belirli bir konumda depolanması veya herhangi bir konumda depolanabilmesi gerekir.

Örneğin, copy data_table from '/tmp/outputdata.csv' WITH DELIMITER AS ',' CSV QUOTE AS '"';. tmp yazdığında, bu C: sürücüsündeki tmp klasörü anlamına gelir. Başka bir klasör adına değişiklik olabilir mi?

cevap

15

. Sahip olduğunuz şey, köke bağlı bir Linux yoludur. Windows, Windows üzerinde çalışırken belirttiğiniz sürücü harflerini kullanır. Windows gösterim kullanıyorsanız standard_conforming_strings = on kullanmıyorsanız

, sen kaçış ters eğik zorunda özen - son sürümü 9.1 varsayılan ancak eski sürümlerde olduğu. Bunun gibi:

COPY data_table from E'C:\\tmp\\outputdata.csv' WITH ... 

Her durumda çalışır. standard_conforming_strings = on ile
de yazabilirsiniz: Bir PostgreSQL, Windows sunucu da eğik çizgi yerine ters eğik varsayılan yol notasyonu anladığını

COPY data_table from 'C:\tmp\outputdata.csv' WITH ... 

Not.

SQL COPY FROM/TO için, sunucu işleminin sahibinin (varsayılan olarak postgres) okuma/yazma iznine sahip olduğu herhangi bir yolu kullanabilirsiniz.

Not: psql istemcisinin \copy meta komutu için geçerli yerel kullanıcının izinleri geçerlidir.

+0

Açıklama için teşekkür ederiz. – Jeiman

+0

Bir Windows makinede pgAdmin ile KOPYA komutunu kullanmayın ve yerel Windows ortamınızdan bir dosya okumayı deneyin. Bu başarısız olur. Yine de bir csv dosyasını içe aktarabilirsiniz. Bunu yapmak için GUI'yi kullanın. İstediğiniz tabloya sağ tıklayın ve içe aktarmayı seçin… – R13e

5

Evet, tabiki okuduklarınızın bulunduğu yeri belirleyebilirsiniz. Dosyanın yolunu değiştirirken sorun yok.

sadece pencerelerde bu şekilde ters eğik çizgi kaçış zorunda olduğu gerçeğine dikkat edin: Windows dosya yolu gösterim vs Linux tarafından karıştı gibi görünüyor

copy data_table from 'c:\\Temp\\outputdata.csv' WITH DELIMITER AS ',' CSV QUOTE AS '"';