web-dev-qa-db-ja.com

PGAdminからCSVファイルをインポートしようとすると、許可が拒否されました

PGAdmin 1.14.3を使用しています。

インポートコマンドを実行しようとすると:

COPY grad(country_code, postal_code, place_name, admin_name1, admin_code1, admin_name2, admin_code2, admin_name3, admin_code3, latitude, longitude, accuracy)
FROM 'C:\\Users\\denis\\Desktop\\BP2Project\\USA\\US.txt';

私は

エラー:読み取り用にファイル「C:\ Users\denis\Desktop\BP2Project\USA\US.txt」を開くことができませんでした:SQL状態の許可が拒否されました:42501

他の similar の質問を調べましたが、どれも私の問題を解決しませんでした。

スーパーユーザーであるユーザー「postgres」としてログインしました。許可が不足している理由がわかりません。 Windows 7を使用しています。

28
Tool

ユーザーPostgresには、コピー元のファイルに対する読み取りアクセス権が必要です。

この記事 を見て、Windowsでファイルのセキュリティアクセスを変更する方法を確認してください。

8
Houari

許可記事answerHouari および Flimzy で言及されているのは良い参考資料ですが、直接的な回答(私が使用したクイックフィックスは)です:

  • 許可が拒否されたデータファイルを含むフォルダーを右クリックして、Propertiesをクリックします。
  • [フォルダーのプロパティ]ウィンドウで、[セキュリティ]タブを選択します。
  • Editボタンをクリックします。
  • 開いた「フォルダのアクセス許可」ウィンドウで、追加...ボタンをクリックします。
  • 「選択するオブジェクト名を入力してください」テキストエリアボックスに「Everyone」と入力します。
  • [〜#〜] ok [〜#〜]をクリックすると、ウィンドウが閉じます。
  • デフォルトのRead&ExecuteパーミッションがAllowに設定されていることを確認する前のウィンドウのチェックボックスをオンにします。
  • [〜#〜] ok [〜#〜]をクリックすると、ウィンドウが閉じます。
  • [フォルダプロパティ]ウィンドウで[Apply]ボタンをクリックします。

これで、これらのファイルにアクセスする必要があるSQL COPYステートメントを実行できます。

  • 完了したら、フォルダのプロパティウィンドウに戻ります。
  • Editボタンをクリックします。
  • [グループまたはユーザー名:]フィールドでEveryoneエントリを選択します。
  • Removeボタンをクリックします。
  • 開いている残りのウィンドウで[〜#〜] ok [〜#〜]をクリックします。

これで、権限は元の状態に戻りました。

57
Kevin

OK、これはCOPYコマンドがどのように機能して、テーブルをCSVに段階的にエクスポートするかです。 Plsは、私がpgAdmin 111を使用していることに注意してください。

  1. テーブルをエクスポートするターゲットフォルダーを作成します。例:C:\ myExports
  2. 以下の手順に従って、このフォルダーに読み取り/書き込み許可を設定します。

許可が拒否されたデータファイルを含むフォルダーを右クリックし、[プロパティ]をクリックします。

[フォルダのプロパティ]ウィンドウで、[セキュリティ]タブを選択します。 [編集]ボタンをクリックします。

開いた[フォルダのアクセス許可]ウィンドウで、[追加...]ボタンをクリックします。 [選択するオブジェクト名を入力してください]テキストエリアボックスに「全員」と入力します。

[OK]をクリックすると、ウィンドウが閉じます。前のウィンドウの> checkチェックボックスを使用して、デフォルトの読み取りおよび実行権限が許可に設定されていることを確認します。 [OK]をクリックすると、ウィンドウが閉じます。

[フォルダプロパティ]ウィンドウの[適用]ボタンをクリックします。

  1. これは難しい部分です。myExportsフォルダー内に、希望する名前の空のCSVファイルを作成します。例:employee.csv

  2. 次に、次のようにコピーコマンドを実行します。

    従業員を「C:\ myExports\employee.csv」区切り文字「、」csvにコピーします。

employeeは、この例のテーブル名です。

お役に立てれば。

9

Everyoneにアクセス許可を与えたくない場合は、サービスを開始したアカウントにアクセス許可を追加できます。 [コントロールパネル]-[管理ツール]-[サービス]で、[ログオン]タブのアカウント名をコピーします。 (私のシステムでは、アカウントは「ネットワークサービス」と呼ばれます。)次に、上記の回答に示されているように、このユーザーとCSVファイルでフォルダーを共有します。

2
Jonas B

異なるスレッドでのこの問題への応答は、次のようになります1.「使用したコマンドを正確に教えてください」2.「適切な権限があることを確認してください」3.「/ copyを使用するだけ」

コピーしようとしているcvsファイルに対して、全員に許可を与えようとしましたが、それでも許可拒否エラーが表示されます。この機能は壊れており、Windowsの複数の連続したバージョンの複数の連続したリリースで壊れていると思います。

0
Alex

私と私はこれに長い時間を費やしました。 14.04 postgresql-9.5 pgAdmin3 postgis-2.2を実行しているHPボックスに常駐する中央データベースがあり、共有はtweeked Samba共有を通じて行われます。私のクライアントはウィンドウ10.1、7、8.1の混合を使用しており、1つのUbuntu 14.04デスクトップがあります。

私は大規模なテーブルでレコードを更新し、データを正規化し、コアのCOPY public.table_1 TO(Sambaで設定した共有フォルダー https://www.youtube.com/watch?v=ndAYZ0DJ-U4 ) '/srv/samba/share/[filename].csv'

次に、テーブルが '/srv/samba/share/test.csv'のCOPY table_1で修正されたら、データベースを更新できますUSING DELIMITERS '、' WITH NULL AS '' CSV HEADER;私のクライアントのいずれかから。

私が決定できた限りでは、更新を行うクライアントはスーパーユーザーである必要があります。また、Postgresql、Samba、UNIX、およびWINSすべてのユーザーが同じサーバー名で各サーバーに登録されており、パスワードの均一性が主な要因です。

私は長い間物事を動かしてさまざまな命名規則を試しましたが、最終的には http://www.postgresql.org/message-id/[email protected]gov.auでした それは大きなスイッチをクリックするように私を整理しました。あなたの株式とグループ管理のchown 777は重要な学習曲線でしたが、私がこれに費やした時間は後の報酬を得るでしょう... Ubuntuは人生を愛し、オープンソースの精神を愛しているが、それはまさに睡眠不足を引き起こすかもしれない... IT WORKS

0
Terry

この問題を解決するには、CSVファイルに許可を与える必要があります。これは、COPYコマンドに存在するCSVファイルは、クライアントアプリケーションではなくサーバーによって直接読み取られるためです。したがって、このファイルにサーバーからアクセスできるようにするには、Postgresqlユーザーがそのファイルを読み書きできるように、完全な読み取り/書き込み権限を付与する必要があります。

参照: 記事 手順ごとの手順を示します。

0
Diwas Poudel