
(Linux、データベース初心者)スクリプトを実行するとPermission deniedが発生します。
Postgresql psqlに関して
よろしくお願いします。
UbuntuサーバにインストールしたPostgresqlに対し、スクリプトを実行してcsvファイルをインポートしようと考えています。
その際にPermission deniedが発生しテーブルにデータが入りません。
以下にスクリプトファイルとエラーメッセージを掲載します。
<test.sh>
#!/bin/bash
#接続文字列
export PGHOST="ホスト名”
export PGPORT="ポート番号"
export PGDATABASE="データベース名"
export PGUSER="ユーザー名"
export PGPASSWORD="パスワード"
PSQL='COPY bat_test FROM ' '''/test/test.csv''' ' with DELIMITER ' ''','''
echo "$PSQL" | psql
echo "commit" | psql
<以上、test.sh>
<エラーメッセージ>
test.sh:/test/test.csv:Permission denide
<以上、エラーメッセージ>
インポートしたいファイルの権限等は確認しましたがわかりませんでした。
何が悪いのかご指摘いただければ助かります。
どうか、よろしくお願いします。
No.1ベストアンサー
- 回答日時:
bash等のB sh系では
変数名=値 コマンド....
とすると、変数に値を(一時的に)設定してコマンドを実行します。
> PSQL='COPY bat_test FROM ' '''/test/test.csv''' ' with DELIMITER ' ''','''
この文ですが、環境変数
PSQL='COPY bat_test FROM '
をセットした状態で
'''/test/test.csv''' ' with DELIMITER ' ''','''
を実行する、という意味になります。
'は 2つずつペアになるので
''が空文字列
'/test/test.csv'が/test/test.csv
''が空文字列
となり、 /test/test.csv がコマンドとして実行されます。
が、実際には実行属性が無いので permission denided になります。
(実行属性があったとしても、test.csvが実行できるとは思いませんが)
この行全体をPSQL変数に設定したいのなら
PSQL="'COPY bat_test FROM ' '''/test/test.csv''' ' with DELIMITER ' ''','''"
と、全体をダブルクォートでくくるとか
PSQL='COPY bat_test FROM '\ '''/test/test.csv'''\ ' with DELIMITER '\ ''','''
と、スペースを\でエスケープて、単語の区切りとしての意味を無効にします。
ところで、'''を、 'の中に'を入れる目的で使ってませんか?
VisualBasic等はそういう書き方をしますが、bashではその意味では使えません。
'のなかに'は書けないので、全体をダブルクォートでくくる
PSQL="COPY bat_test FROM '/test/test.csv' with DELIMITER ','"
とか、シングルクォートの前でいったんシングルクォートを閉じて、"'"か\'でシングルクォートを単独で使い、再びシングルクォートを始める
PSQL='COPY bat_test FROM '\''/test/test.csv'\'' with DELIMITER '\'','\'
とかします。
#等幅フォントで見ないとわかりずらいものになってしまいました。
間違いの指摘だけでなく、
私が誤解していた部分まで教えていただきありがとうございました。
大変判りやすく、すごく助かりました。
もっと作法を勉強しなくては…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux linuxサーバーのキャッシュをクリアするコマンドを実行したい。 5 2023/01/24 14:52
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- PostgreSQL postgreSQLをbashで実行する際に「MORE」表示をなくす方法 1 2023/05/08 21:42
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- Excel(エクセル) VBA ワークシート指定の1行目を選択をしたい 2 2022/08/20 18:10
- Windows 10 ネットワークプリンターにファイルを直接送る方法・コマンドないですか?(´・ω・`) 3 2023/03/13 23:15
- ドライブ・ストレージ HDDのチェック方法 6 2022/05/04 09:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
timestamp が空のデータを除い...
-
ACCESS テキストボックスに入...
-
テキストボックスの背景をVB...
-
SQL SERVERの BULK INSERT
-
エクセルVBA 10分後にエクセル...
-
【SQL】他テーブルに含まれる値...
-
フラグをたてるってどういうこ...
-
sqlに記述できない文字
-
フォームから入力してテーブル...
-
既にテーブルが存在する場合の...
-
pandasでsqlite3にテーブル作成...
-
OracleとSQL ServerのSQL文上で...
-
SELECT INTOで一度に複数の変数...
-
必要なテーブルの個数について。
-
AccessとSQL Serverの連携について
-
ACCESS クエリーでソートの不具合
-
テーブルの列名を変更したい
-
結合したテーブルをSUMしたい
-
ACCESS2000でのテー...
-
SQL 外部結合について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CSVファイルを読み込んでテーブ...
-
SQLSERVER 連番更新について
-
timestamp が空のデータを除い...
-
テキストボックスの背景をVB...
-
ACCESS テキストボックスに入...
-
SELECT文で足し算をした場合、N...
-
エクセルVBA 10分後にエクセル...
-
エクセルVBEについて
-
date型でのbetweenについて教え...
-
Accessエクスポート時に連番を...
-
1つのドメインを複数のDNSで管...
-
配列データに対する、要素の追...
-
【Access】SQL文教えてください!
-
データがリストアできない!!
-
型について
-
Access VBA Excelbookを開く際...
-
PostgreSQLのnumericでの書き込...
-
エクセル vba 色分け
-
Japanese schools
-
バッチファイルでrenを使用時、...
おすすめ情報