コマンドライン引数を使用してPostgreSQL .sqlファイルを実行する


540

何千ものINSERTステートメントを含むいくつかの.sqlファイルがあり、それらをテーブルに追加するためにPostgreSQLデータベースでこれらの挿入を実行する必要があります。ファイルは非常に大きいため、それらを開いてINSERTステートメントをエディターウィンドウにコピーし、そこで実行することは不可能です。私はインターネット上で、PostgreSQLインストールのbinフォルダーに移動して以下を使用できることを発見しました。

psql -d myDataBase -a -f myInsertFile

私の場合:

psql -d HIGHWAYS -a -f CLUSTER_1000M.sql

次に、ユーザーのパスワードを要求されますが、何も入力できず、Enterキーを押すと、次のエラーが発生します。

psql:致命的:ユーザー「myUsername」のパスワード認証に失敗しました

なぜパスワードを入力させないのですか?これらのスクリプトを実行できることが重要なので、これを回避する方法はありますか?

この問題を回避するには、次の構造でpg_hba.confファイルに新しいエントリを追加します。

# IPv6 local connections:
host    myDbName    myUserName ::1/128    trust

pg_hba.confファイルは通常、PostgreSQLインストールの「data」フォルダにあります。


6
すでに回答はありますが、念のため...「何も入力できない」という場合は、パスワードを入力しても何も表示されないということをお話しでしょうか。これは、通常、パスワードを入力してEnterキーを押す、このケースでは普通のことだはずです ...仕事
エヴリーヌLachanceさん

ITISのコピー(itis.gov)のインストールで、同様の問題が発生しました。データベースが存在しなかったため、その名前を使用できませんでした。PostgreSQLの動作方法が原因で、私はこれを行うことができました:psql --port = 5554 --username = root --file = ITIS.sql template1
Cyber​​knight

回答:


157

パスワードを提供するには、4つの選択肢があります。

  1. PGPASSWORD環境変数を設定します。詳細については、マニュアルを参照してください:http :
    //www.postgresql.org/docs/current/static/libpq-envars.html
  2. .pgpassファイルを使用してパスワードを保存します。詳細については、マニュアルを参照してください:http :
    //www.postgresql.org/docs/current/static/libpq-pgpass.html
  3. 特定のユーザーに「信頼認証」を使用します:http : //www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
  4. PostgreSQL 9.1以降、接続文字列を使用することもできますhttps :
    //www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING

こんにちは。設定を信頼するように設定しましたが、ソフトウェアがログインにWindowsのユーザー名を使用しようとしていることに気付きました。Postgresqlデータベースで設定したロールを使用したい。コマンドを実行するためにどのロールを使用するかを伝える方法はありますか?
CS

2
@CSharpened:-uマニュアルに記載されているパラメータを使用
a_horse_with_no_name

#2は非常に単純です。host:port:db:user:passを含む1行をファイルに追加するだけで完了です。よくやった。
Kriil

494

もちろん、ユーザー名が含まれていないため、認証時に致命的なエラーが発生します...

これを試してください、私にとっては問題ありません:)

psql -U username -d myDataBase -a -f myInsertFile

データベースがリモートの場合は、同じコマンドをホストで使用します

psql -h host -U username -d myDataBase -a -f myInsertFile

4
指定するユーザー名は、有効なpostgresロールである必要があることに注意してください。デフォルトは、現在ログインしているユーザーです。
matthias krull

8
なぜ-aparam?
AlikElzin-kilaka

5
@ AlikElzin-kilaka -aはここでは必要ありません。「空でないすべての入力行が読み取られたときに標準出力に出力する」
mjspier

これは受け入れられるべき答えです。
コスタノス

316

あなたはこのようにする必要があります:

\i path_to_sql_file

見る:

ここに画像の説明を入力してください


2
私は得るPermission denied
Zac

4
chmod 777 myfileエラー発生後のPermission denied修正
Ulug'bek Ro'zimboyev

5
@Zac Windowsマシンで許可が拒否された場合、間違ったスラッシュを使用している可能性があります。
pgsandstrom

2
Windowsでこのエラーが発生し、@ pgsandstromが述べたように、それはスラッシュであることが判明しました。間違ったスラッシュ=代わりにスラッシュを使用し、パスに引用符を付けないでください。\ ic:/dev/script.sql
Dave、

50

PostgreSQLサーバーが別の場所にある場合、これを使用して* .sqlファイルを実行します。

psql -h localhost -d userstoreis -U admin -p 5432 -a -q -f /home/jobs/Desktop/resources/postgresql.sql

