PostgreSQLをDBとして使用しています。
リモートUbuntuVMにSCPed a 。sqlファイルがあります。
やった Sudo su - postgres
そしてDBを作成します。
次に、元のアカウントに切り替えて、これを試しました。
Sudo -su postgres pg_restore < temp.sql
コマンドは正常に実行されました。
しかし、再びpostgres userに切り替えて、\ dtを使用してdbでテーブルのリストを確認したところ、テーブルが見つかりませんでした。
私は何が間違っているのですか?
「pg_restore」は「pg_dump」によって生成されたファイルを復元するためのものです。
マニュアルページから
pg_restoreは、pg_dump(1)によって作成されたアーカイブからPostgreSQLデータベースを非平文形式の1つで復元するためのユーティリティです。
https://www.postgresql.org/docs/9.2/static/app-pgrestore.html
ファイルがpg_dumpによって生成された場合は、少なくとも、ダンプするデータベースを指定する必要があります。
pg_restore -d my_new_database temp.sql
さまざまなフレーバーにわたるpg_restoreの私自身の経験は、ダンプファイルが「ネイティブ」形式であっても、その形式を検出することをマンページに示しているにもかかわらず、何度もダンプファイルの形式を指定する必要があることを示しています。
pg_restore -d my_new_database -Fc temp.dump
これは単なる推測ですが、データベースを指定せずにテーブルが実際に復元された場合、それらはデフォルトのデータベースにダンプされたと思います。これを確認するには、「postgres」データベースにテーブルをリストします(存在しないはずです)。
postgres=#\c postgres
You are now connected to database "postgres" as user "postgres".
postgres=#\dt
No relations found.
テーブルがデフォルトのデータベースに復元された場合は、それらが一覧表示されます。
プレーンテキストのSQLファイルは別の方法で処理する必要があり、通常はpsqlを使用したSQLコマンドを介して実行されます。
psql -d my_database < temp.sql
次のようなデータベースバックアップを生成したと仮定します。
pg_dump -a --inserts databasename > exportfilename.sql
次のようにファイルを復元してみてください。
psql databasename -f exportfilename.sql
Postgres pg_restore
上記のようにdump
ファイルでのみ使用することを意図しており、そのように復元することはできません。 postgres.orgの公式ウェブサイトでこの回答を確認してください
基本的にあなたは使用しないでくださいpg_restore
with sql
files ---> https://www.postgresql.org/message-id/AANLkTi%3DAqmWrUR4f8%2BEfCHzP%2BQrL1%3DunRLZp_jX7SoqF%40mail.gmail.com