簡體   English   中英

無法在遠程 Linux VM 上 pg_restore SQL 文件

[英]Unable to pg_restore SQL file on remote Linux VM

我使用 PostgreSQL 作為我的數據庫。

我在遠程 Ubuntu 虛擬機上SCP了一個.sql文件。

我做了sudo su - postgres並創建了一個數據庫。

然后我切換回我的原始帳戶並嘗試了這個:

sudo -su postgres pg_restore < temp.sql

命令運行成功。

但是當我再次切換回postgres用戶並使用\\dt檢查表列表的數據庫時,我發現沒有表。

我做錯了什么?

'pg_restore' 用於恢復由 'pg_dump' 生成的文件。

從手冊頁

pg_restore 是一個實用程序,用於從 pg_dump(1) 創建的非純文本格式之一的存檔中恢復 PostgreSQL 數據庫。

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 網站上查看此答案

基本上你使用帶有sql文件的pg_restore ---> https://www.postgresql.org/message-id/AANLkTi%3DAqmWrUR4f8%2BEfCHZP%2BQrL1%3DunRLZp_jX7SoqF%40mail.gmail.com

使用ubuntu用戶從終端內運行psql命令時,我遇到了同樣的問題。 該命令將以out of memory不足錯誤結束。

然后我用sudo -i -u postgres切換到 postgres 用戶。

從那里我只需運行psql databasename -f databasefilebackup.sql ,如上所述。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM