38

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

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

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

4

9 に答える 9

80

HouariFlimzyによる回答で言及されているアクセス許可の記事 は良い参考資料ですが、直接的な回答 (私が使用した簡単な修正) は次のとおりです。

  • アクセス許可が拒否されたデータ ファイルを含むフォルダを右クリックし、[プロパティ] をクリックします。
  • フォルダの [プロパティ] ウィンドウで、[セキュリティ] タブを選択します。
  • [編集] ボタンをクリックします。
  • 開いた「フォルダーのアクセス許可」ウィンドウで、「追加...」ボタンをクリックします。
  • [Everyone選択するオブジェクト名を入力してください] テキスト領域ボックスに入力します。
  • [ OK]をクリックすると、ウィンドウが閉じます。
  • 前のウィンドウのチェック ボックスをオンにして、既定の読み取りと実行のアクセス許可が[許可]に設定されていることを確認します。
  • [ OK]をクリックすると、ウィンドウが閉じます。
  • [フォルダーのプロパティ] ウィンドウで[適用] ボタンをクリックします。

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

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

パーミッションは元の状態に戻りました。

于 2014-03-18T17:13:57.053 に答える
13

ユーザーPostgresは、コピー元のファイルに対する読み取りアクセス権を持っている必要があります。

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

于 2012-12-29T16:16:44.860 に答える
10

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

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

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

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

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

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

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

  1. これはトリッキーな部分です。myExports フォルダー内に、目的の名前で空の CSV ファイルを作成します。例: employee.csv

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

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

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

お役に立てれば。

于 2015-12-17T13:50:10.657 に答える
5

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

于 2015-07-10T08:08:50.487 に答える
0

私にとっては、これに長い時間を費やしました。14.04 postgresql-9.5 pgAdmin3 postgis-2.2 を実行している HP ボックスに中央のデータベースがあり、共有は微調整された Samba 共有を介して作成されます。クライアントは Windows 10.1、7、8.1 を組み合わせて使用​​しており、ubuntu 14.04 デスクトップが 1 つあります。

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

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

私が判断できる限りの重要な点は、更新を行うクライアントはスーパーユーザーでなければならず、ここでは4つのサーバーが連携して動作しているため、すべてがユーザーの観点から結びついている必要があるということです Postgresql、Samba、UNIX、およびWINS すべてのユーザー同じユーザー名とパスワードを使用して各サーバーに登録されていることが主な要因です。

私は長い間物事を動かしたり、さまざまな命名規則を試したりしてきましたが、最終的にを整理したのはそれは大きなスイッチがカチッと入ったようなものでした。共有とグループ管理の chown 777 は重要な学習曲線でしたが、これに費やした時間は将来的に報われるでしょう... Ubuntu を愛し、人生を愛し、精神を愛するオープンソースの

于 2016-04-30T19:17:22.593 に答える
0

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

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

于 2013-09-19T19:35:33.533 に答える
0

psql 14 のファイルから SQL コマンドを実行しようとしていました。これが実行方法です。

「postgres」ユーザーが自分のユーザーと異なるため、アクセスが拒否されました。
アクセスする最も簡単な方法は、アクセスしようとしているファイルを Windows の場合は C:\Users\Public、Linux ディストリビューションの場合は \tmp フォルダーに保存することです。これらのフォルダは、すべてのユーザーがアクセスできます。

この回答の元のソースから読む

于 2022-02-25T14:22:54.937 に答える