405

壊滅的な事態が発生する前に、毎晩データベースをバックアップするためのcronジョブを作成しようとしています。このコマンドは私のニーズを満たすはずです:

0 3 * * * pg_dump dbname | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz

それを実行した後を除いて、それは私がパスワードを入力することを期待しています。cronから実行した場合、それはできません。どうすれば自動的に渡すことができますか?

4

17 に答える 17

407

.pgpass実行するアカウントのホーム ディレクトリにファイルを作成しますpg_dump

形式は次のとおりです。

hostname:port:database:username:password

次に、ファイルのモードを に設定します0600。それ以外の場合は無視されます。

chmod 600 ~/.pgpass

詳細については、Postgresql のドキュメントlibpq-pgpassを参照してください。

于 2010-05-23T23:39:55.853 に答える
281

または、スクリプトを実行するように crontab を設定することもできます。そのスクリプト内で、次のように環境変数を設定できます。 export PGPASSWORD="$put_here_the_password"

このようにして、パスワードを必要とする複数のコマンドがある場合、それらすべてをスクリプトに入れることができます。パスワードが変更された場合、変更する必要があるのは 1 か所 (スクリプト) だけです。

そして、ジョシュアに同意します。使用pg_dump -Fcすると、最も柔軟なエクスポート形式が生成され、すでに圧縮されています。詳細については、pg_dump のドキュメントを参照してください。

例えば

# dump the database in custom-format archive
pg_dump -Fc mydb > db.dump

# restore the database
pg_restore -d newdb db.dump
于 2011-11-14T14:39:39.120 に答える
231

1 つのコマンドで実行する場合は、次のようにします。

PGPASSWORD="mypass" pg_dump mydb > mydb.dump
于 2014-06-11T09:13:09.747 に答える
23

以下を使用して、パスワードを pg_dump に直接渡すことができます。

pg_dump "host=localhost port=5432 dbname=mydb user=myuser password=mypass" > mydb_export.sql
于 2020-06-16T21:19:44.383 に答える
5

間違っていたら訂正してください。ただし、システム ユーザーがデータベース ユーザーと同じ場合、PostgreSQL はパスワードを要求しません。認証はシステムに依存します。これは設定の問題かもしれません。

したがって、データベース所有者postgresにデータベースを毎晩バックアップしてもらいたい場合、そのための crontab を作成できますcrontab -e -u postgres。もちろん、postgrescron ジョブの実行を許可する必要があります。したがって、 にリストされている/etc/cron.allowか、/etc/cron.deny空である必要があります。

于 2013-09-17T17:26:04.900 に答える
1

パスワードを渡す安全な方法は、パスワードを.pgpassファイルに保存することです

ファイルの内容は.pgpass次の形式になります。

db_host:db_port:db_name:db_user:db_pass

#Eg
localhost:5432:db1:admin:tiger
localhost:5432:db2:admin:tiger

次に、このファイルを権限を持つユーザーのホーム ディレクトリに保存します。u=rw (0600) or less

ユーザーのホームディレクトリを見つけるには、次を使用します echo $HOME

ファイルのアクセス許可を制限する chmod 0600 /home/ubuntu/.pgpass

于 2020-09-26T09:33:48.540 に答える
-1

パスワードを渡す別の (おそらく安全ではない) 方法は、入力リダイレクトを使用することです。

pg_dump [params] < [path to file containing password]

于 2013-05-14T09:29:21.563 に答える