私はそれらの中に何千もの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'フォルダにあります。
パスワードを入力する方法は4つあります。
もちろん、ユーザー名を含めないため、認証時に致命的なエラーが発生します。
これを試してみて、それは私には問題ありません:)
psql -U username -d myDataBase -a -f myInsertFile
データベースがリモートの場合は、Hostと同じコマンドを使用します。
psql -h Host -U username -d myDataBase -a -f myInsertFile
あなたはこのようにするべきです:
\i path_to_sql_file
見る:
export PGPASSWORD=<password>
psql -h <Host> -d <database> -U <user_name> -p <port> -a -w -f <file>.sql
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
その後、ユーザーのパスワードを入力するように求められます。
編集:@ zwackyによるコメントに基づいて更新
端末を介してデータベースにログオンし、これを試してください。
database-# >@pathof_mysqlfile.sql
または
database-#>-i pathof_mysqlfile.sql
または
database-#>-c pathof_mysqlfile.sql
Linuxシェルでpsqlにログインしている場合、コマンドは次のとおりです。
\i fileName.sql
絶対パスの場合
\ir filename.sql
psqlを呼び出した場所からの相対パス.
ユーザー名とパスワードの両方をコマンドライン自体に指定できます。
psql "dbname='urDbName' user='yourUserName' password='yourPasswd' Host='yourHost'" -f yourFileName.sql
あなたはこのようにそれをすることさえできます:
Sudo -u postgres psql -d myDataBase -a -f myInsertFile
あなたがmachineへのSudo
アクセスを持っていて、それがあなた自身のマシン上でのテストのためだけにプロダクションスクリプトに推奨されていないなら、それは最も簡単な方法です。
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)
コマンドプロンプトを開き、管理者として実行できます。それからタイプ
../bin>psql -f c:/...-h localhost -p 5432 -d databasename -U "postgres"
Password for user postgres:
が表示されます。
パスワードを入力してください。入力したパスワードが表示されませんでしたが、今回はEnterキーを押すとうまくいきました。実際にデータベースにデータをロードしていました。