SQLダンプをPostgreSQLデータベースにインポートする


451

私たちはホストを切り替えており、古いものは私たちのサイトのPostgreSQLデータベースのSQLダンプを提供していました。

これをテストするために、ローカルWAMPサーバーに設定しようとしています。

唯一の問題は、設定したPostgreSQL 9にこのデータベースをインポートする方法がわからないことです。

pgAdmin IIIを試しましたが、「インポート」機能が見つかりません。SQLエディターを開き、そこにダンプの内容を貼り付けて実行すると、テーブルが作成されますが、データをそこに入れようとするとエラーが発生し続けます。

ERROR:  syntax error at or near "t"
LINE 474: t 2011-05-24 16:45:01.768633 2011-05-24 16:45:01.768633 view...

The lines:
COPY tb_abilities (active, creation, modtime, id, lang, title, description) FROM stdin;
t   2011-05-24 16:45:01.768633  2011-05-24 16:45:01.768633  view    nl ...  

コマンドプロンプトでもこれを実行しようとしましたが、必要なコマンドが見つかりません。

私が行った場合

psql mydatabase < C:/database/db-backup.sql;

エラーが出る

ERROR:  syntax error at or near "psql"
LINE 1: psql mydatabase < C:/database/db-backu...
        ^

データベースをインポートする最良の方法は何ですか?


最初のエラーと同様のエラーが発生しました:ERROR: syntax error at or near "t"。部分的なスキーマのみをインポートしたためCREATE TABLE、スクリプトの前半のステートメントが失敗したことがわかりました。インポートの完全な出力を調べて、それを見つけます。
owensmartin

回答:


732
psql databasename < data_base_dump

それはあなたが探しているコマンドです。

注意:databasenameインポートする前に作成する必要があります。見ていPostgreSQLのドキュメント第23章バックアップと復元


1
そのpsql mydatabase <C:\ database \ db-backup.sqlを試しましたが、「無効なコマンド\ database」というエラーが表示されます。周りも「」で試しました。
ダズ

23
@Dazzこのコマンドは、postgresプロンプトからではなく、コマンドプロンプト([スタート]-> [実行]-> [cmd])から実行する必要があります。
ジェイコブ

2
それをcmdから実行すると、「 '<'演算子は将来の使用のために予約されています。」
ダズ

3
@Dazz:-fスイッチ(または--file)も使用できます
Grzegorz Szpetkowski '27 / 07/27

47
psql --username = postgres databasename <data_base_dump.sql
Maxence

356

ここにあなたが探しているコマンドがあります。

psql -h hostname -d databasename -U username -f file.sql

29
良いですが、 "-L logfile.log"パラメータも追加して、出力をファイルに記録します。
zerologiko 2014

2
「入力はPostgreSQLカスタム形式のダンプです。pg_restoreコマンドラインクライアントを使用して、このダンプをデータベースに復元してください。」
ワイダンアリ2018

3
次のこともできます。pg_restore -h hostname -d dbname -U username filename.sql
FábioAraújo19年

114

私はあなたがpsqlで実行したいと思っています:

\i C:/database/db-backup.sql

Emacsのeshellは入力のリダイレクトをサポートしていないため、これを使用する必要がありました。ありがとう。
duma

3
最初に\ c <database_name>を使用してデータベースに変更してください
hkong


49

これがOPの状況で機能するかどうかはわかりませんが、インタラクティブコンソールで次のコマンドを実行するのが最も柔軟な解決策であることがわかりました。

\i 'path/to/file.sql'

すでに正しいデータベースに接続していることを確認してください。このコマンドは、指定されたファイル内のすべてのSQLコマンドを実行します。


1
この解決策は私にとってはうまくいきましたが、最も投票された解決策では「stdinはttyではありません」というエラーが発生しました。
2016年

psqlコマンドラインからスクリプトを実行する方法。ありがとう!
vatsug 2017

これをありがとうございます。正しい答えに含まれるべきです。
PKHunter 2017

これは正しいです。ウィンドウのパスにバックスラッシュを使用しないでください!
Erdinc Ay 2018

Windowsの場合も、ダブルフォワードスラッシュが必要です
CMAS

44

コマンドラインではかなりうまく機能し、すべての引数が必要です-Wはパスワード用です

psql -h localhost -U user -W -d database_name -f path/to/file.sql

