5

アプリのインストール中に、PostgreSQLデータベースといくつかのテーブルと関数を作成したいと思います。

そのために、PostgreSQLに付属しているPSQL.EXEを使用します。2つのスクリプトがあります。1つ目は、データベースと、そのデータベースでスクリプトを実行する権限を持つ対応するユーザーを作成します。この作成したばかりのユーザーとして、2番目のスクリプトを実行したいと思います。残念ながら、そのユーザーのパスワードをコマンドライン引数として渡す方法が見つかりません。パスワードを省略すると、実行が停止し、ユーザーにパスワードの入力を求めるプロンプトが表示されます。これは、アプリのインストール中に実行されるため、避けたいと思います。

パスワードを引数として渡す方法はありますか、それとも他に使用できるコマンドラインツールはありますか?

環境をもう少し詳しく説明します。「MSI-Builder」としてWiX3.5セットアップを使用しています。

4

4 に答える 4

6

dbenhurが回答したようにpgpassファイルを使用するか、psqlを呼び出す前に環境変数PGPASSWORDを設定することができます。

SET PGPASSWORD=my_very_secret_password
psql somedb someuser

サポートされているすべての環境変数は、マニュアルに記載されています:http ://www.postgresql.org/docs/current/static/libpq-envars.html

于 2012-06-14T19:47:13.127 に答える
5

cmdline argを介してパスワードを提供することはできません(そして、それは不十分なセキュリティ慣行であるため、提供したくありません)。

自動スクリプト認証をサポートするために.pgpassファイルを提供できます。これがドキュメントです。

于 2012-06-14T18:58:18.563 に答える
2

さらに良いことに、dbロールを作成するためのアクセス権がある場合は、パスワードを使用して慎重にログインしなくても、必要なすべてのアクセス権をすでに持っています。2番目のスクリプトを最初のスクリプトと同じユーザーで動作させますが、ユーザーを切り替えるために次の行を含めます。

set role my_new_user;

実行する役割の名前はどこmy_new_userにありますか。

ログインが異なるためにスクリプトを分割しただけの場合は、これを使用して、スクリプトを同じファイルに入れ、途中で役割を切り替えることができます。


注: スーパーユーザーとしてDBと新しい役割を作成していないという偶然の機会に、これはもう少し複雑になる可能性があります。この場合、次のコマンドで新しい役割を作成する必要があります。

create role my_new_role ... ADMIN my_role;

my_new_role作成している役割とmy_role現在のユーザーはどこにありますか。次に、単純に終了したら、次のようにします。

revoke my_new_role from my_role;
于 2012-06-14T19:43:20.823 に答える
2

完了には、URI(ドキュメントリンク)を使用することもできます

DBSを一覧表示

psql "postgresql://username:password@localhost/postgres" -l

また、このコマンドを名前のみを持つように作成しました(より良い方法を知っている場合は教えてください):

psql "postgresql://username:password@localhost/postgres" -l | awk -F '|' '{print $1}'| sed -e '/^\s*$/ d' -e '1,3d'|sed '$d'|awk '{print $1}'

UNIXソケットを使用して接続することもできます。

# ss -x -a |grep postgres|awk '{print $5}'
/var/run/postgresql/.s.PGSQL.5432

ソケットの親ディレクトリが使用されることに注意してください。

# sudo -u postgres psql -d "postgresql:///postgres?host=/var/run/postgresql/" -l

あなたがあなたの中にこの行を持っている場合にのみこれを行うことができますpg_hba.conf

local   all     postgres                ident

「ident」は、authentにunixユーザーを使用します

dbをダンプします

ここで別のポート番号を追加しました

pg_dump -Fc "postgresql://username:password@localhost:9001/${db}" > "backup_${db}.pgdump"

dumpallでは、スーパーユーザーまたはロール(with CREATE ROLE ... SUPERUSER)が必要です。また、すべてのDBにアクセスできる必要があります。デフォルトでpostgresはできます。

しかし、私の場合、彼のパスワードが開発者によって削除されたため、postgresでpg_dumpallを使用できませんでした。

だから私は使用しました:

 sudo -u postgres pg_dumpall -d "postgresql:///?host=/var/run/postgresql/" > all.dump

テスト済みバージョン

# cat /opt/postgresql/PG_VERSION
9.6

hth

于 2018-10-26T09:30:02.950 に答える