web-dev-qa-db-ja.com

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

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

psql -d myDataBase -a -f myInsertFile

私の場合:

psql -d HIGHWAYS -a -f CLUSTER_1000M.sql

それから私は私のユーザのためのパスワードを頼まれます、しかし私は何も入力することができませんそして私がenterを押すとき私はこのエラーを得ます:

psql:FATAL:ユーザー "myUsername"のパスワード認証に失敗しました

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

この問題を回避するために、pg_hba.confファイルに次のような新しいエントリを追加しました。

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

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

420
CSharpened

パスワードを入力する方法は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
123

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

これを試してみて、それは私には問題ありません:)

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

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

psql -h Host -U username -d myDataBase -a -f myInsertFile
394
pmverma

あなたはこのようにするべきです:

\i path_to_sql_file

見る:

Enter image description here

237
Rachid Oussanaa
export PGPASSWORD=<password>
psql -h <Host> -d <database> -U <user_name> -p <port> -a -w -f <file>.sql
36
vishu9219

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 
-f file

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

編集:@ zw​​ackyによるコメントに基づいて更新

28
GPrathap

端末を介してデータベースにログオンし、これを試してください。

database-# >@pathof_mysqlfile.sql

または

database-#>-i pathof_mysqlfile.sql

または

database-#>-c pathof_mysqlfile.sql
24
Satish Sharma

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

\i fileName.sql

絶対パスの場合

\ir filename.sql

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

24
Florian

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

   psql "dbname='urDbName' user='yourUserName' password='yourPasswd' Host='yourHost'" -f yourFileName.sql
12
Deepu Sahni

あなたはこのようにそれをすることさえできます:

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

あなたがmachineへのSudoアクセスを持っていて、それがあなた自身のマシン上でのテストのためだけにプロダクションスクリプトに推奨されていないなら、それは最も簡単な方法です。

9
MDK

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

端末を開き、psqlコマンドを実行できることを確認してください。

psql --version
which psql

Mineは/bin/psqlにあるバージョン9.1.6です。

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

そのファイルを編集し、そこに単一行を入れます。

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)
7
Eric Leschinski

コマンドプロンプトを開き、管理者として実行できます。それからタイプ

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

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

パスワードを入力してください。入力したパスワードが表示されませんでしたが、今回はEnterキーを押すとうまくいきました。実際にデータベースにデータをロードしていました。

4
abeginner