CSVファイルをネットワーク共有ドライブからpostgreSQLにコピーする際に問題が発生しました。現在の修正は、最初にファイルをローカルドライブにコピーすることですが、これはチェーン内の別のプロセスであり、乱雑になりすぎています。
次のコマンドを実行すると
COPY test_schema.test FROM 'X:\_Postgres DBs\Testing\test_file.csv'
CSV HEADER;
私は得ます:
ERROR: could not open file "X:\_Postgres DBs\Testing\test_file.csv"
for reading: No such file or directory
わかりました。postgreSQLServerは、Windowsにマップされたドライブを理解できませんが、実行すると:
COPY test_schema.test FROM '\\ws7.domain.com\share-name\_Postgres
DBs\Testing\test_file2.csv' CSV HEADER;
私は得ます:
ERROR: could not open file "\\ws7.domain.com\share-name\_Postgres
DBs\Testing\test_file2.csv" for reading: Permission denied
ファイルtest_file2.csvは、同じサーバー上でローカルに開くことができます。たとえば、notepad/notepad ++/wordpadを使用すると、「使用中のファイル」などのファイル属性がないように見えます。
誰でも共有ネットワークドライブでCOPYを使用する方法のヒントがありますか? (私たちのDB UIはDelphiでコーディングされているので、Delphiから呼び出すことができるpostgresqlスクリプトを使用する方法を探しています。それ以外の場合は、手間のかかるDelphi Firedacバッチコピーメソッドを記述する必要があります。)
COPY
はPostgreSQL serverとして実行されます。通常、WindowsではNETWORKSERVICE
として実行されます。これはローカルサービスアカウントです共有ドライブのユーザーアカウントのネットワークログイン認証情報にアクセスできません。
psql
コマンド\copy
を使用して、ユーザーIDで実行され、共有ドライブにアクセスできるクライアントアプリケーションからファイルを読み取り、クライアント/サーバーネットワーク接続を介してpostgresにストリーミングします。サーバ。
PgAdmin-IIIにも、psqlのCOPY ... FROM STDIN
と同様に\copy
を使用する同様のCSVインポートコマンドがあると思います。
Windows ADドメインを使用していて、PostgreSQLが共有に直接アクセスできるようにする必要がある場合は、代わりにドメインアカウントでPostgreSQLサーバーを実行できます。しかし、それは通常不要です。