3

Windows 7 の 32 ビット マシンで EnterpriseDB pgAdmin III (v. 1.12.1) を使用して、リモート Linux サーバー上の PostgreSQL データベースを操作しています。ユーザー postgres としてログインしているため、$PGDATA ディレクトリにアクセスできます (この例では、/var/lib/pgsql/data/ にあります)。

ターミナル経由でサーバーにログインし、psql を実行し、\copyコマンドを使用して csv ファイルから新しく作成されたテーブルにデータをインポートすると、問題は発生しません。

ただし、pgAdmin を使用している場合は、COPY コマンドを使用して、csv ファイルから新しく作成されたテーブルにデータをインポートします。

COPY table_name FROM '/var/lib/pgsql/data/file.csv' 
WITH DELIMITER AS ',' csv header

これでうまくいく場合もあれば、権限エラーが発生する場合もあります。

エラー: ファイル '/var/lib/pgsql/data/file.csv" を読み取り用に開くことができませんでした: アクセス許可が拒否されました SQL 状態: 42501

私を混乱させているのは、エラーの矛盾です。エラーが発生したら、ファイルのアクセス許可を 644 ~ 777 のいずれかに変更しますが、効果はありません。また、ファイルを他のフォルダー (var/tmp/ など) に移動しようとしましたが、これも効果がありません。

何か案は?

4

3 に答える 3

5

問題は、ディレクトリからファイルへのアクセス許可です。たとえば、Postgres ユーザーはホーム フォルダーにアクセスできません。答えは、/tmp のようにすべてのユーザーがアクセスできるフォルダーを使用するか、適切な権限を持つフォルダーを作成して、すべてのユーザーがそこにアクセス/読み取り/書き込みできるようにすることです。これは一種のユーザー共有フォルダーです。

于 2012-07-20T15:51:01.580 に答える
0

あなたのpostgresユーザーはまだあなたのファイルにアクセスできないと思います。

次のコマンドを試しましたか?

chown postgres /var/lib/pgsql/data/file.csv

chmod u + r /var/lib/pgsql/data/file.csv

于 2012-02-14T10:11:59.740 に答える
0
Try \COPY table_name FROM '/var/lib/pgsql/data/file.csv' 
WITH DELIMITER AS ',' csv header

コピーの前にバックスラッシュがあることに注意してください。バックスラッシュを付けて実行すると、ユーザー権限で実行されます。それ以外の場合は、最近のバージョンの pgのドキュメントでは廃止されているポストマスターとして実行されます:| とにかく、これはおそらくあなたのためにトリックを行うかもしれません.

于 2012-11-29T15:30:23.973 に答える