質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

1回答

12120閲覧

PostgreSQLのcopyコマンドと\copyの違いがよく分かりません

Carlos_is_only

総合スコア42

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2020/05/06 02:54

postgresのcopyコマンドと\copyの違いについてなのですが

copyコマンドがpostgreSQLサーバーが実行し、\copyコマンドがpsqlが実行の主体であることが分かったのですが

私はwindowsにpostgresをインストールしているのですが(EnterpriseDBを使用しました)

以下のcopyコマンドを実行したら以下のような表示が出ました。

失敗

実行コマンド:

copy employee to 'c:\test\test.csv' csv

エラー:

ファイル"c:\test\test.csv"を書き込み用にオープンできませんでした: No such file or directory HINT: COPY TOによってPostgreSQLサーバプロセスはファイルの書き込みを行います。psqlの \copy のようなクライアント側の仕組 みが必要かもしれません

そして一方で以下のコマンドをpgadmin4でsqlを実行したら
きちんとファイルを出力できました

成功

copy employee to 'C:\Program Files\PostgreSQL\11\test\test.csv' csv;

そこで質問です
①OSでのcsvの出力はpsqlでしかできず
postgreSQLについてはインストールされたファイルにしか書き込みを行えないということでしょうか?

②これはwindowsにインストールを行いましたがlinuxにおいてもpsqlとpostgreSQLは
実行する主体が異なる以外に出力可能なファイルがそれぞれ異なるという認識でよろしいでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

手元の、Windows 7 64-bitとPostgreSQL 9.6とで試してみました。

管理者権限での実行による、コマンド・プロンプトからpsqlコマンドを実行し、
その上で\copyメタコマンドを実行する分には、
書き出しに成功しました。

\copy テーブル名 to '\Users\なんたら\かんたら.csv' with csv header;

みたいな。
プログラム(コマンド)からのファイルシステムへのアクセスは
ユーザーアカウント制御(UAC)によって規制されているため、
単にSQL文としてCOPY文を実行しても

ERROR: 42501: could not open file "ファイル名" for writing: Permission denied

みたいなのが発生してにっちもさっちもいかないです。

他のOSに関しては疎いので、誰か補足情報をお願いします。
(結局、psqlコマンドから指定ディレクトリへのアクセス権があるかどうかって気がしますが。)

投稿2020/05/06 06:11

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Carlos_is_only

2020/05/06 10:44 編集

回答ありがとうございます 確かにアクセス権などの問題のように思えます program filesの中のPostgreSQLのファイルを右クリックで変更する権利を「Users」に与えたらできたのでしかしCドライブに作成した権限を強化していないようなファイルに対してSQLのCOPY文を実行しても書き込みができないんですよねprogram filesの中のPostgreSQLのファイルの中においてCOPY文は実行できてそうではないファイルには出力できないのはどういったことなのかがよくわからないんですよね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問