22

ファンシーのためだけに、あなたのダンプが圧縮されているなら、あなたは次のようなことをすることができます

gunzip -c filename.gz | psql dbname

Jacobが述べたように、PostgreSQLのドキュメントはこれらすべてを非常によく説明しています。


7

私が使う:

cat /home/path/to/dump/file | psql -h localhost -U <user_name> -d <db_name>

これが誰かを助けることを願っています。


4

pgadmin3で実行できます。ダンプに含まれているスキーマを削除します。次に、データベースを右クリックして、[復元]を選択します。その後、ダンプファイルを参照できます。


2
ただし、.sqlファイルを選択した後でも、「復元」ボタンをクリックできません。このソフトウェアは、他の種類のファイル(* .backup形式のファイル)を必要とするようです。そのインポートボックスで[ヘルプ]をクリックすると、pg_restoreが参照されます。OPが参照するsqlファイルはプレーンテキスト形式です。
JosephK 2017年

4

インポート先のデータベースが作成されていることを確認してから、次のコマンドでダンプをインポートできます

sudo -u postgres -i psql testdatabase < db-structure.sql

データベース全体を上書きする場合は、まずデータベースを削除します

# be sure you drop the right database !!!
#sudo -u postgres -i psql -c "drop database testdatabase;"

そしてそれを再作成します

sudo -u postgres -i psql -c "create database testdatabase;"


2

私は自分のpostgresバックアップを復元するためにさまざまなソリューションを試しました。MacOSで問題が発生して許可が拒否されたため、解決策が機能していないようです。

これが私がそれを機能させる方法です:

PostgresにはPgadmin4が付属しています。macOSを使用している場合は、CMD+ SPACEを押しpgadmin4て実行します。これにより、ブラウザのタブがChromeで開きます。

pgadmin4を機能させるときにエラーが発生した場合killall pgAdmin4は、ターミナルで試してから、もう一度試してください。


pgadmin4 +バックアップ/復元を取得する手順

1.バックアップを作成する

これを行うには、データベースを右クリックし、[バックアップ]をクリックします。

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

2.ファイルに名前を付けます。

のようにtest12345。バックアップをクリックします。これは、バイナリファイルダンプを作成しますが、.sql形式ではありません

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

3.ダウンロードした場所を確認する

画面の右下にポップアップがあります。[詳細]ページをクリックして、バックアップのダウンロード先を確認します

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

4.ダウンロードしたファイルの場所を見つける

この場合、それは /users/vincenttang

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

5. pgadminからバックアップを復元します

手順1〜4を正しく実行したとすると、バイナリファイルが復元されます。同僚がローカルマシンで復元ファイルを使用したいと思うときがあるかもしれません。その人にpgadminに行って復元してもらいました

これを行うには、データベースを右クリックし、[復元]をクリックします。

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

6.ファイルファインダーを選択します

必ずファイルの場所を手動で選択してください。ファイルをpgadminのアップローダーフィールドにドラッグアンドドロップしないでください。エラー権限に遭遇するからです。代わりに、作成したファイルを見つけます。

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

7.上記のファイルを見つける

右下のフィルターを「すべてのファイル」に変更する必要がある場合があります。その後、ステップ4からファイルを見つけます。次に、右下の[選択]ボタンをクリックして確定します。

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

8.上記のファイルを復元する

ファイルの場所が選択された状態で、このページが再び表示されます。先に進んで、それを復元してください

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

9.成功

すべて問題なければ、右下に復元が成功したことを示すインジケーターが表示されます。テーブルに移動して、データが各テーブルで適切に復元されているかどうかを確認できます。

10.成功しなかった場合:

手順9が失敗した場合は、データベースの古いパブリックスキーマを削除してみてください。「クエリツール」に行く

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

次のコードブロックを実行します。

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

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

ステップ5から9をもう一度試してください。うまくいくはずです。

概要

これは、エラー権限の問題があり、スーパーユーザーとしてログインできなかったときに、Postgresでバックアップをバックアップ/復元する方法でした。またはchmod、フォルダーに使用する読み取り/書き込みの資格情報を設定します。このワークフローは、pgadminからの「カスタム」のバイナリファイルダンプのデフォルトに対して機能します。私.sqlは同じ方法だと思いますが、まだテストしていません

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