[英]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.