-h PostgreSQL server IP address
-d database name
-U user name
-p port which PostgreSQL server is listening on
-f path to SQL script
-a all echo
-q quiet

次に、ユーザーのパスワードを入力するように求められます。

編集:@zwackyから提供されたコメントに基づいて更新


5
@ ChickenWing24 -a:all echo、-q:quiet、-f:file
zwacky

これは私の問題を解決しました。すばらしい
Temi 'Topsy' Bello

45
export PGPASSWORD=<password>
psql -h <host> -d <database> -U <user_name> -p <port> -a -w -f <file>.sql

1
出力せずにそれを行うにはどうすればよいですか
Lu32

2
psql -h <ホスト> -d <データベース> -U <ユーザー名> -p <ポート> -a -q -w -f <ファイル> .sql
vishu9219

3
@ Lu32 -aフラグを省略することもできます(つまり、「空でないすべての入力行が読み取られたときに標準出力に出力します」)。EDITは、-aなしでテストされました。したがって、vishu9219が言ったように、-qフラグは正しいです。
Rauni Lillemets 2016

41

Linuxシェルでpsqlにログインしている場合、コマンドは次のとおりです。

\i fileName.sql

絶対パスと

\ir filename.sql

psqlを呼び出した場所からの相対パス。


@Florianが言うように、ログインするとファイルを実行できます。2つの方法のいずれかとして、SQLのコメント行をマークすることを忘れないでください...--コメントを行末までa)-1行コメントOR b)/ *複数行コメント* /
Sumit S

26

ターミナルを介してデータベースにログオンし、これを試してください:

database-# >@pathof_mysqlfile.sql

または

database-#>-i pathof_mysqlfile.sql

または

database-#>-c pathof_mysqlfile.sql

私にとって、この解決策はよりしっかりしています。answeとしてマークされたものではありません
AlexG 2014

17

コマンドライン自体でユーザー名とパスワードの両方を指定できます。

   psql "dbname='urDbName' user='yourUserName' password='yourPasswd' host='yourHost'" -f yourFileName.sql

これは、環境変数を設定したくない場合や、奇妙なパスファイルを使用したくない場合に機能します。=)
2017年

これは受け入れられるべき答え
でした。

13

あなたはこの方法でそれをすることさえできました:

sudo -u postgres psql -d myDataBase -a -f myInsertFile

sudoマシンへのアクセス権があり、自分のマシンでのテストのためだけに本番スクリプトに推奨されない場合は、これが最も簡単な方法です。


9

LinuxのPostgreSQLのコマンドラインでSQLを実行する方法について説明します。

ターミナルを開き、psql次のコマンドを実行できることを確認してください:

psql --version
which psql

鉱山の場所にある、バージョン9.1.6です/bin/psql

というプレーンテキストファイルを作成します mysqlfile.sql

そのファイルを編集し、そこに1行挿入します。

select * from mytable;

コマンドラインで次のコマンドを実行します(ユーザー名とデータベースの名前をpgadminとkurz_prodに置き換えます)。

psql -U pgadmin -d kurz_prod -a -f mysqlfile.sql

以下は、ターミナルに表示される結果です(パスワードの入力は求められません)。

select * from mytable;

test1
--------
hi
me too

(2 rows)

ユーザーをどのように設定しますか?新しい.sqlファイルに-fをインストールして実行するのは初めてです。常に間違ったパスワードを言う
mKane

4

コマンドプロンプトを開いて、管理者として実行できます。次に入力します

../bin>psql -f c:/...-h localhost -p 5432 -d databasename -U "postgres"

Password for user postgres: 表示されます。

パスワードを入力して入力します。入力しているパスワードがわかりませんでしたが、今回はEnterキーを押したときに機能しました。実際、データベースにデータをロードしていました。


私はあなたが意味すると思います-d "postgres"
amphetamachine '22

@amphetamachine -d 、データベース名、チェックpsql --help
Yaz

1

私はそれを書いた(私のスクリプトがあるディレクトリにあります)

::someguy@host::$sudo -u user psql -d my_database -a -f file.sql 

ここで-u user 、スクリプトを実行するデータベースを所有するロールです。その後psqlpsqlコンソールがコンソールに接続し-d my_databaseます。mydatabase最後-a -f file.sql-a、スクリプトからすべての入力をエコーし、into -fからコマンドを実行しfile.sqlmydatabase終了します。

私が使用しています:(Ubuntu 10.12-0ubuntu0.18.04.1)上のpsql(PostgreSQL)10.12

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.