エラーメッセージが表示されます...
could not change directory to "/home/corey/scripts": Permission denied
...次のスクリプトを実行すると...
#!/bin/bash
sudo -u postgres psql < setup_dev_db.sql
read -rsp $'Press any key to continue...\n' -n 1 key
... setup_dev_db.sqlの内容は問題なく実行されますが、エラーが発生したため面倒です。
私はそれを削除できますか?
ベストアンサー1
Postgresは、クライアントからのすべてのクエリとコマンドが保存される$HOME/.psql_history
ファイルを生成しようとします。psql
何か別の作業をしたいのかもしれませんが$HOME
、他の隠されたファイルの形ではそのような証拠も見えません。対話的に使用しないと、実際には履歴ファイルは生成されませんが、実際にはpsql
そうではありません。
私は同じ問題があり、これを見つけましたが、許可された答えは私に受け入れられませんでした。スクリプトで実行されているディレクトリにクエリ追跡を残すためにpostgres権限を与えてはいけません!
@Corey、あなたのコメントで言及した解決策(cd /tmp
電話する前sudo...
)はおそらく最高です。psql
このファイルは作成されていません/tmp
(権限のないユーザーがファイルを読み取ることができるため、意図的なものであると確信しています)。
私が考えることができる2つの異なるソリューションがあります。
コマンドに追加して
psql
ログインシェルで実行-i
sudo -i -u postgres psql < setup_dev_db.sql
これにより、リストされたディレクトリに
$HOME
設定されます。 Ubuntuの場合はこれです。ただし、コマンドを入力するため、ファイルは生成されません。ただし、Interactiveを使用している場合は、コンピュータ権限を持つ他の人は誰でもpostgres
HOME
/etc/passwd
/var/lib/postgres
.psql_history
psql
sudo
〜するコマンド履歴にアクセスできます。この状況でログインシェルを実行すると、他の否定的な結果があるかどうかはわかりません。
psql
権限の低いユーザーとして実行します。$ psql dev_db -hlocalhost corey_dev -W < setup_dev_db.sql
setup_dev_db.sql
Postgresユーザーの作成をスクリプトに任せ、まだユーザーがいないために問題が発生した場合は、createuser
まず次のようにスクリプトにコマンドを追加するだけです。$ sudo -u postgres createuser corey_dev -P
おそらく...
$ sudo -u postgres createdb dev_db "Dev database"
注:psql
クライアントをインタラクティブに使用する場合could not change directory to "/home/corey/scripts": Permission denied
(ここではあなたではありません)、message****のようなメッセージが表示されたら、psql
はい/var/lib/postgres/.psql_history
(またはどこにいても)手紙を書くでしょう$HOME
!インタラクティブを使用しているときにこの警告を表示した場合は、psql
詳しく確認してください。隠し履歴ファイルを見つけることができます。