2010-08-19 28 views
17

我感動從一個硬盤驅動器我的PostgreSQL數據庫到另一個使用移動是使用pg_dump和psql -U DB_NAME的Postgres數據庫<...結果「錯誤:關係‘表格名’不存在」

pg_dump -U postgres db_name > db_name.dump 

然後

psql -U postgres db_name < db_name.dump 

我在兩個實例中都以相同的方式創建了數據庫db_name。在運行我的Java程序使用JPA查詢(或JDBC查詢)的新的數據庫中,我得到這個錯誤:

"ERROR: relation "table1" does not exist" 

查詢是:

select count(0) from table1 

我知道我有一個連接,因爲如果我在連接參數中更改密碼,則會出現錯誤。

出於某種原因,在新的PostgresQL實例中,它認爲table1在導入的模式中不存在。

如果我更改查詢到

從myschema.table1

SELECT COUNT(0),那麼它抱怨權限:

"ERROR: permission denied for schema myschema" 

爲什麼會的權限是不同的?

表table1存在於myschema中,因爲我可以在pgAdmin工具中看到它。所有行都被導入到新的PostgresQL實例中。

當我從Java執行查詢時,pg_dump和psql的組合產生了問題。

我需要做些什麼來解決這個問題?

在此先感謝。

回答

28

您是否轉向PostgreSQL的同一版本?如果使用pg_dump 8.3進行轉儲並嘗試在Postgresql 8.4中進行恢復,可能會出現問題。無論如何,假設它是相同的版本試試以下方法:

轉儲全局對象,如用戶和組(不知道他們是否在你的轉儲失蹤):

pg_dumpall -g -U postgres > globals.sql 

轉儲模式

pg_dump -Fp -s -v -f db-schema.sql -U postgres dbname 

數據庫的轉儲內容:數據庫的

pg_dump -Fc -v -f full.dump -U postgres dbname 

現在水庫撕毀。

psql -f globals.sql 
psql -f db-schema.sql dbname 
pg_restore -a -d dbname -Fc full.dump 

這是我的0.02美元。希望能幫助到你。

+0

我正在從8.3移動到8.4。我會更改我的備份腳本以使用更全面的方法。感謝您的迴應。 – 2010-08-21 16:36:21

+1

我會爲大型數據庫添加冗長標誌(-v)到pg_restore。 'pg_restore -a -v -d dbname -Fc full.dump' – green0range 2014-03-27 20:50:56

+0

無論如何,如果你要去'pg_restore -a',轉儲架構兩次(以純文本和壓縮)的含義是什麼?爲什麼不''pg_dump -Fc -a -v -f data.dump',例如?或者完全跳過模式步驟,只需一步完成全局變量,而另一步執行全局變量? – Air 2015-04-13 16:56:10

1

我能夠通過將數據庫特權更改爲public CONNECT以及public和postgres = USAGE和CREATE的模式特權來解決此問題。

我的備份腳本顯然沒有保留權限,至少在從8.3移到8.4時沒有。

2

我遇到了這個問題。然後我意識到我忘了安裝postgis擴展名。

不要忘記安裝您使用的擴展。

+0

非常感謝的人。這是我掙扎了好幾個小時的問題。甚至不知道postgis的存在,我是新來的postgre世界。剛剛從回購安裝postgis和所有工作。 – 2017-08-11 09:22:37

相關問題