web-dev-qa-db-ja.com

リモートLinuxでSQLファイルをpg_restoreできませんVM

PostgreSQLをDBとして使用しています。

リモートUbuntuVMにSCPed a 。sqlファイルがあります。

やった Sudo su - postgresそしてDBを作成します。

次に、元のアカウントに切り替えて、これを試しました。

Sudo -su postgres pg_restore < temp.sql

コマンドは正常に実行されました。

しかし、再びpostgres userに切り替えて、\ dtを使用してdbでテーブルのリストを確認したところ、テーブルが見つかりませんでした。

私は何が間違っているのですか?

9
amitection

「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
10
lavajumper

次のようなデータベースバックアップを生成したと仮定します。

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

3
d1jhoni1b