639

何千もの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」フォルダーにあります。

4

15 に答える 15

593

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

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

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

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

psql -h host -U username -d myDataBase -a -f myInsertFile
于 2012-08-23T05:57:23.673 に答える
180

パスワードを指定するには、次の 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
于 2012-03-16T11:13:10.373 に答える
30

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

database-# >@pathof_mysqlfile.sql

また

database-#>-i pathof_mysqlfile.sql

また

database-#>-c pathof_mysqlfile.sql
于 2012-11-26T08:11:00.963 に答える
16

このようにすることもできます:

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

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

于 2017-07-28T21:43:09.363 に答える
11

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)
于 2012-10-16T15:04:30.097 に答える
9

2021 ソリューション

PostgreSQL データベースがシステム上にローカルにある場合。

psql dbname < sqldump.sql username

オンラインでホストされている場合

psql -h hostname dbname < sqldump.sql username

疑問や質問がある場合は、コメントで質問してください。

于 2021-01-09T04:29:55.490 に答える
4

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

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

Password for user postgres:現れます。

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

于 2013-03-08T18:04:09.890 に答える
1

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

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

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

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

于 2020-04-12T08:34:01.807 に答える